JML

org.multijava.mjc
Class JNameExpression

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.multijava.mjc.JExpression
                  extended byorg.multijava.mjc.JNameExpression
All Implemented Interfaces:
Cloneable, Constants, Constants, PhylumType

public class JNameExpression
extends JExpression

This class represents a name within an expression. This could be a variable reference, a field reference, a type name, a package name. The meaning of the name is determined according to the rules of JLS2 6.5.


Field Summary
private  String ident
          The short name of this, i.e., the name following the dot between prefix and this.
private  JExpression prefix
           
private  String sourceIdent
          The identifier as appeared in the source code; note that ident may be changed as the result of typechecking.
private  JExpression sourcePrefix
          The prefix as appeared in the source code; note that prefix may be changed as the result of typechecking.
private  CUniverse universe
          The universe associated with the type name.
 
Fields inherited from class org.multijava.mjc.JExpression
EMPTY
 
Fields inherited from class org.multijava.util.compiler.Phylum
 
Fields inherited from class org.multijava.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, 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_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_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_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_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_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_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc2_w, opc_ldc_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_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
JNameExpression(TokenReference where, String ident)
          Constructs a node in the parsing tree.
JNameExpression(TokenReference where, String ident, CUniverse univ)
          Constructs a node in the parsing tree.
JNameExpression(TokenReference where, JExpression prefix, String ident)
          Constructs a node in the parsing tree.
JNameExpression(TokenReference where, JExpression prefix, String ident, CUniverse univ)
          Constructs a node in the parsing tree.
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor
private  JExpression convertToPackageName(CExpressionContextType context)
          Called if the prefix doesn't typecheck, this tries to use the prefix as a package name to be prepended to the identifier hopefully yielding a fully qualified name.
protected  JClassFieldExpression createClassField(TokenReference ref, String ident)
          Since class field may be overloaded in sub compiler, this method allow you to specifie the type of class field without needed to touch the huge method above !
protected  JClassFieldExpression createClassField(TokenReference ref, JExpression prefix, String ident)
          Since class field may be overloaded in sub compiler, this method allow you to specifie the type of class field without needed to touch the huge method above !
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes
 String getName()
          Returns the name of this name expression.
 JExpression getPrefix()
           
 CType getType()
          Compute the type of this expression (called after parsing)
 boolean isNonNull(CContextType context)
          Returns true iff the value represented by this expression is non-null
 String qualifiedName()
          Returns the longest name available
 String sourceIdent()
           
 JExpression sourcePrefix()
           
 String toString()
           
 JExpression typecheck(CExpressionContextType context)
          Typechecks the expression and mutates the context to record information gathered during typechecking.
 
Methods inherited from class org.multijava.mjc.JExpression
buildUniverseDynChecks, clone, convertType, dumpArray, fail, genBranch, genUniverseDynCheckCode, getApparentType, getBooleanLiteral, getFANonNulls, getFANulls, getLiteral, getNumberLiteral, getOrdinalLiteral, getRealLiteral, getStringLiteral, isAssignableTo, isBooleanLiteral, isConstant, isDeclaredNonNull, isLiteral, isMaybeInitializable, isOrdinalLiteral, isRealLiteral, isStatementExpression, isStringLiteral, typecheck, unParenthesize
 
Methods inherited from class org.multijava.mjc.JPhylum
check, check, check, check, fail, fail, warn, warn, warn, warn
 
Methods inherited from class org.multijava.util.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class org.multijava.util.Utils
assertTrue, assertTrue, combineArrays, escapeString, escapeString, fail, fail, getFilePath, hasFlag, hasOtherFlags, parsePathParts, relativePathTo, splitQualifiedName, splitQualifiedName, stripJavaModifiers, stripNonJavaModifiers, stripPrivateModifier, unescapeString, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

prefix

private JExpression prefix

sourcePrefix

