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

java.lang.Object
  继承者 org.eclipse.jdt.internal.compiler.ast.ASTNode
      继承者 org.eclipse.jdt.internal.compiler.ast.Statement
          继承者 org.eclipse.jdt.internal.compiler.ast.Expression
              继承者 org.eclipse.jdt.internal.compiler.ast.OperatorExpression
                  继承者 org.eclipse.jdt.internal.compiler.ast.BinaryExpression
                      继承者 org.eclipse.jdt.internal.compiler.ast.CombinedBinaryExpression
所有已实现的接口:
OperatorIds, TypeConstants, TypeIds

public class CombinedBinaryExpression
extends BinaryExpression

CombinedBinaryExpression is an implementation of BinaryExpression that specifically attempts to mitigate the issues raised by expressions which have a very deep leftmost branch. It does so by maintaining a table of direct references to its subexpressions, and implementing non-recursive variants of the most significant recursive algorithms of its ancestors. The subexpressions table only holds intermediate binary expressions. Its role is to provide the reversed navigation through the left relationship of BinaryExpression to Expression. To cope with potentially very deep left branches, an instance of CombinedBinaryExpression is created once in a while, using variable thresholds held by arityMax. As a specific case, the topmost node of all binary expressions that are deeper than one is a CombinedBinaryExpression, but it has no references table.
Notes:


字段摘要
 int arity
          The number of consecutive binary expressions of this' left branch that bear the same operator as this.
static int ARITY_MAX_MAX
          Upper limit for arityMax.
static int ARITY_MAX_MIN
          Default lower limit for arityMax.
 int arityMax
          The threshold that will trigger the creation of the next full-fledged CombinedBinaryExpression.
static int defaultArityMaxStartingValue
          Default value for the first term of the series of arityMax values.
 BinaryExpression[] referencesTable
          A table of references to the binary expressions of this' left branch.
 
从类 org.eclipse.jdt.internal.compiler.ast.BinaryExpression 继承的字段
left, optimizedBooleanConstant, right
 
从类 org.eclipse.jdt.internal.compiler.ast.OperatorExpression 继承的字段
OperatorSignatures
 
从类 org.eclipse.jdt.internal.compiler.ast.Expression 继承的字段
constant, implicitConversion, resolvedType, 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.ast.OperatorIds 继承的字段
AND, AND_AND, DIVIDE, EQUAL, EQUAL_EQUAL, GREATER, GREATER_EQUAL, INSTANCEOF, LEFT_SHIFT, LESS, LESS_EQUAL, MINUS, MINUS_MINUS, MULTIPLY, NOT, NOT_EQUAL, NumberOfTables, OR, OR_OR, PLUS, PLUS_PLUS, QUESTIONCOLON, REMAINDER, RIGHT_SHIFT, TWIDDLE, UNSIGNED_RIGHT_SHIFT, XOR
 
从接口 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
 
构造方法摘要
CombinedBinaryExpression(CombinedBinaryExpression expression)
           
CombinedBinaryExpression(Expression left, Expression right, int operator, int arity)
          Make a new CombinedBinaryExpression.
 
方法摘要
 FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo)
           
 void generateOptimizedStringConcatenation(BlockScope blockScope, CodeStream codeStream, int typeID)
           
 void generateOptimizedStringConcatenationCreation(BlockScope blockScope, CodeStream codeStream, int typeID)
           
 StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output)
           
 TypeBinding resolveType(BlockScope scope)
          Resolve the type of this expression in the context of a blockScope
 void traverse(ASTVisitor visitor, BlockScope scope)
          Traverse an expression in the context of a blockScope
 void tuneArityMax()
          Change arityMax if and as needed.
 
从类 org.eclipse.jdt.internal.compiler.ast.BinaryExpression 继承的方法
computeConstant, generateCode, generateLogicalAnd, generateLogicalOr, generateLogicalXor, generateOptimizedBoolean, generateOptimizedGreaterThan, generateOptimizedGreaterThanOrEqual, generateOptimizedLessThan, generateOptimizedLessThanOrEqual, generateOptimizedLogicalAnd, generateOptimizedLogicalOr, generateOptimizedLogicalXor, isCompactableOperation, optimizedBooleanConstant, optimizedBooleanConstant
 
从类 org.eclipse.jdt.internal.compiler.ast.OperatorExpression 继承的方法
classInitialize, generateTableTestCase, get_AND_AND, get_AND, get_DIVIDE, get_EQUAL_EQUAL, get_GREATER_EQUAL, get_GREATER, get_LEFT_SHIFT, get_LESS_EQUAL, get_LESS, get_MINUS, get_MULTIPLY, get_OR_OR, get_OR, get_PLUS, get_REMAINDER, get_RIGHT_SHIFT, get_UNSIGNED_RIGHT_SHIFT, get_XOR, nullStatus, operatorToString, printExpression
 
