Class Expression
java.lang.Object
org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode
org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
org.aspectj.org.eclipse.jdt.internal.compiler.ast.Expression
- All Implemented Interfaces:
TypeConstants
,TypeIds
- Direct Known Subclasses:
AllocationExpression
,Annotation
,ArrayAllocationExpression
,ArrayInitializer
,Assignment
,CastExpression
,ClassLiteralAccess
,FunctionalExpression
,JavadocArgumentExpression
,JavadocModuleReference
,Literal
,MessageSend
,OperatorExpression
,Pattern
,Reference
,SwitchStatement
,TypeReference
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants
TypeConstants.BoundCheckStatus, TypeConstants.CloseMethodRecord, TypeConstants.DangerousMethod
-
Field Summary
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
COMPLAINED_FAKE_REACHABLE, COMPLAINED_UNREACHABLE, NOT_COMPLAINED
Fields inherited from class org.aspectj.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, DocumentedCasesOmitted, DocumentedFallthrough, Empty, ErrorInSignature, FirstAssignmentToLocal, GenerateCheckcast, HasAbstractMethods, HasAllMethodBodies, HasBeenGenerated, HasBeenResolved, HasFunctionalInterfaceTypes, HasLocalType, HasSyntaxErrors, HasTypeAnnotations, IgnoreNoEffectAssignCheck, IgnoreRawTypeCheck, inModule, InsideExpressionStatement, InsideJavadoc, INVOCATION_ARGUMENT_OK, INVOCATION_ARGUMENT_UNCHECKED, INVOCATION_ARGUMENT_WILDCARD, IsAdditionalDeclarator, IsAnnotationDefaultValue, IsAnonymousType, IsAnySubRoutineEscaping, IsArgument, IsCanonicalConstructor, IsCapturedOuterLocal, IsCompoundAssigned, IsDefaultConstructor, IsDiamond, IsElseIfStatement, IsElseStatementUnreachable, IsForeachElementVariable, IsImplicit, IsImplicitThis, IsImplicitUnit, IsLocalDeclarationReachable, IsLocalType, IsMemberType, IsNonNull, IsReachable, IsRecovered, IsReturnedValue, IsSecondaryType, IsSecretYieldValueUsage, IsStrictlyAssigned, IsSubRoutineEscaping, IsSuperType, IsSynchronized, IsSynthetic, IsThenStatementUnreachable, IsTryBlockExiting, IsTypeElided, IsUnionType, IsUsedInPatternGuard, IsUsefulEmptyStatement, IsVarArgs, LabelUsed, NeededScope, NeedFreeReturn, NeedReceiverGenericCast, NO_ARGUMENTS, NO_RECORD_COMPONENTS, OnDemand, OperatorMASK, OperatorSHIFT, OverridingMethodWithSupercall, ParenthesizedMASK, ParenthesizedSHIFT, ResolveJavadoc, RestrictiveFlagMASK, ReturnTypeIDMASK, ShadowsOuterLocal, sourceEnd, sourceStart, SuperAccess, ThenExit, Unchecked, UndocumentedEmptyBlock, UnnecessaryCast, UnsafeCast, Used
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants
ANNOTATION, ANNOTATION_PREFIX, ANNOTATION_SUFFIX, ANONYM_PREFIX, ANONYM_SUFFIX, ANONYMOUS_METHOD, APACHE, APACHE_DBUTILS, APACHE_IOUTILS, API, ASSERT_CLASS, ASSERT_FALSE, ASSERT_NOTNULL, ASSERT_NULL, ASSERT_TRUE, ASSERTIONS_CLASS, AUTOMATIC_MODULE_NAME, AUTOWIRED, BEANS, BOOLEAN, BYTE, CAPTURE18, CHANNELS, 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, CharArray_JAVA_LANG_RECORD, CharArray_JAVA_LANG_RECORD_SLASH, CHECK_ARGUMENT, CHECK_NOT_NULL, CHECK_STATE, CLINIT, CLONE, CLOSE, CLOSE_QUIETLY, closeMethods, COM, COM_GOOGLE_COMMON_BASE_PRECONDITIONS, COM_GOOGLE_INJECT_INJECT, COMMONS, COMPILER, CONSTRAINT_EQUAL, CONSTRAINT_EXTENDS, CONSTRAINT_SUPER, CONTAINS, CONTAINS_ALL, CONTAINS_KEY, CONTAINS_VALUE, CORE, DEFAULT_LOCATION__ARRAY_CONTENTS, DEFAULT_LOCATION__FIELD, DEFAULT_LOCATION__PARAMETER, DEFAULT_LOCATION__RETURN_TYPE, DEFAULT_LOCATION__TYPE_ARGUMENT, DEFAULT_LOCATION__TYPE_BOUND, DEFAULT_LOCATION__TYPE_PARAMETER, DESERIALIZE_LAMBDA, DOM, DOUBLE, ECLIPSE, EQUALS, ESSENTIAL_API, FACTORY, FLOAT, FLUENT_RESOURCE_CLASSES, FOR_REMOVAL, FRAMEWORK, GET, GETCLASS, GOOGLE, GUAVA_CLOSEABLES, HASHCODE, IMPLEMENTS, INDEX_OF, INIT, INJECT_PACKAGE, INJECT_TYPE, INT, INTERNAL, INVOKE, IO, IS_INSTANCE, IS_NOTNULL, IS_NULL, IS_TRUE, ITYPEBINDING, JAVA, JAVA_BASE, JAVA_IO, JAVA_IO_CLOSEABLE, JAVA_IO_EXTERNALIZABLE, JAVA_IO_IOEXCEPTION, JAVA_IO_OBJECTINPUTSTREAM, JAVA_IO_OBJECTOUTPUTSTREAM, JAVA_IO_OBJECTSTREAMEXCEPTION, JAVA_IO_PRINTSTREAM, JAVA_IO_RESOURCE_FREE_CLOSEABLES, JAVA_IO_SERIALIZABLE, JAVA_IO_WRAPPER_CLOSEABLES, JAVA_LANG, JAVA_LANG_ANNOTATION, JAVA_LANG_ANNOTATION_ANNOTATION, JAVA_LANG_ANNOTATION_DOCUMENTED, JAVA_LANG_ANNOTATION_ELEMENTTYPE, JAVA_LANG_ANNOTATION_INHERITED, JAVA_LANG_ANNOTATION_REPEATABLE, 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_FUNCTIONAL_INTERFACE, JAVA_LANG_ILLEGALARGUMENTEXCEPTION, JAVA_LANG_INCOMPATIBLECLASSCHANGEERROR, JAVA_LANG_INTEGER, JAVA_LANG_INVOKE_LAMBDAMETAFACTORY, JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLES, JAVA_LANG_INVOKE_SERIALIZEDLAMBDA, JAVA_LANG_ITERABLE, JAVA_LANG_LONG, JAVA_LANG_NOCLASSDEFERROR, JAVA_LANG_NOSUCHFIELDERROR, JAVA_LANG_OBJECT, JAVA_LANG_OVERRIDE, JAVA_LANG_RECORD, JAVA_LANG_REFLECT_CONSTRUCTOR, JAVA_LANG_REFLECT_FIELD, JAVA_LANG_REFLECT_METHOD, JAVA_LANG_RUNTIME_OBJECTMETHODS, JAVA_LANG_RUNTIME_SWITCHBOOTSTRAPS, 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_NIO_FILE_FILES, JAVA_UTIL_ARRAYS, JAVA_UTIL_COLLECTION, JAVA_UTIL_ITERATOR, JAVA_UTIL_LIST, JAVA_UTIL_MAP, JAVA_UTIL_OBJECTS, JAVA_UTIL_STREAM, JAVA_UTIL_ZIP_WRAPPER_CLOSEABLES, JAVAC, JAVAX, JAVAX_ANNOTATION_INJECT_INJECT, JAVAX_RMI_CORBA_STUB, JDK, JDK_INTERNAL_JAVAC_PREVIEW_FEATURE, JDK_INTERNAL_PREVIEW_FEATURE, JDK_INTERNAL_VALUEBASED, JDT, JUNIT, JUNIT_FRAMEWORK_ASSERT, JUPITER, KEYWORD_EXTENDS, LAMBDA_TYPE, LANG, LANG3, LAST_INDEX_OF, LENGTH, LONG, LOOKUP, MAIN, META_INF_MANIFEST_MF, METHOD_SOURCE, MODULE_INFO_CLASS_NAME, MODULE_INFO_CLASS_NAME_STRING, MODULE_INFO_FILE_NAME, MODULE_INFO_FILE_NAME_STRING, MODULE_INFO_NAME, MODULE_INFO_NAME_STRING, NIO, NON_NULL, NOT_NULL, NULL, OBJECT, ONE_UTIL_STREAMEX, OPTIONAL, ORG, ORG_APACHE_COMMONS_LANG_VALIDATE, ORG_APACHE_COMMONS_LANG3_VALIDATE, ORG_ECLIPSE_CORE_RUNTIME_ASSERT, ORG_ECLIPSE_JDT_CORE_DOM_ITYPEBINDING, ORG_ECLIPSE_JDT_INTERNAL_COMPILER_LOOKUP_TYPEBINDING, ORG_JUNIT_ASSERT, ORG_JUNIT_JUPITER_API_ASSERTIONS, ORG_JUNIT_METHOD_SOURCE, ORG_SPRING_AUTOWIRED, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, PARAMS, PERMITS, PROVIDER, READOBJECT, READRESOLVE, RECORD_CLASS, RECORD_RESTRICTED_IDENTIFIER, REFLECT, REMOVE, REMOVE_ALL, REQUIRE_NON_NULL, REQUIRED, RESOURCE_FREE_CLOSEABLE_J_U_STREAMS, RESOURCE_FREE_CLOSEABLE_STREAMEX, RETAIN_ALL, RUNTIME, SEALED, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, SINCE, SPRING, 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, TOSTRING, TYPE, TYPE_PARAMETER_TARGET, TYPE_USE_TARGET, TYPEBINDING, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_MODULE, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RECORD_COMPONENT, UPPER_RUNTIME, UPPER_SOURCE, UTIL, VALIDATE_CLASS, VALUE, VALUEOF, VALUES, VAR, VOID, WILDCARD_CAPTURE, WILDCARD_CAPTURE_NAME_PREFIX, WILDCARD_CAPTURE_NAME_SUFFIX, WILDCARD_CAPTURE_SIGNABLE_NAME_SUFFIX, WILDCARD_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE, YIELD, ZIP
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds
BitAnyNullAnnotation, BitAutoCloseable, BitCloseable, BitCollection, BitList, BitMap, BitNonNullAnnotation, BitNonNullByDefaultAnnotation, BitNullableAnnotation, BitResourceFreeCloseable, BitUninitialized, BitUninternedType, BitWrapperCloseable, 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, InheritableBits, 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_ComGoogleCommonBasePreconditions, T_ComGoogleInjectInject, 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_JavaLangAnnotationRepeatable, 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_JavaLangFunctionalInterface, T_JavaLangIllegalArgumentException, T_JavaLangInteger, T_JavaLangInvokeMethodHandlePolymorphicSignature, T_JavaLangIterable, T_JavaLangLong, T_JavaLangNoClassDefError, T_JavaLangObject, T_JavaLangOverride, T_JavaLangRecord, 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_JavaUtilList, T_JavaUtilMap, T_JavaUtilObjects, T_JavaxInjectInject, T_JdkInternalPreviewFeature, T_JunitFrameworkAssert, T_LastWellKnownTypeId, T_long, T_null, T_OrgApacheCommonsLang3Validate, T_OrgApacheCommonsLangValidate, T_OrgEclipseCoreRuntimeAssert, T_OrgJunitAssert, T_OrgJunitJupiterApiAssertions, T_OrgJunitJupiterParamsProviderMethodSource, T_OrgSpringframeworkBeansFactoryAnnotationAutowired, T_short, T_undefined, T_void, UNBOXING
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addPatternVariables(BlockScope scope, CodeStream codeStream)
analyseCode(BlockScope currentScope, FlowContext flowContext, 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, boolean useAutoBoxing)
Returns false if cast is not legal.boolean
checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo)
boolean
checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck)
Check this expression against potential NPEs, which may occur: if the expression is the receiver in a field access, qualified allocation, array reference or message send incl. implicit message sends like it happens for the collection in a foreach statement. if the expression is subject to unboxing if the expression is the exception in a throw statement If a risk of NPE is detected report it to the context.protected void
checkNPEbyUnboxing(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo)
If this expression requires unboxing check if that operation can throw NPE.boolean
checkUnsafeCast(Scope scope, TypeBinding castType, TypeBinding expressionType, TypeBinding match, boolean isNarrowing)
void
collectPatternVariablesToScope(LocalVariableBinding[] variables, BlockScope scope)
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.static int
computeNullStatus(int status, int combinedStatus)
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 valuevoid
generateOptimizedStringConcatenation(BlockScope blockScope, CodeStream codeStream, int typeID)
void
generateOptimizedStringConcatenationCreation(BlockScope blockScope, CodeStream codeStream, int typeID)
static Binding
getDirectBinding(Expression someExpression)
Returns contained poly expressions, result could be 0, 1 or more (for conditional expression)boolean
isBoxingCompatibleWith(TypeBinding left, Scope scope)
boolean
boolean
isCompatibleWith(TypeBinding left, Scope scope)
boolean
isConstantValueOfTypeAssignableToType(TypeBinding constantType, TypeBinding targetType)
static boolean
isConstantValueRepresentable(Constant constant, int constantTypeID, int targetTypeID)
boolean
boolean
boolean
isPertinentToApplicability(TypeBinding targetType, MethodBinding method)
boolean
boolean
isPolyExpression(MethodBinding method)
Variant of isPolyExpression() to be used during type inference, when a resolution candidate exists.boolean
isPotentiallyCompatibleWith(TypeBinding targetType, Scope scope)
boolean
boolean
Returns the local variable referenced by this node.void
Mark this expression as being non null, per a specific tag in the source code.nullAnnotatedVariableBinding(boolean supportTypeAnnotations)
Used on the lhs of an assignment for detecting null spec violation.int
nullStatus(FlowInfo flowInfo, FlowContext flowContext)
Constant usable for bytecode pattern optimizations, but cannot be inlined since it is not strictly equivalent to the definition of constant expressions.protected Constant
postConversionType(Scope scope)
Returns the type of the expression after required implicit conversions.print(int indent, StringBuffer output)
abstract StringBuffer
printExpression(int indent, StringBuffer output)
printStatement(int indent, StringBuffer output)
void
resolve(BlockScope scope)
resolveExpressionExpecting(TypeBinding targetType, Scope scope, InferenceContext18 context)
resolveExpressionType(BlockScope scope)
Returns the resolved expression if any associated to this statement - used parameter statement has to be either a SwitchStatement or a SwitchExpressionresolveType(BlockScope scope)
Resolve the type of this expression in the context of a blockScoperesolveType(ClassScope scope)
Resolve the type of this expression in the context of a classScoperesolveTypeExpecting(BlockScope scope, TypeBinding expectedType)
Returns an object which can be used to identify identical JSR sequence targets (see TryStatement subroutine codegen) ornull if not reusable
void
setExpectedType(TypeBinding expectedType)
Record the type expectation before this expression is typechecked.void
setExpressionContext(ExpressionContext context)
boolean
sIsMoreSpecific(TypeBinding s, TypeBinding t, Scope scope)
boolean
void
void
tagAsUnnecessaryCast(Scope scope, TypeBinding castType)
Record the fact a cast expression got detected as being unnecessary.void
traverse(ASTVisitor visitor, BlockScope scope)
Traverse an expression in the context of a blockScopevoid
traverse(ASTVisitor visitor, ClassScope scope)
Traverse an expression in the context of a classScopeprotected void
updateFlowOnBooleanResult(FlowInfo flowInfo, boolean result)
Back-propagation of flow info: before analysing a branch where a given condition is known to hold true/false respectively, ask the condition to contribute its information to the given flowInfo.Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
addPatternVariablesWhenFalse, addPatternVariablesWhenTrue, analyseArguments, branchChainTo, breaksOut, canCompleteNormally, checkAgainstNullTypeAnnotation, complainIfUnreachable, completesByContinue, containsPatternVariable, continueCompletes, continuesAtOuterLabel, doesNotCompleteNormally, doNotReportUnreachable, expectedType, findConstructorBinding, generateArguments, getExpressionContext, getPatternVariablesWhenFalse, getPatternVariablesWhenTrue, invocationTargetType, isBoxingCompatible, isEmptyBlock, isKnowDeadCodePattern, isValidJavaStatement, promotePatternVariablesIfApplicable, resolveWithPatternVariablesInScope
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode
acceptPotentiallyCompatibleMethods, checkingPotentialCompatibility, checkInvocationArguments, concreteStatement, copyRecordComponentAnnotations, copySE8AnnotationsToType, getRelevantAnnotations, handleNonNullByDefault, isFieldUseDeprecated, isImplicitThis, isMethodUseDeprecated, isQualifiedSuper, isSuper, isThis, isType, isTypeUseDeprecated, isUnqualifiedSuper, printAnnotations, printIndent, printModifiers, receiverIsImplicitThis, resolveAnnotations, resolveAnnotations, resolveAnnotations, resolveDeprecatedAnnotations, resolvePolyExpressionArguments, sourceEnd, sourceStart, toString
-
Field Details
-
constant
-
statementEnd
public int statementEnd -
implicitConversion
public int implicitConversion -
resolvedType
-
NO_EXPRESSIONS
-
-
Constructor Details
-
Expression
public Expression()
-
-
Method Details
-
isConstantValueRepresentable
public static final boolean isConstantValueRepresentable(Constant constant, int constantTypeID, int targetTypeID) -
analyseCode
- Specified by:
analyseCode
in classStatement
-
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.- Parameters:
currentScope
-flowContext
-flowInfo
-valueRequired
-- Returns:
- The state of initialization after the analysis of the current expression
-
updateFlowOnBooleanResult
Back-propagation of flow info: before analysing a branch where a given condition is known to hold true/false respectively, ask the condition to contribute its information to the given flowInfo.- Parameters:
flowInfo
- the info to be used for analysing the branchresult
- condition result that would cause entering the branch
-
checkCastTypesCompatibility
public final boolean checkCastTypesCompatibility(Scope scope, TypeBinding castType, TypeBinding expressionType, Expression expression, boolean useAutoBoxing)Returns false if cast is not legal. -
checkNPE
public boolean checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo, int ttlForFieldCheck)Check this expression against potential NPEs, which may occur:- if the expression is the receiver in a field access, qualified allocation, array reference or message send incl. implicit message sends like it happens for the collection in a foreach statement.
- if the expression is subject to unboxing
- if the expression is the exception in a throw statement
- Parameters:
scope
- the scope of the analysisflowContext
- the current flow contextflowInfo
- the upstream flow info; caveat: may get modifiedttlForFieldCheck
- if this is a reference to a field we will mark that field as nonnull for the specified timeToLive- Returns:
- could this expression be checked by the current implementation?
-
checkNPE
-
checkNPEbyUnboxing
If this expression requires unboxing check if that operation can throw NPE. -
checkUnsafeCast
public boolean checkUnsafeCast(Scope scope, TypeBinding castType, TypeBinding expressionType, TypeBinding match, boolean isNarrowing) -
computeConversion
Base types need that the widening is explicitly done by the compiler using some bytecode like i2f. Also check unsafe type operations. -
computeNullStatus
public static int computeNullStatus(int status, int combinedStatus) -
generateCode
Expression statements are plain expressions, however they generate like normal expressions with no value required.- Specified by:
generateCode
in classStatement
- Parameters:
currentScope
- org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BlockScopecodeStream
- org.aspectj.org.eclipse.jdt.internal.compiler.codegen.CodeStream
-
generateCode
Every expression is responsible for generating its implicit conversion when necessary.- Parameters:
currentScope
- org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BlockScopecodeStream
- org.aspectj.org.eclipse.jdt.internal.compiler.codegen.CodeStreamvalueRequired
- boolean
-
addPatternVariables
-
getPatternVariableIntroduced
-
collectPatternVariablesToScope
-
generateOptimizedBoolean
public void generateOptimizedBoolean(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel, boolean valueRequired)Default generation of a boolean value- Parameters:
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
-
isCompactableOperation
public boolean isCompactableOperation() -
isConstantValueOfTypeAssignableToType
public boolean isConstantValueOfTypeAssignableToType(TypeBinding constantType, TypeBinding targetType) -
isTypeReference
public boolean isTypeReference() -
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
-
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).- Returns:
- Constant known to be of boolean type
-
isPertinentToApplicability
-
postConversionType
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(...)).- Returns:
- the type after implicit conversion
-
print
-
printExpression
-
printStatement
- Specified by:
printStatement
in classStatement
-
resolve
-
resolveExpressionType
Description copied from class:Statement
Returns the resolved expression if any associated to this statement - used parameter statement has to be either a SwitchStatement or a SwitchExpression- Overrides:
resolveExpressionType
in classStatement
-
resolveType
Resolve the type of this expression in the context of a blockScope- Parameters:
scope
-- Returns:
- Return the actual type of this expression after resolution
-
resolveType
Resolve the type of this expression in the context of a classScope- Parameters:
scope
-- Returns:
- Return the actual type of this expression after resolution
-
resolveTypeExpecting
-
resolveExpressionExpecting
public Expression resolveExpressionExpecting(TypeBinding targetType, Scope scope, InferenceContext18 context) -
forcedToBeRaw
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
Returns an object which can be used to identify identical JSR sequence targets (see TryStatement subroutine codegen) ornull if not reusable
-
setExpectedType
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.- Parameters:
expectedType
- The type denoting an expectation in the context of an assignment conversion
-
setExpressionContext
-
isCompatibleWith
-
isBoxingCompatibleWith
-
sIsMoreSpecific
-
isExactMethodReference
public boolean isExactMethodReference() -
isPolyExpression
- Throws:
UnsupportedOperationException
-
isPolyExpression
Variant of isPolyExpression() to be used during type inference, when a resolution candidate exists. -
tagAsNeedCheckCast
public void tagAsNeedCheckCast() -
tagAsUnnecessaryCast
Record the fact a cast expression got detected as being unnecessary.- Parameters:
scope
-castType
-
-
toTypeReference
-
traverse
Traverse an expression in the context of a blockScope -
traverse
Traverse an expression in the context of a classScope- Parameters:
visitor
-scope
-
-
statementExpression
public boolean statementExpression() -
isTrulyExpression
public boolean isTrulyExpression() -
nullAnnotatedVariableBinding
Used on the lhs of an assignment for detecting null spec violation. If this expression represents a null-annotated variable return the variable binding, otherwise null.- Parameters:
supportTypeAnnotations
- if true this causes any variable binding to be used independent of declaration annotations (for in-depth analysis of type annotations)
-
isFunctionalType
public boolean isFunctionalType() -
getPolyExpressions
Returns contained poly expressions, result could be 0, 1 or more (for conditional expression) -
isPotentiallyCompatibleWith
-
optimizedNullComparisonConstant
-