org.eclipse.jdt.internal.compiler.ast
类 Expression

java.lang.Object
  继承者 org.eclipse.jdt.internal.compiler.ast.ASTNode
      继承者 org.eclipse.jdt.internal.compiler.ast.Statement
          继承者 org.eclipse.jdt.internal.compiler.ast.Expression
所有已实现的接口:
TypeConstants, TypeIds
直接已知子类:
AllocationExpression, Annotation, ArrayAllocationExpression, ArrayInitializer, Assignment, CastExpression, ClassLiteralAccess, JavadocArgumentExpression, Literal, MessageSend, OperatorExpression, Reference, TypeReference

public abstract class Expression
extends Statement


字段摘要
 Constant constant
           
 int implicitConversion
           
 TypeBinding resolvedType
           
 int statementEnd
           
 
从类 org.eclipse.jdt.internal.compiler.ast.Statement 继承的字段
COMPLAINED_FAKE_REACHABLE, COMPLAINED_UNREACHABLE, NOT_COMPLAINED
 
从类 org.eclipse.jdt.internal.compiler.ast.ASTNode 继承的字段
Bit1, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15, Bit16, Bit17, Bit18, Bit19, Bit2, Bit20, Bit21, Bit22, Bit23, Bit24, Bit25, Bit26, Bit27, Bit28, Bit29, Bit3, Bit30, Bit31, Bit32, Bit32L, Bit33L, Bit34L, Bit35L, Bit36L, Bit37L, Bit38L, Bit39L, Bit4, Bit40L, Bit41L, Bit42L, Bit43L, Bit44L, Bit45L, Bit46L, Bit47L, Bit48L, Bit49L, Bit5, Bit50L, Bit51L, Bit52L, Bit53L, Bit54L, Bit55L, Bit56L, Bit57L, Bit58L, Bit59L, Bit6, Bit60L, Bit61L, Bit62L, Bit63L, Bit64L, Bit7, Bit8, Bit9, bits, BlockExit, CanBeStatic, ContainsAssertion, DepthMASK, DepthSHIFT, DidResolve, DisableUnnecessaryCastCheck, DiscardEnclosingInstance, DocumentedFallthrough, Empty, ErrorInSignature, FirstAssignmentToLocal, GenerateCheckcast, HasAbstractMethods, HasAllMethodBodies, HasBeenGenerated, HasBeenResolved, HasLocalType, HasSyntaxErrors, IgnoreNoEffectAssignCheck, IgnoreRawTypeCheck, InsideExpressionStatement, InsideJavadoc, INVOCATION_ARGUMENT_OK, INVOCATION_ARGUMENT_UNCHECKED, INVOCATION_ARGUMENT_WILDCARD, IsAnnotationDefaultValue, IsAnonymousType, IsAnySubRoutineEscaping, IsArgument, IsCompoundAssigned, IsDefaultConstructor, IsDiamond, IsElseIfStatement, IsElseStatementUnreachable, IsImplicitThis, IsImplicitUnit, IsLocalDeclarationReachable, IsLocalType, IsMemberType, IsNonNull, IsReachable, IsRecovered, IsReturnedValue, IsSecondaryType, IsStrictlyAssigned, IsSubRoutineEscaping, IsSuperType, IsSynchronized, IsThenStatementUnreachable, IsTryBlockExiting, IsUnionType, IsUsefulEmptyStatement, IsVarArgs, LabelUsed, NeededScope, NeedFreeReturn, NeedReceiverGenericCast, OnDemand, OperatorMASK, OperatorSHIFT, OverridingMethodWithSupercall, ParenthesizedMASK, ParenthesizedSHIFT, ResolveJavadoc, RestrictiveFlagMASK, ReturnTypeIDMASK, sourceEnd, sourceStart, SuperAccess, ThenExit, Unchecked, UndocumentedEmptyBlock, UnnecessaryCast, UnsafeCast, Used
 
