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:
java.lang.Cloneable,Constants,RuntimeConstants
public class FieldExpression extends UnaryExpression
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
Fields Modifier and Type Field Description (package private) ClassDefinitionclazz(package private) MemberDefinitionfield(package private) Identifierid(package private) Expressionimplementationprivate ClassDefinitionsuperBase-
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
Constructors Constructor Description FieldExpression(long where, Expression right, Identifier id)constructorFieldExpression(long where, Expression right, MemberDefinition field)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private 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.VsetcheckAmbigName(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, UnaryExpression loc)Check if the present name is part of a scoping prefix.VsetcheckAssignOp(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, Expression outside)Check the expression if it appears on the LHS of an op= expressionprivate VsetcheckCommon(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.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, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, UnaryExpression loc)This field expression is an inner class reference.VsetcheckLHS(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp)Check the expression if it appears on the LHS of an assignmentVsetcheckValue(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.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)ExpressioncopyInline(Context ctx)Create a copy of the expression for method inliningintcostInline(int thresh, Environment env, Context ctx)The cost of inlining this expressionFieldUpdatergetAssigner(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, java.lang.String className, ClassDefinition c)ExpressiongetImplementation()Type checking may assign a more complex implementation to an innocuous-looking expression (like an identifier).FieldUpdatergetUpdater(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.Expressioninline(Environment env, Context ctx)InlineExpressioninlineLHS(Environment env, Context ctx)ExpressioninlineValue(Environment env, Context ctx)booleanisConstant()Check if constant: Will it inline away?private booleanisQualSuper()Return 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, java.lang.String className)private ExpressionmakeClassLiteralInlineRef(Environment env, Context ctx, MemberDefinition lookup, java.lang.String className)voidprint(java.io.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 IdentifiertoIdentifier(Expression e)Convert an '.' expression to a qualified identifier(package private) TypetoType(Environment env, Context ctx)Convert an '.' expression to a type-
Methods 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 Detail
-
id
Identifier id
-
field
MemberDefinition field
-
implementation
Expression implementation
-
clazz
ClassDefinition clazz
-
superBase
private ClassDefinition superBase
-
-
Constructor Detail
-
FieldExpression
public FieldExpression(long where, Expression right, Identifier id)constructor
-
FieldExpression
public FieldExpression(long where, Expression right, MemberDefinition field)
-
-
Method Detail
-
getImplementation
public Expression 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
public static Identifier toIdentifier(Expression e)
Convert an '.' expression to a qualified identifier
-
toType
Type toType(Environment env, Context ctx)
Convert an '.' expression to a type- Overrides:
toTypein classExpression
-
checkAmbigName
public Vset checkAmbigName(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, UnaryExpression loc)
Check if the present name is part of a scoping prefix.- Overrides:
checkAmbigNamein classExpression
-
checkValue
public Vset checkValue(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp)
Check the expression- Overrides:
checkValuein classUnaryExpression
-
reportFailedPackagePrefix
static void reportFailedPackagePrefix(Environment env, Expression right)
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
static void reportFailedPackagePrefix(Environment env, Expression right, boolean mustBeType)
-
implementFieldAccess
private Expression implementFieldAccess(Environment env, Context ctx, Expression base, boolean isLHS)
Rewrite accesses to private fields of another class.
-
accessBase
private 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.
-
isTypeAccessible
static boolean isTypeAccessible(long where, Environment env, Type t, ClassDefinition c)Determine if a type is accessible from a given class.
-
checkCommon
private Vset checkCommon(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, UnaryExpression loc, boolean isLHS)
Common code for checkValue and checkAmbigName
-
getAssigner
public FieldUpdater getAssigner(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. 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
public FieldUpdater 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. 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, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, UnaryExpression loc)
This field expression is an inner class reference. Finish checking it.
-
checkLHS
public Vset checkLHS(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.Object> exp)
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, java.util.Hashtable<java.lang.Object,java.lang.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, java.lang.String className, ClassDefinition c)
-
makeClassLiteralCacheRef
private Expression makeClassLiteralCacheRef(Environment env, Context ctx, MemberDefinition lookup, MemberDefinition cfld, java.lang.String className)
-
makeClassLiteralInlineRef
private Expression makeClassLiteralInlineRef(Environment env, Context ctx, MemberDefinition lookup, java.lang.String className)
-
isConstant
public boolean isConstant()
Check if constant: Will it inline away?- Overrides:
isConstantin classUnaryExpression
-
inline
public Expression inline(Environment env, Context ctx)
Inline- Overrides:
inlinein classUnaryExpression
-
inlineValue
public Expression inlineValue(Environment env, Context ctx)
- Overrides:
inlineValuein classUnaryExpression
-
inlineLHS
public Expression inlineLHS(Environment env, Context ctx)
- Overrides:
inlineLHSin classExpression
-
copyInline
public Expression copyInline(Context ctx)
Description copied from class:UnaryExpressionCreate a copy of the expression for method inlining- Overrides:
copyInlinein classUnaryExpression
-
costInline
public int costInline(int thresh, Environment env, Context ctx)The cost of inlining this expression- Overrides:
costInlinein classUnaryExpression
-
codeLValue
int codeLValue(Environment env, Context ctx, Assembler asm)
Code- Overrides:
codeLValuein classExpression
-
codeLoad
void codeLoad(Environment env, Context ctx, Assembler asm)
- Overrides:
codeLoadin classExpression
-
codeStore
void codeStore(Environment env, Context ctx, Assembler asm)
- Overrides:
codeStorein classExpression
-
codeValue
public void codeValue(Environment env, Context ctx, Assembler asm)
- Overrides:
codeValuein classExpression
-
print
public void print(java.io.PrintStream out)
Print- Overrides:
printin classUnaryExpression
-
-