private JExpression sourcePrefix
The prefix as appeared in the source code; note that prefix may be changed as the result of typechecking. This may be null.


sourceIdent

private String sourceIdent
The identifier as appeared in the source code; note that ident may be changed as the result of typechecking. This may be null.


ident

private String ident
The short name of this, i.e., the name following the dot between prefix and this.

 private invariant ident != null;
 


universe

private CUniverse universe
The universe associated with the type name. By WMD.

Constructor Detail

JNameExpression

public JNameExpression(TokenReference where,
                       String ident)
Constructs a node in the parsing tree.

 requires ident != null;
 ensures this.ident != null;
 

Parameters:
where - the line of this node in the source code
ident - the short name of this name

JNameExpression

public JNameExpression(TokenReference where,
                       String ident,
                       CUniverse univ)
Constructs a node in the parsing tree.

 requires ident != null;
 ensures this.ident != null;
 

Parameters:
where - the line of this node in the source code
ident - the short name of this name
univ - the universe modifier WMD

JNameExpression

public JNameExpression(TokenReference where,
                       JExpression prefix,
                       String ident)
Constructs a node in the parsing tree.

 requires ident != null;
 ensures this.ident != null;
 

Parameters:
where - the line of this node in the source code
prefix - the primary expression qualifying this name
ident - the short name of this name

JNameExpression

public JNameExpression(TokenReference where,
                       JExpression prefix,
                       String ident,
                       CUniverse univ)
Constructs a node in the parsing tree.

 requires ident != null;
 ensures this.ident != null;
 

Parameters:
where - the line of this node in the source code
prefix - the primary expression qualifying this name
ident - the short name of this name
univ - the universe modifier WMD
Method Detail

toString

public String toString()
Overrides:
toString in class Object

getType

public CType getType()
Compute the type of this expression (called after parsing)

Returns:
the type of this expression

getName

public String getName()
Returns the name of this name expression.

 ensures \result != null;
 


getPrefix

public JExpression getPrefix()
Returns:
the prefix of this name expression

sourcePrefix

public JExpression sourcePrefix()
Returns:
the prefix of this name expression as it appeared in the source code.

sourceIdent

public String sourceIdent()
Returns:
the identifier of this name expression as it appeared in the source code.

qualifiedName

public String qualifiedName()
Returns the longest name available


isNonNull

public boolean isNonNull(CContextType context)
Description copied from class: JExpression
Returns true iff the value represented by this expression is non-null

Overrides:
isNonNull in class JExpression

typecheck

public JExpression typecheck(CExpressionContextType context)
                      throws PositionedError
Typechecks the expression and mutates the context to record information gathered during typechecking.

Parameters:
context - the context in which this expression appears
Returns:
a desugared Java expression (see JExpression.typecheck())
Throws:
PositionedError - if the check fails
See Also:
JExpression.typecheck(CExpressionContextType)

convertToPackageName

private JExpression convertToPackageName(CExpressionContextType context)
                                  throws PositionedError
Called if the prefix doesn't typecheck, this tries to use the prefix as a package name to be prepended to the identifier hopefully yielding a fully qualified name.

Parameters:
context - the context in which this occurs
Returns:
a fresh type name expression
Throws:
PositionedError - if the resulting fully qualified name is not a valid type name

createClassField

protected JClassFieldExpression createClassField(TokenReference ref,
                                                 JExpression prefix,
                                                 String ident)
Since class field may be overloaded in sub compiler, this method allow you to specifie the type of class field without needed to touch the huge method above !


createClassField

protected JClassFieldExpression createClassField(TokenReference ref,
                                                 String ident)
Since class field may be overloaded in sub compiler, this method allow you to specifie the type of class field without needed to touch the huge method above !


accept

public void accept(MjcVisitor p)
Accepts the specified visitor

Parameters:
p - the visitor

genCode

public void genCode(CodeSequence code)
Generates a sequence of bytecodes

Parameters:
code - the code list

JML

JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.