Class FieldExpression
java.lang.Object
org.glassfish.rmic.tools.tree.Node
org.glassfish.rmic.tools.tree.Expression
org.glassfish.rmic.tools.tree.UnaryExpression
org.glassfish.rmic.tools.tree.FieldExpression
- All Implemented Interfaces:
Cloneable, Constants, RuntimeConstants
WARNING: The contents of this source file are not part of any
supported API. Code that depends on them does so at its own risk:
they are subject to change or removal without notice.
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) ClassDefinition(package private) MemberDefinition(package private) Identifier(package private) Expressionprivate ClassDefinitionFields inherited from class UnaryExpression
rightFields inherited from class Expression
typeFields inherited from interface Constants
ABSTRACT, ACCM_CLASS, ACCM_FIELD, ACCM_INNERCLASS, ACCM_MEMBER, ACCM_METHOD, ADD, AND, ARRAY, ARRAYACCESS, ASGADD, ASGBITAND, ASGBITOR, ASGBITXOR, ASGDIV, ASGLSHIFT, ASGMUL, ASGREM, ASGRSHIFT, ASGSUB, ASGURSHIFT, ASSIGN, ATT_ALL, ATT_ALLCLASSES, ATT_CODE, BITAND, BITNOT, BITOR, BITXOR, BOOLEAN, BOOLEANVAL, BREAK, BYTE, BYTEVAL, CASE, CAST, CATCH, CHAR, CHARVAL, CLASS, COLON, COMMA, COMMENT, COND, CONST, CONTINUE, CONVERT, CS_BINARY, CS_CHECKED, CS_COMPILED, CS_NOTFOUND, CS_PARSED, CS_SOURCE, CS_UNDECIDED, CS_UNDEFINED, CT_BLOCK, CT_BRANCH_FALSE, CT_BRANCH_TRUE, CT_CASE, CT_FIKT_METHOD, CT_FIKT_RET, CT_FIRST_KIND, CT_LAST_KIND, CT_METHOD, CT_SWITH_WO_DEF, DEC, DECLARATION, DEFAULT, DIV, DO, DOUBLE, DOUBLEVAL, ELSE, EQ, ERROR, EXPR, EXPRESSION, EXTENDS, F_COVDATA, F_COVERAGE, F_DEBUG_LINES, F_DEBUG_SOURCE, F_DEBUG_VARS, F_DEPENDENCIES, F_DEPRECATION, F_DUMP, F_ERRORSREPORTED, F_OPT, F_OPT_INTERCLASS, F_PRINT_DEPENDENCIES, F_STRICTDEFAULT, F_VERBOSE, F_VERSION12, F_WARNINGS, FALSE, FIELD, FINAL, FINALLY, FLOAT, FLOATVAL, FOR, GE, GOTO, GT, idAppend, idClass, idClassInit, idClone, idCode, idConstantValue, idCoverageTable, idDeprecated, idDocumentation, IDENT, idExceptions, idFinallyReturnValue, idGetClass, idInit, idInnerClasses, idJavaIoSerializable, idJavaLang, idJavaLangClass, idJavaLangCloneable, idJavaLangError, idJavaLangException, idJavaLangObject, idJavaLangRuntimeException, idJavaLangString, idJavaLangStringBuffer, idJavaLangThrowable, idLength, idLineNumberTable, idLocalVariableTable, idNew, idNull, idSourceFile, idStar, idSuper, idSynthetic, idThis, idToString, idTYPE, idValueOf, IF, IMPLEMENTS, IMPORT, INC, INLINEMETHOD, INLINENEWINSTANCE, INLINERETURN, INSTANCEOF, INT, INTERFACE, INTVAL, LBRACE, LE, LENGTH, LONG, LONGVAL, LPAREN, LSHIFT, LSQBRACKET, LT, M_ABSTRACT, M_ANONYMOUS, M_DEPRECATED, M_FINAL, M_INLINEABLE, M_INTERFACE, M_LOCAL, M_NATIVE, M_PRIVATE, M_PROTECTED, M_PUBLIC, M_STATIC, M_STRICTFP, M_SYNCHRONIZED, M_SYNTHETIC, M_TRANSIENT, M_VOLATILE, MAXFILESIZE, MAXLINENUMBER, METHOD, MM_CLASS, MM_FIELD, MM_MEMBER, MM_METHOD, MUL, NATIVE, NE, NEG, NEW, NEWARRAY, NEWFROMNAME, NEWINSTANCE, NOT, NULL, opNames, opPrecedence, OR, PACKAGE, paraDeprecated, POS, POSTDEC, POSTINC, PREDEC, prefixAccess, prefixArray, prefixClass, prefixLoc, prefixThis, prefixVal, PREINC, PRIVATE, PROTECTED, PUBLIC, QUESTIONMARK, RBRACE, REM, RETURN, RPAREN, RSHIFT, RSQBRACKET, SEMICOLON, SHORT, SHORTVAL, SIG_INNERCLASS, SIGC_INNERCLASS, STAT, STATIC, STRICTFP, STRINGVAL, SUB, SUPER, SWITCH, SYNCHRONIZED, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_DOUBLE, TC_ERROR, TC_FLOAT, TC_INT, TC_LONG, TC_METHOD, TC_NULL, TC_SHORT, TC_VOID, THIS, THROW, THROWS, TM_ARRAY, TM_BOOLEAN, TM_BYTE, TM_CHAR, TM_CLASS, TM_DOUBLE, TM_ERROR, TM_FLOAT, TM_INT, TM_INT32, TM_INTEGER, TM_LONG, TM_METHOD, TM_NULL, TM_NUM32, TM_NUM64, TM_NUMBER, TM_REAL, TM_REFERENCE, TM_SHORT, TM_VOID, tracing, TRANSIENT, TRUE, TRY, TYPE, URSHIFT, VARDECLARATION, VOID, VOLATILE, WHEREOFFSETBITS, WHILEFields inherited from interface RuntimeConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_CLASS, CONSTANT_DOUBLE, CONSTANT_FIELD, CONSTANT_FLOAT, CONSTANT_INTEGER, CONSTANT_INTERFACEMETHOD, CONSTANT_INVOKEDYNAMIC, CONSTANT_LONG, CONSTANT_METHOD, CONSTANT_METHODHANDLE, CONSTANT_METHODTYPE, CONSTANT_NAMEANDTYPE, CONSTANT_STRING, CONSTANT_UNICODE, CONSTANT_UTF8, JAVA_DEFAULT_MINOR_VERSION, JAVA_DEFAULT_VERSION, JAVA_MAGIC, JAVA_MAX_SUPPORTED_MINOR_VERSION, JAVA_MAX_SUPPORTED_VERSION, JAVA_MIN_SUPPORTED_VERSION, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_breakpoint, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dead, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokedynamic, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_label, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_try, opc_wide, opcLengths, opcNames, SIG_ARRAY, SIG_BOOLEAN, SIG_BYTE, SIG_CHAR, SIG_CLASS, SIG_DOUBLE, SIG_ENDCLASS, SIG_ENDMETHOD, SIG_FLOAT, SIG_INT, SIG_LONG, SIG_METHOD, SIG_PACKAGE, SIG_SHORT, SIG_VOID, SIGC_ARRAY, SIGC_BOOLEAN, SIGC_BYTE, SIGC_CHAR, SIGC_CLASS, SIGC_DOUBLE, SIGC_ENDCLASS, SIGC_ENDMETHOD, SIGC_FLOAT, SIGC_INT, SIGC_LONG, SIGC_METHOD, SIGC_PACKAGE, SIGC_SHORT, SIGC_VOID, T_BOOLEAN, T_BYTE, T_CHAR, T_CLASS, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT -
Constructor Summary
ConstructorsConstructorDescriptionFieldExpression(long where, Expression right, Identifier id) constructorFieldExpression(long where, Expression right, MemberDefinition field) -
Method Summary
Modifier and TypeMethodDescriptionprivate ClassDefinitionaccessBase(Environment env, Context ctx) Determine if an access method is required, and, if so, return the class in which it should appear, else return null.checkAmbigName(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc) Check if the present name is part of a scoping prefix.checkAssignOp(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, Expression outside) Check the expression if it appears on the LHS of an op= expressionprivate VsetcheckCommon(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc, boolean isLHS) Common code for checkValue and checkAmbigNamestatic VsetcheckFinalAssign(Environment env, Context ctx, Vset vset, long where, MemberDefinition field) There is a simple assignment being made to the given final field.private VsetcheckInnerClass(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc) This field expression is an inner class reference.Check the expression if it appears on the LHS of an assignmentcheckValue(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp) Check the expression(package private) voidcodeLoad(Environment env, Context ctx, Assembler asm) (package private) intcodeLValue(Environment env, Context ctx, Assembler asm) Code(package private) voidcodeStore(Environment env, Context ctx, Assembler asm) voidcodeValue(Environment env, Context ctx, Assembler asm) copyInline(Context ctx) Create a copy of the expression for method inliningintcostInline(int thresh, Environment env, Context ctx) The cost of inlining this expressiongetAssigner(Environment env, Context ctx) Return aFieldUpdaterobject to be used in updating the value of the location denoted bythis, which must be an expression suitable for the left-hand side of an assignment.private static MemberDefinitiongetClassLiteralCache(Environment env, Context ctx, String className, ClassDefinition c) Type checking may assign a more complex implementation to an innocuous-looking expression (like an identifier).getUpdater(Environment env, Context ctx) Return aFieldUpdaterobject to be used in updating the value of the location denoted bythis, which must be an expression suitable for the left-hand side of an assignment.private ExpressionimplementFieldAccess(Environment env, Context ctx, Expression base, boolean isLHS) Rewrite accesses to private fields of another class.inline(Environment env, Context ctx) InlineinlineLHS(Environment env, Context ctx) inlineValue(Environment env, Context ctx) booleanCheck if constant: Will it inline away?private booleanReturn true if the field is being selected from a qualified 'super'.(package private) static booleanisTypeAccessible(long where, Environment env, Type t, ClassDefinition c) Determine if a type is accessible from a given class.private ExpressionmakeClassLiteralCacheRef(Environment env, Context ctx, MemberDefinition lookup, MemberDefinition cfld, String className) private ExpressionmakeClassLiteralInlineRef(Environment env, Context ctx, MemberDefinition lookup, String className) voidprint(PrintStream out) Print(package private) static voidreportFailedPackagePrefix(Environment env, Expression right) If 'checkAmbiguousName' returns 'Package.tPackage', then it was unable to resolve any prefix of the qualified name.(package private) static voidreportFailedPackagePrefix(Environment env, Expression right, boolean mustBeType) static IdentifierConvert an '.' expression to a qualified identifier(package private) TypetoType(Environment env, Context ctx) Convert an '.' expression to a typeMethods inherited from class UnaryExpression
eval, eval, eval, eval, eval, eval, eval, order, selectTypeMethods inherited from class Expression
check, checkCondition, checkCondition, checkInitializer, code, codeAppend, codeBranch, codeConversion, codeDup, ensureString, equals, equals, equals, equals, equalsDefault, firstConstructor, fitsType, fitsType, getType, getValue, inlineValueSB, isNonNull, isNull, precedence, simplify
-
Field Details
-
id
Identifier id -
field
MemberDefinition field -
implementation
Expression implementation -
clazz
ClassDefinition clazz -
superBase
-
-
Constructor Details
-
FieldExpression
constructor -
FieldExpression
-
-
Method Details
-
getImplementation
Description copied from class:ExpressionType checking may assign a more complex implementation to an innocuous-looking expression (like an identifier). Return that implementation, or the original expression itself if there is no special implementation.This appears at present to be dead code, and is not called from within javac. Access to the implementation generally occurs within the same class, and thus uses the underlying field directly.
- Overrides:
getImplementationin classExpression
-
isQualSuper
private boolean isQualSuper()Return true if the field is being selected from a qualified 'super'. -
toIdentifier
Convert an '.' expression to a qualified identifier -
toType
Convert an '.' expression to a type- Overrides:
toTypein classExpression
-
checkAmbigName
public Vset checkAmbigName(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc) Check if the present name is part of a scoping prefix.- Overrides:
checkAmbigNamein classExpression
-
checkValue
Check the expression- Overrides:
checkValuein classUnaryExpression
-
reportFailedPackagePrefix
If 'checkAmbiguousName' returns 'Package.tPackage', then it was unable to resolve any prefix of the qualified name. This method attempts to diagnose the problem. -
reportFailedPackagePrefix
-
implementFieldAccess
private Expression implementFieldAccess(Environment env, Context ctx, Expression base, boolean isLHS) Rewrite accesses to private fields of another class. -
accessBase
Determine if an access method is required, and, if so, return the class in which it should appear, else return null. -
isTypeAccessible
Determine if a type is accessible from a given class. -
checkCommon
private Vset checkCommon(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc, boolean isLHS) Common code for checkValue and checkAmbigName -
getAssigner
Return aFieldUpdaterobject to be used in updating the value of the location denoted bythis, which must be an expression suitable for the left-hand side of an assignment. This is used for implementing assignments to private fields for which an access method is required. Returns null if no access method is needed, in which case the assignment is handled in the usual way, by direct access. Only simple assignment expressions are handled here Assignment operators and pre/post increment/decrement operators are are handled by 'getUpdater' below.Must be called after 'checkValue', else 'right' will be invalid.
- Overrides:
getAssignerin classExpression
-
getUpdater
Return aFieldUpdaterobject to be used in updating the value of the location denoted bythis, which must be an expression suitable for the left-hand side of an assignment. This is used for implementing the assignment operators and the increment and decrement operators on private fields that are accessed from another class, e.g, uplevel from an inner class. Returns null if no access method is needed.Must be called after 'checkValue', else 'right' will be invalid.
- Overrides:
getUpdaterin classExpression
-
checkInnerClass
private Vset checkInnerClass(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc) This field expression is an inner class reference. Finish checking it. -
checkLHS
Check the expression if it appears on the LHS of an assignment- Overrides:
checkLHSin classExpression
-
checkAssignOp
public Vset checkAssignOp(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, Expression outside) Check the expression if it appears on the LHS of an op= expression- Overrides:
checkAssignOpin classExpression
-
checkFinalAssign
public static Vset checkFinalAssign(Environment env, Context ctx, Vset vset, long where, MemberDefinition field) There is a simple assignment being made to the given final field. The field was named either by a simple name or by an almost-simple expression of the form "this.v". Check if this is a legal assignment.Blank final variables can be set in initializers or constructor bodies. In all cases there must be definite single assignment. (All instance and instance variable initializers and each constructor body are treated as if concatenated for the purposes of this check. Assignment to "this.x" is treated as a definite assignment to the simple name "x" which names the instance variable.)
-
getClassLiteralCache
private static MemberDefinition getClassLiteralCache(Environment env, Context ctx, String className, ClassDefinition c) -
makeClassLiteralCacheRef
private Expression makeClassLiteralCacheRef(Environment env, Context ctx, MemberDefinition lookup, MemberDefinition cfld, String className) -
makeClassLiteralInlineRef
private Expression makeClassLiteralInlineRef(Environment env, Context ctx, MemberDefinition lookup, String className) -
isConstant
public boolean isConstant()Check if constant: Will it inline away?- Overrides:
isConstantin classUnaryExpression
-
inline
Inline- Overrides:
inlinein classUnaryExpression
-
inlineValue
- Overrides:
inlineValuein classUnaryExpression
-
inlineLHS
- Overrides:
inlineLHSin classExpression
-
copyInline
Description copied from class:UnaryExpressionCreate a copy of the expression for method inlining- Overrides:
copyInlinein classUnaryExpression
-
costInline
The cost of inlining this expression- Overrides:
costInlinein classUnaryExpression
-
codeLValue
Code- Overrides:
codeLValuein classExpression
-
codeLoad
- Overrides:
codeLoadin classExpression
-
codeStore
- Overrides:
codeStorein classExpression
-
codeValue
- Overrides:
codeValuein classExpression
-
print
-