从接口 org.eclipse.jdt.internal.compiler.lookup.TypeConstants 继承的字段
ANNOTATION, ANNOTATION_PREFIX, ANNOTATION_SUFFIX, ANONYM_PREFIX, ANONYM_SUFFIX, BOOLEAN, BYTE, CHAR, CharArray_JAVA_IO_OBJECTINPUTSTREAM, CharArray_JAVA_IO_OBJECTOUTPUTSTREAM, CharArray_JAVA_IO_OBJECTSTREAMFIELD, CharArray_JAVA_LANG_ANNOTATION_ANNOTATION, CharArray_JAVA_LANG_ENUM, CharArray_JAVA_LANG_OBJECT, CLINIT, CLONE, CONSTRAINT_EQUAL, CONSTRAINT_EXTENDS, CONSTRAINT_SUPER, DOUBLE, EQUALS, FLOAT, GETCLASS, HASHCODE, INIT, INT, INVOKE, IO, JAVA, JAVA_IO, JAVA_IO_EXTERNALIZABLE, JAVA_IO_IOEXCEPTION, JAVA_IO_OBJECTINPUTSTREAM, JAVA_IO_OBJECTOUTPUTSTREAM, JAVA_IO_OBJECTSTREAMEXCEPTION, JAVA_IO_PRINTSTREAM, JAVA_IO_SERIALIZABLE, JAVA_LANG, JAVA_LANG_ANNOTATION_ANNOTATION, JAVA_LANG_ANNOTATION_DOCUMENTED, JAVA_LANG_ANNOTATION_ELEMENTTYPE, JAVA_LANG_ANNOTATION_INHERITED, JAVA_LANG_ANNOTATION_RETENTION, JAVA_LANG_ANNOTATION_RETENTIONPOLICY, JAVA_LANG_ANNOTATION_TARGET, JAVA_LANG_ASSERTIONERROR, JAVA_LANG_AUTOCLOSEABLE, JAVA_LANG_BOOLEAN, JAVA_LANG_BYTE, JAVA_LANG_CHARACTER, JAVA_LANG_CLASS, JAVA_LANG_CLASSNOTFOUNDEXCEPTION, JAVA_LANG_CLONEABLE, JAVA_LANG_DEPRECATED, JAVA_LANG_DOUBLE, JAVA_LANG_ENUM, JAVA_LANG_ERROR, JAVA_LANG_EXCEPTION, JAVA_LANG_FLOAT, JAVA_LANG_ILLEGALARGUMENTEXCEPTION, JAVA_LANG_INTEGER, JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, JAVA_LANG_ITERABLE, JAVA_LANG_LONG, JAVA_LANG_NOCLASSDEFERROR, JAVA_LANG_OBJECT, JAVA_LANG_OVERRIDE, JAVA_LANG_REFLECT_CONSTRUCTOR, JAVA_LANG_REFLECT_FIELD, JAVA_LANG_REFLECT_METHOD, JAVA_LANG_RUNTIMEEXCEPTION, JAVA_LANG_SAFEVARARGS, JAVA_LANG_SHORT, JAVA_LANG_STRING, JAVA_LANG_STRINGBUFFER, JAVA_LANG_STRINGBUILDER, JAVA_LANG_SUPPRESSWARNINGS, JAVA_LANG_SYSTEM, JAVA_LANG_THROWABLE, JAVA_LANG_VOID, JAVA_UTIL_COLLECTION, JAVA_UTIL_ITERATOR, JAVAX_RMI_CORBA_STUB, LANG, LENGTH, LONG, MAIN, MISMATCH, NULL, OBJECT, OK, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, SYNTHETIC_ACCESS_METHOD_PREFIX, SYNTHETIC_ASSERT_DISABLED, SYNTHETIC_CLASS, SYNTHETIC_ENCLOSING_INSTANCE_PREFIX, SYNTHETIC_ENUM_CONSTANT_INITIALIZATION_METHOD_PREFIX, SYNTHETIC_ENUM_VALUES, SYNTHETIC_OUTER_LOCAL_PREFIX, SYNTHETIC_STATIC_FACTORY, SYNTHETIC_SWITCH_ENUM_TABLE, TYPE, UNCHECKED, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RUNTIME, UPPER_SOURCE, UTIL, VALUE, VALUEOF, VALUES, VOID, WILDCARD_CAPTURE, WILDCARD_CAPTURE_NAME_PREFIX, WILDCARD_CAPTURE_NAME_SUFFIX, WILDCARD_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE
 
