org.aspectj.org.eclipse.jdt.internal.compiler.ast
Class MessageSend

java.lang.Object
  extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode
      extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
          extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.Expression
              extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.MessageSend
All Implemented Interfaces:
Invocation, InvocationSite, TypeConstants, TypeIds
Direct Known Subclasses:
CodeSnippetMessageSend, CompletionOnMessageSend, CompletionOnMessageSendName, JavadocMessageSend, KnownMessageSend, Proceed, SelectionOnMessageSend

public class MessageSend
extends Expression
implements Invocation

AspectJ Extension - support for MethodBinding.alwaysNeedsAccessMethod Possible mergeconflict? Was InvocationSite but now Invocation in implements clause


Nested Class Summary
 
Nested classes/interfaces inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.InvocationSite
InvocationSite.EmptyWithAstNode
 
Nested classes/interfaces inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants
TypeConstants.CloseMethodRecord
 
Field Summary
 TypeBinding actualReceiverType
           
 Expression[] arguments
           
 MethodBinding binding
           
 TypeBinding expectedType
           
 TypeBinding[] genericTypeArguments
           
protected  InnerInferenceHelper innerInferenceHelper
           
 long nameSourcePosition
           
 Expression receiver
           
 char[] selector
           
 MethodBinding syntheticAccessor
           
 TypeReference[] typeArguments
           
 TypeBinding valueCast
           
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Expression
constant, implicitConversion, resolvedType, statementEnd
 
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, InsideExpressionStatement, InsideJavadoc, INVOCATION_ARGUMENT_OK, INVOCATION_ARGUMENT_UNCHECKED, INVOCATION_ARGUMENT_WILDCARD, IsAnnotationDefaultValue, IsAnonymousType, IsAnySubRoutineEscaping, IsArgument, IsCapturedOuterLocal, IsCompoundAssigned, IsDefaultConstructor, IsDiamond, IsElseIfStatement, IsElseStatementUnreachable, IsForeachElementVariable, IsImplicitThis, IsImplicitUnit, IsLocalDeclarationReachable, IsLocalType, IsMemberType, IsNonNull, IsReachable, IsRecovered, IsReturnedValue, IsSecondaryType, IsStrictlyAssigned, IsSubRoutineEscaping, IsSuperType, IsSynchronized, IsSynthetic, IsThenStatementUnreachable, IsTryBlockExiting, IsTypeElided, IsUnionType, IsUsefulEmptyStatement, IsVarArgs, LabelUsed, NeededScope, NeedFreeReturn, NeedReceiverGenericCast, NO_ARGUMENTS, 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, ASSERT_CLASS, ASSERT_FALSE, ASSERT_NOTNULL, ASSERT_NULL, ASSERT_TRUE, BOOLEAN, BYTE, CAPTURE18, 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, 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, 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, FLOAT, FRAMEWORK, GETCLASS, GOOGLE, GUAVA_CLOSEABLES, HASHCODE, INIT, INJECT_PACKAGE, INJECT_TYPE, INT, INTERNAL, INVOKE, IO, IS_NOTNULL, IS_TRUE, ITYPEBINDING, JAVA, 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_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_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_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_NIO_FILE_FILES, JAVA_UTIL_COLLECTION, JAVA_UTIL_ITERATOR, JAVA_UTIL_OBJECTS, JAVA_UTIL_ZIP_WRAPPER_CLOSEABLES, JAVAX, JAVAX_ANNOTATION_INJECT_INJECT, JAVAX_RMI_CORBA_STUB, JDT, JUNIT, JUNIT_FRAMEWORK_ASSERT, LAMBDA_TYPE, LANG, LANG3, LENGTH, LONG, LOOKUP, MAIN, MISMATCH, NOT_NULL, NULL, OBJECT, OK, 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, OTHER_WRAPPER_CLOSEABLES, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, REQUIRE_NON_NULL, RESOURCE_FREE_CLOSEABLE_STREAM, RUNTIME, 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, TYPE_PARAMETER_TARGET, TYPE_USE_TARGET, TYPEBINDING, UNCHECKED, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RUNTIME, UPPER_SOURCE, UTIL, VALIDATE_CLASS, 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, ZIP
 
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds
BitAutoCloseable, BitCloseable, 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_ConfiguredAnnotationNonNull, T_ConfiguredAnnotationNonNullByDefault, T_ConfiguredAnnotationNullable, 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_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_JavaUtilObjects, T_JavaxInjectInject, T_JunitFrameworkAssert, T_LastWellKnownTypeId, T_long, T_null, T_OrgApacheCommonsLang3Validate, T_OrgApacheCommonsLangValidate, T_OrgEclipseCoreRuntimeAssert, T_OrgJunitAssert, T_short, T_undefined, T_void, UNBOXING
 
