mjc

org.multijava.mjc
Class CMethodSet

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.mjc.CAbstractMethodSet
          extended byorg.multijava.mjc.CMethodSet
All Implemented Interfaces:
Cloneable, Constants, Constants
Direct Known Subclasses:
CGenericFunctionCollection.Impl

public class CMethodSet
extends CAbstractMethodSet
implements Constants

This class encapsulates a collection of method signatures. It is used to track the type signatures of methods declared in a class and to track the apparent methods of a class as augmented by external methods and as viewed by another compilation unit. It includes facilities for accumulating sets of methods that meet some specified criteria, for example, methods that are specialized by a given method.

See Also:
CClass, CAugmentationMap

Nested Class Summary
static class CMethodSet.MethodArgsPair
           
static interface CMethodSet.Strategy
          Represents the interface for strategies used in accumulating method sets.
 
Nested classes inherited from class org.multijava.mjc.CAbstractMethodSet
CAbstractMethodSet.Iterator
 
Field Summary
private  Set methodIdents
          A set of the identifiers of methods present in this collection.
private static int MIN_HASH_SIZE
          The minimum size of the collection for which a Hashset will be instantiated to track method identifiers.
private static TokenReference NO_TOKEN
           
 
Fields inherited from class org.multijava.mjc.CAbstractMethodSet
 
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
CMethodSet()
           
CMethodSet(CMethod[] methodArray)
           
 
Method Summary
 void accumMethodSet(CMethodSet.Strategy actor, String ident, CMethodSet accum, CClassType[] args)
          Processes the methods in this set using the given strategy and mutates the accumulator according to the strategy.
 void appendAbstractMethodsTo(ArrayList v)
          Appends all the abstract methods in this collection to the given list.
 void appendAbstractMethodsTo(ArrayList v, CClassType[] args)
           
 void appendMethodsTo(ArrayList v)
          Appends all the methods in this collection to the given list.
 void appendMethodsTo(ArrayList v, CClassType[] args)
           
 void buildGenericFunctionInfo(ArrayList accum)
           
 MethodInfo[] buildMethodInfo()
          Generates an array of method info for the methods in this collection.
static byte makeResult(boolean ignoreCurrent, boolean remove, boolean done)
          Constructs a bit-mask for implementers of the resultFor() method of Strategy.
 String toString()
           
 
Methods inherited from class org.multijava.mjc.CAbstractMethodSet
addMethod, contains, getFirst, getMethod, isEmpty, iterator, size
 
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, wait, wait, wait
 

Field Detail

MIN_HASH_SIZE

private static int MIN_HASH_SIZE
The minimum size of the collection for which a Hashset will be instantiated to track method identifiers.


methodIdents

private Set methodIdents
A set of the identifiers of methods present in this collection. This is used for efficient lookup; a linear search of methodArray is only performed if this set indicates that the search will be successful. The search is still needed since many lookup operations will yield sets of applicable methods. Also note that for small collections this set is just left as null as it is more efficient in those cases to just perform the linear search.


NO_TOKEN

private static final TokenReference NO_TOKEN
Constructor Detail

CMethodSet

public CMethodSet(CMethod[] methodArray)

CMethodSet

public CMethodSet()
Method Detail

accumMethodSet

public void accumMethodSet(CMethodSet.Strategy actor,
                           String ident,
                           CMethodSet accum,
                           CClassType[] args)
                    throws UnpositionedError
Processes the methods in this set using the given strategy and mutates the accumulator according to the strategy. Examples of the use of this method can be found in CClass.

Parameters:
actor - the strategy used for selecting methods
ident - the identifier of the methods to be selected, used in an efficiency hack for avoiding a linear search in cases where such a search is certain to fail
accum - an accumulator for the result, is mutated
Throws:
UnpositionedError - at the discretion of the strategy

makeResult

public static byte makeResult(boolean ignoreCurrent,
                              boolean remove,
                              boolean done)
Constructs a bit-mask for implementers of the resultFor() method of Strategy.

See Also:
CMethodSet.Strategy, CMethodSet.Strategy.resultFor(CMethod,CMethod), CMethodSet.Strategy.IGNORE_CURRENT, CMethodSet.Strategy.REMOVE_ACCUM, CMethodSet.Strategy.DONE_WITH_ACCUM

appendAbstractMethodsTo

public void appendAbstractMethodsTo(ArrayList v)
Appends all the abstract methods in this collection to the given list.

Parameters:
v - mutated to include the CMethods for all abstract methods in this collection

appendAbstractMethodsTo

public void appendAbstractMethodsTo(ArrayList v,
                                    CClassType[] args)

appendMethodsTo

public void appendMethodsTo(ArrayList v)
Appends all the methods in this collection to the given list.

Parameters:
v - mutated to include the CMethods for all methods in this collection

appendMethodsTo

public void appendMethodsTo(ArrayList v,
                            CClassType[] args)

toString

public String toString()
Overrides:
toString in class CAbstractMethodSet

buildMethodInfo

public MethodInfo[] buildMethodInfo()
Generates an array of method info for the methods in this collection.


buildGenericFunctionInfo

public void buildGenericFunctionInfo(ArrayList accum)

mjc

mjc is Copyright (C) 2000-2004 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. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.