从接口 org.eclipse.jdt.internal.compiler.lookup.TypeIds 继承的字段
Boolean2Boolean, Boolean2Int, Boolean2String, BOXING, Byte2Byte, Byte2Char, Byte2Double, Byte2Float, Byte2Int, Byte2Long, Byte2Short, Byte2String, Char2Byte, Char2Char, Char2Double, Char2Float, Char2Int, Char2Long, Char2Short, Char2String, COMPILE_TYPE_MASK, Double2Byte, Double2Char, Double2Double, Double2Float, Double2Int, Double2Long, Double2Short, Double2String, Float2Byte, Float2Char, Float2Double, Float2Float, Float2Int, Float2Long, Float2Short, Float2String, IMPLICIT_CONVERSION_MASK, Int2Byte, Int2Char, Int2Double, Int2Float, Int2Int, Int2Long, Int2Short, Int2String, Long2Byte, Long2Char, Long2Double, Long2Float, Long2Int, Long2Long, Long2Short, Long2String, NoId, Null2Null, Null2String, Object2boolean, Object2byte, Object2char, Object2double, Object2float, Object2int, Object2long, Object2Object, Object2short, Object2String, Short2Byte, Short2Char, Short2Double, Short2Float, Short2Int, Short2Long, Short2Short, Short2String, String2String, T_boolean, T_byte, T_char, T_double, T_float, T_int, T_JavaIoException, T_JavaIoExternalizable, T_JavaIoObjectStreamException, T_JavaIoPrintStream, T_JavaIoSerializable, T_JavaLangAnnotationAnnotation, T_JavaLangAnnotationDocumented, T_JavaLangAnnotationElementType, T_JavaLangAnnotationInherited, T_JavaLangAnnotationRetention, T_JavaLangAnnotationRetentionPolicy, T_JavaLangAnnotationTarget, T_JavaLangAssertionError, T_JavaLangAutoCloseable, T_JavaLangBoolean, T_JavaLangByte, T_JavaLangCharacter, T_JavaLangClass, T_JavaLangClassNotFoundException, T_JavaLangCloneable, T_JavaLangDeprecated, T_JavaLangDouble, T_JavaLangEnum, T_JavaLangError, T_JavaLangException, T_JavaLangFloat, T_JavaLangIllegalArgumentException, T_JavaLangInteger, T_JavaLangInvokeMethodHandlePolymorphicSignature, T_JavaLangIterable, T_JavaLangLong, T_JavaLangNoClassDefError, T_JavaLangObject, T_JavaLangOverride, T_JavaLangReflectConstructor, T_JavaLangReflectField, T_JavaLangReflectMethod, T_JavaLangRuntimeException, T_JavaLangSafeVarargs, T_JavaLangShort, T_JavaLangString, T_JavaLangStringBuffer, T_JavaLangStringBuilder, T_JavaLangSuppressWarnings, T_JavaLangSystem, T_JavaLangThrowable, T_JavaLangVoid, T_JavaUtilCollection, T_JavaUtilIterator, T_long, T_null, T_short, T_undefined, T_void, UNBOXING
 
构造方法摘要
Expression()
           
 
方法摘要
 FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo)
           
 FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired)
          More sophisticated for of the flow analysis used for analyzing expressions, and be able to optimize out portions of expressions where no actual value is required.
 boolean checkCastTypesCompatibility(Scope scope, TypeBinding castType, TypeBinding expressionType, Expression expression)
          Returns false if cast is not legal.
 void checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo)
          Check the local variable of this expression, if any, against potential NPEs given a flow context and an upstream flow info.
 boolean checkUnsafeCast(Scope scope, TypeBinding castType, TypeBinding expressionType, TypeBinding match, boolean isNarrowing)
           
 void computeConversion(Scope scope, TypeBinding runtimeType, TypeBinding compileTimeType)
          Base types need that the widening is explicitly done by the compiler using some bytecode like i2f.
 boolean forcedToBeRaw(ReferenceContext referenceContext)
          Returns true if the receiver is forced to be of raw type either to satisfy the contract imposed by a super type or because it *is* raw and the current type has no control over it (i.e the rawness originates from some other file.)
 void generateCode(BlockScope currentScope, CodeStream codeStream)
          Expression statements are plain expressions, however they generate like normal expressions with no value required.
 void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired)
          Every expression is responsible for generating its implicit conversion when necessary.
 void generateOptimizedBoolean(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel, boolean valueRequired)
          Default generation of a boolean value
 void generateOptimizedStringConcatenation(BlockScope blockScope, CodeStream codeStream, int typeID)
           
 void generateOptimizedStringConcatenationCreation(BlockScope blockScope, CodeStream codeStream, int typeID)
           
static Binding getDirectBinding(Expression someExpression)
           
 boolean isCompactableOperation()
           
 boolean isConstantValueOfTypeAssignableToType(TypeBinding constantType, TypeBinding targetType)
           
static boolean isConstantValueRepresentable(Constant constant, int constantTypeID, int targetTypeID)
           
 boolean isTypeReference()
           
 LocalVariableBinding localVariableBinding()
          Returns the local variable referenced by this node.
 void markAsNonNull()
          Mark this expression as being non null, per a specific tag in the source code.
 int nullStatus(FlowInfo flowInfo)
           
 Constant optimizedBooleanConstant()
          Constant usable for bytecode pattern optimizations, but cannot be inlined since it is not strictly equivalent to the definition of constant expressions.
 TypeBinding postConversionType(Scope scope)
          Returns the type of the expression after required implicit conversions.
 StringBuffer print(int indent, StringBuffer output)
           