Constructor Summary
MessageSend()
           
 
Method Summary
 FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo)
           
 Expression[] arguments()
           
 MethodBinding binding(TypeBinding targetType, boolean reportErrors, Scope scope)
          Answer the resolved method binding of this invocation.
 TypeBinding checkAgainstFinalTargetType(TypeBinding targetType, Scope scope)
          Once outer contexts have finalized the target type for this expression, perform any checks that might have been delayed previously.
 boolean checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInfo)
          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.
 void computeConversion(Scope scope, TypeBinding runtimeTimeType, TypeBinding compileTimeType)
          Base types need that the widening is explicitly done by the compiler using some bytecode like i2f.
protected  void findMethodBinding(BlockScope scope, TypeBinding[] argumentTypes)
          Find the method binding; if this.innersNeedUpdate allow for two attempts where the first round may stop after applicability checking (18.5.1) to include more information into the final invocation type inference (18.5.2).
 InferenceContext18 freshInferenceContext(Scope scope)
          When inference for this invocationSite starts, get a fresh inference context, initialized from this site.
 void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired)
          MessageSend code generation
 TypeBinding[] genericTypeArguments()
           
 ExpressionContext getExpressionContext()
           
 InferenceContext18 getInferenceContext(ParameterizedMethodBinding method)
          Retrieve an inference context for the given method which must have been registered using Invocation.registerInferenceContext(ParameterizedGenericMethodBinding, InferenceContext18).
 InnerInferenceHelper innerInferenceHelper()
          If this invocation has any poly expressions as arguments, this method answers an inference helper that mediates during overload resolution, even if no actual inference happens for this invocation.
 boolean innersNeedUpdate()
          Answer whether the current invocation has inner expressions that still need updating after inference.
 void innerUpdateDone()
          Mark that updating (the need for which is signaled via Invocation.innersNeedUpdate()) has been done.
 TypeBinding invocationTargetType()
          Implementation of InvocationSite.invocationTargetType() suitable at this level.
 boolean isPolyExpression()
           
 boolean isPolyExpression(MethodBinding resolutionCandidate)
          Variant of isPolyExpression() to be used during type inference, when a resolution candidate exists.
 boolean isSuperAccess()
           
 boolean isTypeAccess()
           
 void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo)
           
 int nullStatus(FlowInfo flowInfo, FlowContext flowContext)
           
 TypeBinding postConversionType(Scope scope)
          Returns the type of the expression after required implicit conversions.
 java.lang.StringBuffer printExpression(int indent, java.lang.StringBuffer output)
           
 boolean receiverIsImplicitThis()
           
 void registerInferenceContext(ParameterizedGenericMethodBinding method, InferenceContext18 infCtx18)
          Register the given inference context, which produced the given method as its intermediate result.
