JML

org.multijava.mjc
Class JClassDeclaration

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.multijava.mjc.JMemberDeclaration
                  extended byorg.multijava.mjc.JTypeDeclaration
                      extended byorg.multijava.mjc.JClassDeclaration
All Implemented Interfaces:
Annotatable, Cloneable, Comparable, CompilerPassEnterable, Constants, Constants, JClassDeclarationType, JMemberDeclarationType, JTypeDeclarationType, PhylumType
Direct Known Subclasses:
JClassDeclarationWrapper, MJGenericFunctionDecl

public class JClassDeclaration
extends JTypeDeclaration
implements JClassDeclarationType

This class represents a java class in the syntax tree


Nested Class Summary
 
Nested classes inherited from class org.multijava.mjc.JTypeDeclaration
JTypeDeclaration.WrapResult
 
Field Summary
protected  CClassContextType self
           
private  CVariableInfoTable staticInfo
           
protected  CClassType superType
           
 
Fields inherited from class org.multijava.mjc.JTypeDeclaration
cachedContext, fieldsAndInits, ident, inners, instanceInit, interfaces, methods, modifiers, sourceClass, statInit, typevariables, uniqueSourceClass
 
Fields inherited from class org.multijava.mjc.JMemberDeclaration
 
Fields inherited from class org.multijava.mjc.JPhylum
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
JClassDeclaration(TokenReference where, long modifiers, String ident, CTypeVariable[] typevariables, CClassType superType, CClassType[] interfaces, ArrayList methods, ArrayList inners, JPhylum[] fieldsAndInits, JavadocComment javadoc, JavaStyleComment[] comment)
          Constructs a class declaration in the parsing tree.
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor
 void checkInitializers(CContextType context)
          Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking.
 void checkInterface(CContextType context)
          Checks the basic interfaces to make sure things generally look OK.
protected  JConstructorDeclarationType constructDefaultConstructor()
          Builds an AST node representing the default constructor for this class.
protected  JInitializerDeclaration constructInitializers(boolean isStatic)
          Collects all initializers and builds a single method.
 CClassContextType createContext(CContextType parent)
          Creates a class context for this class declaration.
 boolean hasConstructor()
          Returns true if this class declaration contains an explicit constructor declaration.
 String ident()
          Returns the identifier for this type declaration.
 void preprocessDependencies(CContextType context)
          Performs preliminary processing on compilation units and types.
 void resolveSpecializers(CContextType context)
          Computes the values of specializer expressions used to dispatch on compile-time constants.
 void setInterfaces(CClassType[] interfaces)
          Sets the interfaces
 void setSuperClass(CClassType superType)
          Sets the super class
 String superName()
           
 void typecheck(CContextType context)
          Typechecks this type declaration in the context in which it appears.
 
Methods inherited from class org.multijava.mjc.JTypeDeclaration
accumAllTypeSignatures, addMember, annotateInternalInterfaceMethods, cachePassParameters, checkForDups, checkForSameSignature, checkInitializers, checkInterface, compareTo, dispatcherWrapMethods, fields, fieldsAndInits, generateInterface, getAllMethods, getDefaultConstructor, inners, interfaces, isAtTopLevel, isDeclaredInDifferentSourceFiles, makeSignature, methods, methodsToBeWrapped, modifiers, owner, preprocessDependencies, preprocessDependencies, registerSignature, resolveExtMethods, resolveSpecializers, resolveTopMethods, setDefaultConstructor, setFields, setFieldsOnly, setIdent, setInners, setMethods, setStatic, syntheticOuterThisInaccessible, translateMJ, translateMJ, typecheck, typevariables, uniqueSourceWarning, unsetStatic
 
Methods inherited from class org.multijava.mjc.JMemberDeclaration
genComments, getCClass, getField, getMethod, isDeprecated, javadocComment, setInterface
 
Methods inherited from class org.multijava.mjc.JPhylum
check, check, check, check, fail, 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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.multijava.mjc.JTypeDeclarationType
accumAllTypeSignatures, addMember, cachePassParameters, fields, fieldsAndInits, generateInterface, getAllMethods, getDefaultConstructor, inners, interfaces, isAtTopLevel, methods, modifiers, owner, resolveTopMethods, setDefaultConstructor, setIdent, setInners, setStatic, syntheticOuterThisInaccessible, translateMJ, unsetStatic
 
Methods inherited from interface org.multijava.mjc.JMemberDeclarationType
genComments, getCClass, getField, getMethod, isDeprecated
 
Methods inherited from interface org.multijava.util.compiler.PhylumType
getTokenReference, setTokenReference
 
Methods inherited from interface org.multijava.javadoc.Annotatable
javadocComment
 
Methods inherited from interface org.multijava.mjc.CompilerPassEnterable
checkInitializers, checkInterface, getTokenReference, preprocessDependencies, resolveSpecializers, translateMJ, typecheck
 
Methods inherited from interface java.lang.Comparable
compareTo
 

Field Detail

staticInfo

private CVariableInfoTable staticInfo

self

