Package org.glassfish.rmic.tools.tree
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) Expression
private ClassDefinition
Fields inherited from class org.glassfish.rmic.tools.tree.UnaryExpression
right
Fields inherited from class org.glassfish.rmic.tools.tree.Expression
type
Fields inherited from interface org.glassfish.rmic.tools.java.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, WHILE
Fields inherited from interface org.glassfish.rmic.tools.java.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 ClassDefinition
accessBase
(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 Vset
checkCommon
(Environment env, Context ctx, Vset vset, Hashtable<Object, Object> exp, UnaryExpression loc, boolean isLHS) Common code for checkValue and checkAmbigNamestatic Vset
checkFinalAssign
(Environment env, Context ctx, Vset vset, long where, MemberDefinition field) There is a simple assignment being made to the given final field.private Vset
checkInnerClass
(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) void
codeLoad
(Environment env, Context ctx, Assembler asm) (package private) int
codeLValue
(Environment env, Context ctx, Assembler asm) Code(package private) void
codeStore
(Environment env, Context ctx, Assembler asm) void
codeValue
(Environment env, Context ctx, Assembler asm) copyInline
(Context ctx) Create a copy of the expression for method inliningint
costInline
(int thresh, Environment env, Context ctx) The cost of inlining this expressiongetAssigner
(Environment env, Context ctx) Return aFieldUpdater
object 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 MemberDefinition
getClassLiteralCache
(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 aFieldUpdater
object 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 Expression
implementFieldAccess
(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) boolean
Check if constant: Will it inline away?private boolean
Return true if the field is being selected from a qualified 'super'.(package private) static boolean
isTypeAccessible
(long where, Environment env, Type t, ClassDefinition c) Determine if a type is accessible from a given class.private Expression
makeClassLiteralCacheRef
(Environment env, Context ctx, MemberDefinition lookup, MemberDefinition cfld, String className) private Expression
makeClassLiteralInlineRef
(Environment env, Context ctx, MemberDefinition lookup, String className) void
print
(PrintStream out) Print(package private) static void
reportFailedPackagePrefix
(Environment env, Expression right) If 'checkAmbiguousName' returns 'Package.tPackage', then it was unable to resolve any prefix of the qualified name.(package private) static void
reportFailedPackagePrefix
(Environment env, Expression right, boolean mustBeType) static Identifier
Convert an '.' expression to a qualified identifier(package private) Type
toType
(Environment env, Context ctx) Convert an '.' expression to a typeMethods inherited from class org.glassfish.rmic.tools.tree.UnaryExpression
eval, eval, eval, eval, eval, eval, eval, order, selectType
Methods inherited from class org.glassfish.rmic.tools.tree.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:Expression
Type 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:
getImplementation
in 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:
toType
in 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:
checkAmbigName
in classExpression
-
checkValue
Check the expression- Overrides:
checkValue
in 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 aFieldUpdater
object 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:
getAssigner
in classExpression
-
getUpdater
Return aFieldUpdater
object 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:
getUpdater
in 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:
checkLHS
in 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:
checkAssignOp
in 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:
isConstant
in classUnaryExpression
-
inline
Inline- Overrides:
inline
in classUnaryExpression
-
inlineValue
- Overrides:
inlineValue
in classUnaryExpression
-
inlineLHS
- Overrides:
inlineLHS
in classExpression
-
copyInline
Description copied from class:UnaryExpression
Create a copy of the expression for method inlining- Overrides:
copyInline
in classUnaryExpression
-
costInline
The cost of inlining this expression- Overrides:
costInline
in classUnaryExpression
-
codeLValue
Code- Overrides:
codeLValue
in classExpression
-
codeLoad
- Overrides:
codeLoad
in classExpression
-
codeStore
- Overrides:
codeStore
in classExpression
-
codeValue
- Overrides:
codeValue
in classExpression
-
print
Print- Overrides:
print
in classUnaryExpression
-