JML

org.multijava.mjc
Class CBadClass

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.mjc.CMember
          extended byorg.multijava.mjc.CClass
              extended byorg.multijava.mjc.CBadClass
All Implemented Interfaces:
Cloneable, CMemberHost, Comparable, Constants, Constants

public class CBadClass
extends CClass

This class represents an undefined class (something that comes from a bad classfile) This class is not usable to anything, so it will sooner or later produce a comprehensive error.


Nested Class Summary
 
Nested classes inherited from class org.multijava.mjc.CClass
CClass.NoDupStrategy, CClass.Observer
 
Field Summary
 
Fields inherited from class org.multijava.mjc.CClass
CLS_UNDEFINED, dispClassTypes, methods
 
Fields inherited from class org.multijava.mjc.CMember
 
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
CBadClass(String qualifiedName)
          Constructs a class export from file
 
Method Summary
 void collectAbstractMethods(ArrayList v)
          collectAbstractMethods search for a matching method with the provided type parameters look in parent hierarchy as needed
 void collectInterfaceMethods(ArrayList v, CClassType[] args)
          collectInterfaceMethods search for a matching method with the provided type parameters look in parent hierarchy as needed
 boolean descendsFrom(CClass maybeSuper)
          Indicates whether this host is a subclass of the given class, where "subclass" is the reflexive, transitive closure of the extends relation.
 void genClassFile(Destination destination)
          Generate the code in a class file
 CMethodSet.MethodArgsPair[] getAbstractMethods()
          Returns a list of abstract methods
protected  CField getDeclaredField(String ident)
          Returns the signature of the field with the given name declared in this class, or null if this class does not declare a field with the given name.
 CMethodSet.MethodArgsPair[] getInterfaceMethods()
          Returns a list of interface methods
 boolean isAccessibleFrom(CMemberHost from)
          Indicates whether this is accessible from the given host.
 boolean isAnonymous()
           
 boolean isMember()
           
 CClass lookupClass(String name, CContextType context)
          Searches for a class with the given simple name according the procedure in JLS2 6.5.5.
 CFieldAccessor lookupField(String name, CExpressionContextType context)
          lookupField search for a field look in parent hierarchy as needed
 CMethodSet lookupMethodOrSet(String name, CType[] params, CContextType context)
          Searches for the most specific method applicable to the given identifier and argument type tuple, in the given context, looking in parent hierarchy and augmentation map as needed.
 
Methods inherited from class org.multijava.mjc.CClass
accumLocalExtAndInheritedMethods, accumLocalInternalMethods, accumMostSpecificMethods, addBridgeMethod, addField, addRedirector, appendCustomAttributes, augmentWithMethod, checkBridgeMethod, checkTypeVariables, close, collectAbstractMethods, compareTo, createClassInfo, descendsFrom, directlyVisibleTypes, equals, fields, fieldsForCodeGen, findGetterMethod, findOrCreateGetterMethod, findOrCreateSetterMethod, genConstructorArray, genCustomAttributes, genFields, genGenericFunctions, genInnerInfo, genInners, genInterfaces, genMethods, genSyntheticParams, genSyntheticParamsForExplicitThis, getAllInheritableMethods, getAllInheritedMethods, getAllMethods, getCClass, getCompiler, getFieldCount, getGenericSignature, getIdentFrom, getInnerClasses, getInterfaces, getNextAccessName, getNextSyntheticIndex, getSubstitution, getSubstitution, getSuperClass, getSuperSubstitution, getSuperType, getSyntheticParamsForExplicitSuper, getterOrSetterMethodFor, getType, getTypeVariables, getUniverseVersion, hashCode, hasProtectedVisibilityIn, hasSyntheticOuterThis, initSession, innerClassesForAttribute, isAbstract, isClass, isCompilationUnit, isDefinedInside, isFieldRedefined, isGenericClass, isInnerClass, isInterface, isNestedType, lookupAllMethods, lookupFieldHelper, lookupMethod, lookupMethodOrSet, lookupMethodsSpecializedByMethod, lookupMSAMethod, lookupOverloadedMethod, lookupSuperField, lookupTopConcreteMethod, lookupTypeVariable, memberNeedsPrivilegedAccess, methods, methodsForCodeGen, nestedDescendsFrom, noAssertionsYet, noPossiblyInnerAssertionsYet, packageName, protoMethods, qualifiedName, register, registerNestedType, rmjAnnotate, setAssertHelperMethod, setAssertStaticInitMethod, setCheckedInterfaces, setCheckedMembers, setInnerClasses, setSuperClass, setTypeVariables, sourceFile, syntheticOuterThisInaccessible, toString, wrapSuperCallTo
 