protected CClassContextType self

superType

protected CClassType superType
Constructor Detail

JClassDeclaration

public JClassDeclaration(TokenReference where,
                         long modifiers,
                         String ident,
                         CTypeVariable[] typevariables,
                         CClassType superType,
                         CClassType[] interfaces,
                         ArrayList methods,
                         ArrayList inners,
                         JPhylum[] fieldsAndInits,
                         JavadocComment javadoc,
                         JavaStyleComment[] comment)
Constructs a class declaration in the parsing tree.

Parameters:
where - the line of this node in the source code
modifiers - the list of modifiers of this class
ident - the short name of this class
typevariables - the type variables of this class
superType - the type this class's superclass
interfaces - the names of this types's interfaces
methods - a list of JMethodDeclarationTypes giving the methods of this type
inners - a list of JTypeDeclarationTypes giving the inner classes (and interfaces) of this type
fieldsAndInits - the fields and initializers of this type, passed together because the order matters for class and object initialization, members of the array should be instances of JFieldDeclarationType or JClassBlock
javadoc - javadoc comments including whether this type declaration is deprecated
comment - regular java comments
See Also:
JMethodDeclarationType, JFieldDeclarationType, JClassBlock
Method Detail

setSuperClass

public void setSuperClass(CClassType superType)
Sets the super class

Specified by:
setSuperClass in interface JClassDeclarationType

setInterfaces

public void setInterfaces(CClassType[] interfaces)
Sets the interfaces

Specified by:
setInterfaces in interface JClassDeclarationType

preprocessDependencies

public void preprocessDependencies(CContextType context)
                            throws PositionedError
Performs preliminary processing on compilation units and types. Processes type imports so external methods' receiver types can be analyzed and supertypes can be resolved. Groups external methods by name, corresponding to the anchor classes that will eventually be generated. Mutates the name space management in CTopLevel to record a CGenericFunctionCollection singleton for each anchor class.

Specified by:
preprocessDependencies in interface JTypeDeclarationType
Throws:
PositionedError

checkInterface

public void checkInterface(CContextType context)
                    throws PositionedError
Checks the basic interfaces to make sure things generally look OK. This pass gathers information about the type signatures of everything (imported class files, classes being compiled, methods, fields, etc...) needed for the later passes. This information is stored in a CCompilationUnit instance and instances of CMember that are bound to the AST. Also adds things like the default constructor and the initializer method to the AST (these are suppressed during pretty-printing).

Specified by:
checkInterface in interface JTypeDeclarationType
Overrides:
checkInterface in class JTypeDeclaration
Parameters:
context - the context in which this decl appears
Returns:
iff sub tree is correct enought to check code
Throws:
PositionedError - an error with reference to the source file

hasConstructor

public boolean hasConstructor()
Returns true if this class declaration contains an explicit constructor declaration. This method is used by checkInterface to determine whether or not to create a default constructor for this type.

Specified by:
hasConstructor in interface JClassDeclarationType

checkInitializers

public void checkInitializers(CContextType context)
                       throws PositionedError
Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking.

Specified by:
checkInitializers in interface JTypeDeclarationType
Overrides:
checkInitializers in class JTypeDeclaration
Parameters:
context - the context in which this class declaration appears
Throws:
PositionedError - if check fails

resolveSpecializers

public void resolveSpecializers(CContextType context)
                         throws PositionedError
Computes the values of specializer expressions used to dispatch on compile-time constants.

Specified by:
resolveSpecializers in interface JTypeDeclarationType
Parameters:
context - the context in which this class declaration appears
Throws:
PositionedError - if the check fails

typecheck

public void typecheck(CContextType context)
               throws PositionedError
Typechecks this type declaration in the context in which it appears. Mutates the context to record the information learned during checking.

Specified by:
typecheck in interface JTypeDeclarationType
Overrides:
typecheck in class JTypeDeclaration
Parameters:
context - the context in which this type declaration appears
Throws:
PositionedError - if any checks fail

createContext

public CClassContextType createContext(CContextType parent)
Creates a class context for this class declaration.

Specified by:
createContext in interface JClassDeclarationType
Parameters:
parent - the parent context or null
Returns:
returns a CClassContextType that represents this context

constructDefaultConstructor

protected JConstructorDeclarationType constructDefaultConstructor()
Builds an AST node representing the default constructor for this class.

Returns:
an AST node

constructInitializers

protected JInitializerDeclaration constructInitializers(boolean isStatic)
Collects all initializers and builds a single method.

Parameters:
isStatic - build class (static) or instance initializers?

accept

public void accept(MjcVisitor p)
Accepts the specified visitor

Specified by:
accept in interface JMemberDeclarationType
Parameters:
p - the visitor

ident

public String ident()
Description copied from interface: JTypeDeclarationType
Returns the identifier for this type declaration.

Specified by:
ident in interface JTypeDeclarationType
Overrides:
ident in class JTypeDeclaration
Returns:
the unqualified identifier for this type declaration

superName

public String superName()
Specified by:
superName in interface JClassDeclarationType

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.