abstract  StringBuffer printExpression(int indent, StringBuffer output)
           
 StringBuffer printStatement(int indent, StringBuffer output)
           
 void resolve(BlockScope scope)
           
 TypeBinding resolveType(BlockScope scope)
          Resolve the type of this expression in the context of a blockScope
 TypeBinding resolveType(ClassScope scope)
          Resolve the type of this expression in the context of a classScope
 TypeBinding resolveTypeExpecting(BlockScope scope, TypeBinding expectedType)
           
 Object reusableJSRTarget()
          Returns an object which can be used to identify identical JSR sequence targets (see TryStatement subroutine codegen) or null if not reusable
 void setExpectedType(TypeBinding expectedType)
          Record the type expectation before this expression is typechecked.
 void tagAsNeedCheckCast()
           
 void tagAsUnnecessaryCast(Scope scope, TypeBinding castType)
          Record the fact a cast expression got detected as being unnecessary.
 Expression toTypeReference()
           
 void traverse(ASTVisitor visitor, BlockScope scope)
          Traverse an expression in the context of a blockScope
 void traverse(ASTVisitor visitor, ClassScope scope)
          Traverse an expression in the context of a classScope
 
从类 org.eclipse.jdt.internal.compiler.ast.Statement 继承的方法
branchChainTo, checkAgainstNullAnnotation, complainIfUnreachable, expectedType, generateArguments, isBoxingCompatible, isEmptyBlock, isKnowDeadCodePattern, isValidJavaStatement, resolveCase
 
从类 org.eclipse.jdt.internal.compiler.ast.ASTNode 继承的方法
checkInvocationArguments, concreteStatement, isFieldUseDeprecated, isImplicitThis, isMethodUseDeprecated, isSuper, isThis, isTypeUseDeprecated, printAnnotations, printIndent, printModifiers, resolveAnnotations, resolveDeprecatedAnnotations, sourceEnd, sourceStart, toString
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

字段详细信息

constant

public Constant constant

statementEnd

public int statementEnd

implicitConversion

public int implicitConversion

resolvedType

public TypeBinding resolvedType
构造方法详细信息

Expression

public Expression()
方法详细信息

isConstantValueRepresentable

public static final boolean isConstantValueRepresentable(Constant constant,
                                                         int constantTypeID,
                                                         int targetTypeID)

analyseCode

public FlowInfo analyseCode(BlockScope currentScope,
                            FlowContext flowContext,
                            FlowInfo flowInfo)
指定者:
Statement 中的 analyseCode

analyseCode

public FlowInfo analyseCode(BlockScope currentScope,
                            FlowContext flowContext,
                            FlowInfo flowInfo,
                            boolean valueRequired)
More sophisticated for of the flow analysis used for analyzing expressions, and be able to optimize out portions of expressions where no actual value is required.

参数:
currentScope -
flowContext -
flowInfo -
valueRequired -
返回:
The state of initialization after the analysis of the current expression

checkCastTypesCompatibility

public final boolean checkCastTypesCompatibility(Scope scope,
                                                 TypeBinding castType,
                                                 TypeBinding expressionType,
                                                 Expression expression)
Returns false if cast is not legal.


checkNPE

public void checkNPE(BlockScope scope,
                     FlowContext flowContext,
                     FlowInfo flowInfo)
Check the local variable of this expression, if any, against potential NPEs given a flow context and an upstream flow info. If so, report the risk to the context. Marks the local as checked, which affects the flow info.

参数:
scope - the scope of the analysis
flowContext - the current flow context
flowInfo - the upstream flow info; caveat: may get modified

checkUnsafeCast

public boolean checkUnsafeCast(Scope scope,
                               TypeBinding castType,
                               TypeBinding expressionType,
                               TypeBinding match,
                               boolean isNarrowing)

computeConversion

public void computeConversion(Scope scope,
                              TypeBinding runtimeType,
                              TypeBinding compileTimeType)
Base types need that the widening is explicitly done by the compiler using some bytecode like i2f. Also check unsafe type operations.


generateCode

public void generateCode(BlockScope currentScope,
                         CodeStream codeStream)
Expression statements are plain expressions, however they generate like normal expressions with no value required.

指定者:
Statement 中的 generateCode
参数:
currentScope - org.eclipse.jdt.internal.compiler.lookup.BlockScope
codeStream - org.eclipse.jdt.internal.compiler.codegen.CodeStream

generateCode

public void generateCode(BlockScope currentScope,
                         CodeStream codeStream,
                         boolean valueRequired)