protected  void resolveMethodBinding(BlockScope scope, TypeBinding[] argumentTypes)
           
 TypeBinding resolveType(BlockScope scope)
          Resolve the type of this expression in the context of a blockScope
 void setActualReceiverType(ReferenceBinding receiverType)
           
 void setDepth(int depth)
           
 void setExpectedType(TypeBinding expectedType)
          Record the type expectation before this expression is typechecked.
 void setExpressionContext(ExpressionContext context)
           
 void setFieldIndex(int depth)
           
 boolean sIsMoreSpecific(TypeBinding s, TypeBinding t, Scope scope)
           
 boolean statementExpression()
           
 void traverse(ASTVisitor visitor, BlockScope blockScope)
          Traverse an expression in the context of a blockScope
 boolean updateBindings(MethodBinding updatedBinding, TypeBinding targetType)
          Where the AST node may hold references to the results of Invocation Applicability Inference, this method allows to update those references to the result of Invocation Type Inference.
 boolean usesInference()
          Answer true if this invocation has determined its binding using inference.
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Expression
analyseCode, checkCastTypesCompatibility, checkNPEbyUnboxing, checkUnsafeCast, forcedToBeRaw, generateCode, generateOptimizedBoolean, generateOptimizedStringConcatenation, generateOptimizedStringConcatenationCreation, getDirectBinding, isAssignmentCompatible, isBoxingCompatibleWith, isCompactableOperation, isCompatibleWith, isConstantValueOfTypeAssignableToType, isConstantValueRepresentable, isExactMethodReference, isPertinentToApplicability, isTypeReference, localVariableBinding, markAsNonNull, nullAnnotatedVariableBinding, optimizedBooleanConstant, print, printStatement, resolve, resolveType, resolveTypeExpecting, reusableJSRTarget, tagAsEllipsisArgument, tagAsNeedCheckCast, tagAsUnnecessaryCast, toTypeReference, traverse
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
analyseArguments, branchChainTo, checkAgainstNullTypeAnnotation, complainIfUnreachable, expectedType, findConstructorBinding, generateArguments, isBoxingCompatible, isEmptyBlock, isKnowDeadCodePattern, isValidJavaStatement, recordExceptionsForEnclosingLambda, resolveCase
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode
checkInvocationArguments, concreteStatement, copySE8AnnotationsToType, isFieldUseDeprecated, isImplicitThis, isMethodUseDeprecated, isSuper, isThis, isTypeUseDeprecated, isUnqualifiedSuper, printAnnotations, printIndent, printModifiers, resolveAnnotations, resolveAnnotations, resolveAnnotations, resolveDeprecatedAnnotations, resolvePolyExpressionArguments, resolvePolyExpressionArguments, sourceEnd, sourceStart, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.InvocationSite
sourceEnd, sourceStart
 

Field Detail

receiver

public Expression receiver

selector

public char[] selector

arguments

public Expression[] arguments

binding

public MethodBinding binding

syntheticAccessor

public MethodBinding syntheticAccessor

expectedType

public TypeBinding expectedType

nameSourcePosition

public long nameSourcePosition

actualReceiverType

public TypeBinding actualReceiverType

valueCast

public TypeBinding valueCast

typeArguments

public TypeReference[] typeArguments

genericTypeArguments

public TypeBinding[] genericTypeArguments

innerInferenceHelper

protected InnerInferenceHelper innerInferenceHelper
Constructor Detail

MessageSend

public MessageSend()
Method Detail

analyseCode

public FlowInfo analyseCode(BlockScope currentScope,
                            FlowContext flowContext,
                            FlowInfo flowInfo)
Overrides:
analyseCode in class Expression

checkNPE

public boolean checkNPE(BlockScope scope,
                        FlowContext flowContext,
                        FlowInfo flowInfo)
Description copied from class: Expression
Check this expression against potential NPEs, which may occur: If a risk of NPE is detected report it to the context. If the expression denotes a local variable, mark it as checked, which affects the flow info.

Overrides:
checkNPE in class Expression
Parameters:
scope - the scope of the analysis
flowContext - the current flow context
flowInfo - the upstream flow info; caveat: may get modified
Returns:
could this expression be checked by the current implementation?

computeConversion

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

Overrides:
computeConversion in class Expression
See Also:
Expression.computeConversion(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope, org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding, org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding)

generateCode