从类 org.eclipse.jdt.internal.compiler.ast.Expression 继承的方法
analyseCode, checkCastTypesCompatibility, checkNPE, checkUnsafeCast, computeConversion, forcedToBeRaw, generateCode, getDirectBinding, isConstantValueOfTypeAssignableToType, isConstantValueRepresentable, isTypeReference, localVariableBinding, markAsNonNull, postConversionType, print, printStatement, resolve, resolveType, resolveTypeExpecting, reusableJSRTarget, setExpectedType, tagAsNeedCheckCast, tagAsUnnecessaryCast, toTypeReference, traverse
 
从类 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
 

字段详细信息

arity

public int arity
The number of consecutive binary expressions of this' left branch that bear the same operator as this.
Notes:


arityMax

public int arityMax
The threshold that will trigger the creation of the next full-fledged CombinedBinaryExpression. This field is only maintained for the topmost binary expression (it is 0 otherwise). It enables a variable policy, which scales better with very large expressions.


ARITY_MAX_MAX

public static final int ARITY_MAX_MAX
Upper limit for arityMax.

另请参见:
常量字段值

ARITY_MAX_MIN

public static final int ARITY_MAX_MIN
Default lower limit for arityMax.

另请参见:
常量字段值

defaultArityMaxStartingValue

public static int defaultArityMaxStartingValue
Default value for the first term of the series of arityMax values. Changing this allows for experimentation. Not meant to be changed during a parse operation.


referencesTable

public BinaryExpression[] referencesTable
A table of references to the binary expressions of this' left branch. Instances of CombinedBinaryExpression are not repeated here. Instead, the left subexpression of referencesTable[0] may be a combined binary expression, if appropriate. Null when this only cares about tracking the expression's arity.

构造方法详细信息

CombinedBinaryExpression

public CombinedBinaryExpression(Expression left,
                                Expression right,
                                int operator,
                                int arity)
Make a new CombinedBinaryExpression. If arity is strictly greater than one, a references table is built and initialized with the reverse relationship of the one defined by BinaryExpression.left. arity and left must be compatible with each other (that is, there must be at least arity - 1 consecutive compatible binary expressions into the leftmost branch of left, the topmost of which being left's immediate left expression).

参数:
left - the left branch expression
right - the right branch expression
operator - the operator for this binary expression - only PLUS for now
arity - the number of binary expressions of a compatible operator that already exist into the leftmost branch of left (including left); must be strictly greater than 0

CombinedBinaryExpression

public CombinedBinaryExpression(CombinedBinaryExpression expression)
方法详细信息

analyseCode

public FlowInfo analyseCode(BlockScope currentScope,
                            FlowContext flowContext,
                            FlowInfo flowInfo)
覆盖:
BinaryExpression 中的 analyseCode

generateOptimizedStringConcatenation

public void generateOptimizedStringConcatenation(BlockScope blockScope,
                                                 CodeStream codeStream,
                                                 int typeID)
覆盖:
BinaryExpression 中的 generateOptimizedStringConcatenation

generateOptimizedStringConcatenationCreation

public void generateOptimizedStringConcatenationCreation(BlockScope blockScope,
                                                         CodeStream codeStream,
                                                         int typeID)
覆盖:
BinaryExpression 中的 generateOptimizedStringConcatenationCreation

printExpressionNoParenthesis

public StringBuffer printExpressionNoParenthesis(int indent,
                                                 StringBuffer output)
覆盖:
BinaryExpression 中的 printExpressionNoParenthesis

resolveType

public TypeBinding resolveType(BlockScope scope)
从类 Expression 复制的描述
Resolve the type of this expression in the context of a blockScope

覆盖:
BinaryExpression 中的 resolveType
返回:
Return the actual type of this expression after resolution

traverse

public void traverse(ASTVisitor visitor,
                     BlockScope scope)
从类 Expression 复制的描述
Traverse an expression in the context of a blockScope

覆盖:
BinaryExpression 中的 traverse

tuneArityMax

public void tuneArityMax()
Change arityMax if and as needed. The current policy is to double arityMax each time this method is called, until it reaches ARITY_MAX_MAX. Other policies may consider incrementing it less agressively. Call only after an appropriate value has been assigned to BinaryExpression.left.



Copyright © 2013. All Rights Reserved.