Every expression is responsible for generating its implicit conversion when necessary.

参数:
currentScope - org.eclipse.jdt.internal.compiler.lookup.BlockScope
codeStream - org.eclipse.jdt.internal.compiler.codegen.CodeStream
valueRequired - boolean

generateOptimizedBoolean

public void generateOptimizedBoolean(BlockScope currentScope,
                                     CodeStream codeStream,
                                     BranchLabel trueLabel,
                                     BranchLabel falseLabel,
                                     boolean valueRequired)
Default generation of a boolean value

参数:
currentScope -
codeStream -
trueLabel -
falseLabel -
valueRequired -

generateOptimizedStringConcatenation

public void generateOptimizedStringConcatenation(BlockScope blockScope,
                                                 CodeStream codeStream,
                                                 int typeID)

generateOptimizedStringConcatenationCreation

public void generateOptimizedStringConcatenationCreation(BlockScope blockScope,
                                                         CodeStream codeStream,
                                                         int typeID)

getDirectBinding

public static Binding getDirectBinding(Expression someExpression)

isCompactableOperation

public boolean isCompactableOperation()

isConstantValueOfTypeAssignableToType

public boolean isConstantValueOfTypeAssignableToType(TypeBinding constantType,
                                                     TypeBinding targetType)

isTypeReference

public boolean isTypeReference()

localVariableBinding

public LocalVariableBinding localVariableBinding()
Returns the local variable referenced by this node. Can be a direct reference (SingleNameReference) or thru a cast expression etc...


markAsNonNull

public void markAsNonNull()
Mark this expression as being non null, per a specific tag in the source code.


nullStatus

public int nullStatus(FlowInfo flowInfo)

optimizedBooleanConstant

public Constant optimizedBooleanConstant()
Constant usable for bytecode pattern optimizations, but cannot be inlined since it is not strictly equivalent to the definition of constant expressions. In particular, some side-effects may be required to occur (only the end value is known).

返回:
Constant known to be of boolean type

postConversionType

public TypeBinding postConversionType(Scope scope)
Returns the type of the expression after required implicit conversions. When expression type gets promoted or inserted a generic cast, the converted type will differ from the resolved type (surface side-effects from #computeConversion(...)).

返回:
the type after implicit conversion

print

public StringBuffer print(int indent,
                          StringBuffer output)
覆盖:
Statement 中的 print

printExpression

public abstract StringBuffer printExpression(int indent,
                                             StringBuffer output)

printStatement

public StringBuffer printStatement(int indent,
                                   StringBuffer output)
指定者:
Statement 中的 printStatement

resolve

public void resolve(BlockScope scope)
指定者:
Statement 中的 resolve

resolveType

public TypeBinding resolveType(BlockScope scope)
Resolve the type of this expression in the context of a blockScope

参数:
scope -
返回:
Return the actual type of this expression after resolution

resolveType

public TypeBinding resolveType(ClassScope scope)
Resolve the type of this expression in the context of a classScope

参数:
scope -
返回:
Return the actual type of this expression after resolution

resolveTypeExpecting

public TypeBinding resolveTypeExpecting(BlockScope scope,
                                        TypeBinding expectedType)

forcedToBeRaw

public boolean forcedToBeRaw(ReferenceContext referenceContext)
Returns true if the receiver is forced to be of raw type either to satisfy the contract imposed by a super type or because it *is* raw and the current type has no control over it (i.e the rawness originates from some other file.)


reusableJSRTarget

public Object reusableJSRTarget()
Returns an object which can be used to identify identical JSR sequence targets (see TryStatement subroutine codegen) or null if not reusable


setExpectedType

public void setExpectedType(TypeBinding expectedType)
Record the type expectation before this expression is typechecked. e.g. String s = foo();, foo() will be tagged as being expected of type String Used to trigger proper inference of generic method invocations.

参数:
expectedType - The type denoting an expectation in the context of an assignment conversion

tagAsNeedCheckCast

public void tagAsNeedCheckCast()

tagAsUnnecessaryCast

public void tagAsUnnecessaryCast(Scope scope,
                                 TypeBinding castType)
Record the fact a cast expression got detected as being unnecessary.

参数:
scope -
castType -

toTypeReference

public Expression toTypeReference()

traverse

public void traverse(ASTVisitor visitor,
                     BlockScope scope)
Traverse an expression in the context of a blockScope

覆盖:
ASTNode 中的 traverse
参数:
visitor -
scope -

traverse

public void traverse(ASTVisitor visitor,
                     ClassScope scope)
Traverse an expression in the context of a classScope

参数:
visitor -
scope -


Copyright © 2013. All Rights Reserved.