Methods inherited from class org.multijava.mjc.CMember
access, addModifiers, deprecated, getCCompilationUnit, getField, getIdent, getJavaName, getMethod, getOwnerName, getQualNameWithSeparator, hasDefaultAccess, host, ident, isDeclaredNonNull, isDeprecated, isFinal, isLocalTo, isPrivate, isProtected, isPublic, isStatic, modifiers, owner, setModifiers
 
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, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.multijava.mjc.CMemberHost
host, ident
 

Constructor Detail

CBadClass

public CBadClass(String qualifiedName)
Constructs a class export from file

Method Detail

descendsFrom

public boolean descendsFrom(CClass maybeSuper)
Indicates whether this host is a subclass of the given class, where "subclass" is the reflexive, transitive closure of the extends relation.

Specified by:
descendsFrom in interface CMemberHost
Overrides:
descendsFrom in class CClass
Parameters:
maybeSuper - the potential superclass

getDeclaredField

protected final CField getDeclaredField(String ident)
Returns the signature of the field with the given name declared in this class, or null if this class does not declare a field with the given name.

Overrides:
getDeclaredField in class CClass

isAnonymous

public boolean isAnonymous()

isMember

public boolean isMember()
Description copied from class: CClass
Indicates whether the class represented by this is a member type. A member type is a type that is declared inside another type but that is not an anonymous class or a local type declaration.


lookupClass

public CClass lookupClass(String name,
                          CContextType context)
Searches for a class with the given simple name according the procedure in JLS2 6.5.5. Since this is a bad class this method just returns null.

Overrides:
lookupClass in class CClass
Parameters:
name - the class name, without qualifiers
context - the referencing context, used for accessibility checks
Returns:
the class if found, null otherwise

lookupMethodOrSet

public CMethodSet lookupMethodOrSet(String name,
                                    CType[] params,
                                    CContextType context)
Searches for the most specific method applicable to the given identifier and argument type tuple, in the given context, looking in parent hierarchy and augmentation map as needed. Returns null always since this has no methods.

Parameters:
name - method name
params - method parameter types
context - the context in which the method reference should be resolved, used to identifier the external methods augmenting this class

lookupField

public CFieldAccessor lookupField(String name,
                                  CExpressionContextType context)
lookupField search for a field look in parent hierarchy as needed

Overrides:
lookupField in class CClass
Parameters:
name - method name
context - the context of the field access

isAccessibleFrom

public boolean isAccessibleFrom(CMemberHost from)
Indicates whether this is accessible from the given host.

Specified by:
isAccessibleFrom in interface CMemberHost
Overrides:
isAccessibleFrom in class CMember
Parameters:
from - the host that wants access
Returns:
true iff the given host is allowed access to this host's members

getInterfaceMethods

public CMethodSet.MethodArgsPair[] getInterfaceMethods()
Returns a list of interface methods

Overrides:
getInterfaceMethods in class CClass

getAbstractMethods

public CMethodSet.MethodArgsPair[] getAbstractMethods()
Returns a list of abstract methods

Overrides:
getAbstractMethods in class CClass

collectInterfaceMethods

public void collectInterfaceMethods(ArrayList v,
                                    CClassType[] args)
collectInterfaceMethods search for a matching method with the provided type parameters look in parent hierarchy as needed

Overrides:
collectInterfaceMethods in class CClass

collectAbstractMethods

public void collectAbstractMethods(ArrayList v)
collectAbstractMethods search for a matching method with the provided type parameters look in parent hierarchy as needed


genClassFile

public void genClassFile(Destination destination)
Generate the code in a class file

Overrides:
genClassFile in class CClass
Parameters:
destination - the location where the class file should be generated

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.