public void generateCode(BlockScope currentScope,
                         CodeStream codeStream,
                         boolean valueRequired)
MessageSend code generation

Overrides:
generateCode in class Expression
Parameters:
currentScope - org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BlockScope
codeStream - org.aspectj.org.eclipse.jdt.internal.compiler.codegen.CodeStream
valueRequired - boolean

genericTypeArguments

public TypeBinding[] genericTypeArguments()
Specified by:
genericTypeArguments in interface InvocationSite
See Also:
InvocationSite.genericTypeArguments()

isSuperAccess

public boolean isSuperAccess()
Specified by:
isSuperAccess in interface InvocationSite

isTypeAccess

public boolean isTypeAccess()
Specified by:
isTypeAccess in interface InvocationSite

manageSyntheticAccessIfNecessary

public void manageSyntheticAccessIfNecessary(BlockScope currentScope,
                                             FlowInfo flowInfo)

nullStatus

public int nullStatus(FlowInfo flowInfo,
                      FlowContext flowContext)
Overrides:
nullStatus in class Expression

postConversionType

public TypeBinding postConversionType(Scope scope)
Description copied from class: Expression
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(...)).

Overrides:
postConversionType in class Expression
Returns:
the type after implicit conversion
See Also:
Expression.postConversionType(Scope)

printExpression

public java.lang.StringBuffer printExpression(int indent,
                                              java.lang.StringBuffer output)
Specified by:
printExpression in class Expression

resolveType

public TypeBinding resolveType(BlockScope scope)
Description copied from class: Expression
Resolve the type of this expression in the context of a blockScope

Overrides:
resolveType in class Expression
Returns:
Return the actual type of this expression after resolution

findMethodBinding

protected void findMethodBinding(BlockScope scope,
                                 TypeBinding[] argumentTypes)
Find the method binding; if this.innersNeedUpdate allow for two attempts where the first round may stop after applicability checking (18.5.1) to include more information into the final invocation type inference (18.5.2).


checkAgainstFinalTargetType

public TypeBinding checkAgainstFinalTargetType(TypeBinding targetType,
                                               Scope scope)
Description copied from class: Expression
Once outer contexts have finalized the target type for this expression, perform any checks that might have been delayed previously.

Overrides:
checkAgainstFinalTargetType in class Expression
Parameters:
targetType - the final target type (aka expectedType) for this expression.
scope - scope for error reporting

setActualReceiverType

public void setActualReceiverType(ReferenceBinding receiverType)
Specified by:
setActualReceiverType in interface InvocationSite

setDepth

public void setDepth(int depth)
Specified by:
setDepth in interface InvocationSite

setExpectedType

public void setExpectedType(TypeBinding expectedType)
Description copied from class: Expression
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.

Overrides:
setExpectedType in class Expression
Parameters:
expectedType - The type denoting an expectation in the context of an assignment conversion
See Also:
Expression.setExpectedType(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding)

setExpressionContext

public void setExpressionContext(ExpressionContext context)
Overrides:
setExpressionContext in class Expression

isPolyExpression

public boolean isPolyExpression()
Overrides:
isPolyExpression in class Expression

isPolyExpression

public boolean isPolyExpression(MethodBinding resolutionCandidate)
Variant of isPolyExpression() to be used during type inference, when a resolution candidate exists.

Overrides:
isPolyExpression in class Expression

sIsMoreSpecific

public boolean sIsMoreSpecific(TypeBinding s,
                               TypeBinding t,
                               Scope scope)
Overrides:
sIsMoreSpecific in class Expression

setFieldIndex

public void setFieldIndex(int depth)
Specified by:
setFieldIndex in interface InvocationSite

invocationTargetType

public TypeBinding invocationTargetType()
Description copied from class: Statement
Implementation of InvocationSite.invocationTargetType() suitable at this level. Subclasses should override as necessary.

Specified by:
invocationTargetType in interface InvocationSite
Overrides:
invocationTargetType in class Statement
See Also:
InvocationSite.invocationTargetType()

