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) ClassDefinition
clazz
(package private) MemberDefinition
field
(package private) Identifier
id
(package private) Expression
implementation
private ClassDefinition
superBase
-
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 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.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.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= expressionprivate 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 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, java.util.Hashtable<java.lang.Object,java.lang.Object> exp, UnaryExpression loc)
This field expression is an inner class reference.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 assignmentVset
checkValue(Environment env, Context ctx, Vset vset, java.util.Hashtable<java.lang.Object,java.lang.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)
Expression
copyInline(Context ctx)
Create a copy of the expression for method inliningint
costInline(int thresh, Environment env, Context ctx)
The cost of inlining this expressionFieldUpdater
getAssigner(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, java.lang.String className, ClassDefinition c)
Expression
getImplementation()
Type checking may assign a more complex implementation to an innocuous-looking expression (like an identifier).FieldUpdater
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.Expression
inline(Environment env, Context ctx)
InlineExpression
inlineLHS(Environment env, Context ctx)
Expression
inlineValue(Environment env, Context ctx)
boolean
isConstant()
Check if constant: Will it inline away?private boolean
isQualSuper()
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, java.lang.String className)
private Expression
makeClassLiteralInlineRef(Environment env, Context ctx, MemberDefinition lookup, java.lang.String className)
void
print(java.io.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
toIdentifier(Expression e)
Convert an '.' expression to a qualified identifier(package private) Type
toType(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: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
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:
toType
in 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:
checkAmbigName
in 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:
checkValue
in 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 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
public FieldUpdater 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. 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, 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:
checkLHS
in 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:
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, 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:
isConstant
in classUnaryExpression
-
inline
public Expression inline(Environment env, Context ctx)
Inline- Overrides:
inline
in classUnaryExpression
-
inlineValue
public Expression inlineValue(Environment env, Context ctx)
- Overrides:
inlineValue
in classUnaryExpression
-
inlineLHS
public Expression inlineLHS(Environment env, Context ctx)
- Overrides:
inlineLHS
in classExpression
-
copyInline
public Expression copyInline(Context ctx)
Description copied from class:UnaryExpression
Create a copy of the expression for method inlining- Overrides:
copyInline
in classUnaryExpression
-
costInline
public int costInline(int thresh, Environment env, Context ctx)
The cost of inlining this expression- Overrides:
costInline
in classUnaryExpression
-
codeLValue
int codeLValue(Environment env, Context ctx, Assembler asm)
Code- Overrides:
codeLValue
in classExpression
-
codeLoad
void codeLoad(Environment env, Context ctx, Assembler asm)
- Overrides:
codeLoad
in classExpression
-
codeStore
void codeStore(Environment env, Context ctx, Assembler asm)
- Overrides:
codeStore
in classExpression
-
codeValue
public void codeValue(Environment env, Context ctx, Assembler asm)
- Overrides:
codeValue
in classExpression
-
print
public void print(java.io.PrintStream out)
Print- Overrides:
print
in classUnaryExpression
-
-