traverse

public void traverse(ASTVisitor visitor,
                     BlockScope blockScope)
Description copied from class: Expression
Traverse an expression in the context of a blockScope

Overrides:
traverse in class Expression

statementExpression

public boolean statementExpression()
Overrides:
statementExpression in class Expression

receiverIsImplicitThis

public boolean receiverIsImplicitThis()
Specified by:
receiverIsImplicitThis in interface InvocationSite
Overrides:
receiverIsImplicitThis in class ASTNode

binding

public MethodBinding binding(TypeBinding targetType,
                             boolean reportErrors,
                             Scope scope)
Description copied from interface: Invocation
Answer the resolved method binding of this invocation. If a target type is given, the invocation gets a chance to do repeated method lookup.

Specified by:
binding in interface Invocation
Parameters:
targetType - the target type of this invocation or null if not yet known
reportErrors - if true then this is the last call, if no valid binding can be answered we should report an error
scope - if reportErrors is true then this scope can be used for error reporting

arguments

public Expression[] arguments()
Specified by:
arguments in interface Invocation

getExpressionContext

public ExpressionContext getExpressionContext()
Specified by:
getExpressionContext in interface InvocationSite
Overrides:
getExpressionContext in class Statement

registerInferenceContext

public void registerInferenceContext(ParameterizedGenericMethodBinding method,
                                     InferenceContext18 infCtx18)
Description copied from interface: Invocation
Register the given inference context, which produced the given method as its intermediate result. Later when the same method is selected as the most specific method, the inference context for this pair (Invocation x MethodBinding) can be looked up using InvocationSite.getExpressionContext() to continue the type inference.

Specified by:
registerInferenceContext in interface Invocation

getInferenceContext

public InferenceContext18 getInferenceContext(ParameterizedMethodBinding method)
Description copied from interface: Invocation
Retrieve an inference context for the given method which must have been registered using Invocation.registerInferenceContext(ParameterizedGenericMethodBinding, InferenceContext18).

Specified by:
getInferenceContext in interface Invocation
Parameters:
method - an intermediate resolved candidate for this invocation return a suspended inference context or null if none was registered for this method.

usesInference

public boolean usesInference()
Description copied from interface: Invocation
Answer true if this invocation has determined its binding using inference.

Specified by:
usesInference in interface Invocation

updateBindings

public boolean updateBindings(MethodBinding updatedBinding,
                              TypeBinding targetType)
Description copied from interface: Invocation
Where the AST node may hold references to the results of Invocation Applicability Inference, this method allows to update those references to the result of Invocation Type Inference. Note that potentially more than just the method binding is updated.

Specified by:
updateBindings in interface Invocation
Parameters:
updatedBinding - the final method binding after full inference
targetType - the target type used during Invocation Type Inference
Returns:
true if an update has happened

innersNeedUpdate

public boolean innersNeedUpdate()
Description copied from interface: Invocation
Answer whether the current invocation has inner expressions that still need updating after inference.

Specified by:
innersNeedUpdate in interface Invocation

innerUpdateDone

public void innerUpdateDone()
Description copied from interface: Invocation
Mark that updating (the need for which is signaled via Invocation.innersNeedUpdate()) has been done.

Specified by:
innerUpdateDone in interface Invocation

innerInferenceHelper

public InnerInferenceHelper innerInferenceHelper()
Description copied from interface: Invocation
If this invocation has any poly expressions as arguments, this method answers an inference helper that mediates during overload resolution, even if no actual inference happens for this invocation.

Specified by:
innerInferenceHelper in interface Invocation

freshInferenceContext

public InferenceContext18 freshInferenceContext(Scope scope)
Description copied from interface: InvocationSite
When inference for this invocationSite starts, get a fresh inference context, initialized from this site.

Specified by:
freshInferenceContext in interface InvocationSite

resolveMethodBinding

protected void resolveMethodBinding(BlockScope scope,
                                    TypeBinding[] argumentTypes)