Class ShrikeBTMethod
java.lang.Object
com.ibm.wala.classLoader.ShrikeBTMethod
- All Implemented Interfaces:
IMember, IMethod, ContextItem, IClassHierarchyDweller, BytecodeConstants
- Direct Known Subclasses:
ShrikeCTMethod
A wrapper around a Shrike object that represents a method
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface ContextItem
ContextItem.Value<T>Nested classes/interfaces inherited from interface IMethod
IMethod.SourcePosition -
Field Summary
FieldsFields inherited from interface BytecodeConstants
JBC_aaload, JBC_aastore, JBC_aconst_null, JBC_aload, JBC_aload_0, JBC_aload_1, JBC_aload_2, JBC_aload_3, JBC_anewarray, JBC_areturn, JBC_arraylength, JBC_astore, JBC_astore_0, JBC_astore_1, JBC_astore_2, JBC_astore_3, JBC_athrow, JBC_baload, JBC_bastore, JBC_bipush, JBC_caload, JBC_castore, JBC_checkcast, JBC_d2f, JBC_d2i, JBC_d2l, JBC_dadd, JBC_daload, JBC_dastore, JBC_dcmpg, JBC_dcmpl, JBC_dconst_0, JBC_dconst_1, JBC_ddiv, JBC_dload, JBC_dload_0, JBC_dload_1, JBC_dload_2, JBC_dload_3, JBC_dmul, JBC_dneg, JBC_drem, JBC_dreturn, JBC_dstore, JBC_dstore_0, JBC_dstore_1, JBC_dstore_2, JBC_dstore_3, JBC_dsub, JBC_dup, JBC_dup_x1, JBC_dup_x2, JBC_dup2, JBC_dup2_x1, JBC_dup2_x2, JBC_f2d, JBC_f2i, JBC_f2l, JBC_fadd, JBC_faload, JBC_fastore, JBC_fcmpg, JBC_fcmpl, JBC_fconst_0, JBC_fconst_1, JBC_fconst_2, JBC_fdiv, JBC_fload, JBC_fload_0, JBC_fload_1, JBC_fload_2, JBC_fload_3, JBC_fmul, JBC_fneg, JBC_frem, JBC_freturn, JBC_fstore, JBC_fstore_0, JBC_fstore_1, JBC_fstore_2, JBC_fstore_3, JBC_fsub, JBC_getfield, JBC_getstatic, JBC_goto, JBC_goto_w, JBC_i2d, JBC_i2f, JBC_i2l, JBC_iadd, JBC_iaload, JBC_iand, JBC_iastore, JBC_iconst_0, JBC_iconst_1, JBC_iconst_2, JBC_iconst_3, JBC_iconst_4, JBC_iconst_5, JBC_iconst_m1, JBC_idiv, JBC_if_acmpeq, JBC_if_acmpne, JBC_if_icmpeq, JBC_if_icmpge, JBC_if_icmpgt, JBC_if_icmple, JBC_if_icmplt, JBC_if_icmpne, JBC_ifeq, JBC_ifge, JBC_ifgt, JBC_ifle, JBC_iflt, JBC_ifne, JBC_ifnonnull, JBC_ifnull, JBC_iinc, JBC_iload, JBC_iload_0, JBC_iload_1, JBC_iload_2, JBC_iload_3, JBC_impdep1, JBC_impdep2, JBC_imul, JBC_ineg, JBC_instanceof, JBC_int2byte, JBC_int2char, JBC_int2short, JBC_invokeinterface, JBC_invokespecial, JBC_invokestatic, JBC_invokevirtual, JBC_ior, JBC_irem, JBC_ireturn, JBC_ishl, JBC_ishr, JBC_istore, JBC_istore_0, JBC_istore_1, JBC_istore_2, JBC_istore_3, JBC_isub, JBC_iushr, JBC_ixor, JBC_jsr, JBC_jsr_w, JBC_l2d, JBC_l2f, JBC_l2i, JBC_ladd, JBC_laload, JBC_land, JBC_lastore, JBC_lcmp, JBC_lconst_0, JBC_lconst_1, JBC_ldc, JBC_ldc_w, JBC_ldc2_w, JBC_ldiv, JBC_length, JBC_lload, JBC_lload_0, JBC_lload_1, JBC_lload_2, JBC_lload_3, JBC_lmul, JBC_lneg, JBC_lookupswitch, JBC_lor, JBC_lrem, JBC_lreturn, JBC_lshl, JBC_lshr, JBC_lstore, JBC_lstore_0, JBC_lstore_1, JBC_lstore_2, JBC_lstore_3, JBC_lsub, JBC_lushr, JBC_lxor, JBC_monitorenter, JBC_monitorexit, JBC_multianewarray, JBC_name, JBC_new, JBC_newarray, JBC_nop, JBC_pop, JBC_pop2, JBC_putfield, JBC_putstatic, JBC_ret, JBC_return, JBC_saload, JBC_sastore, JBC_sipush, JBC_swap, JBC_tableswitch, JBC_wide, JBC_xxxunusedxxx -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidClear all optional cached data associated with this class.booleanprotected ShrikeBTMethod.BytecodeInfointgetBytecodeIndex(int instructionIndex) Return the program counter (bytecode index) for a particular Shrike instruction index.protected abstract byte[]Method getBytecodeStream.Clients should not modify the returned array.protected abstract String[]Return the object that represents the declaring class for this member.something like: (IILjava.lang.String;SLjava.sql.Date;)Ljava.lang.Integer;ExceptionHandler[][]intgetInstructionIndex(int bcIndex) Return the Shrike instruction index for a particular valid program counter (bytecode index), or -1 if the Shrike instruction index could not be determined.intgetLineNumber(int bcIndex) abstract StringgetLocalVariableName(int bcIndex, int localNumber) abstract intabstract intprotected abstract Stringprotected abstract Stringprotected abstract intgetName()intMethod getNumberOfParameters.intReturn the number of Shrike instructions for this method.getParameterSourcePosition(int paramNum) getParameterType(int i) By convention, for a non-static method, getParameterType(0) is the this pointersomething like: foo(Ljava/langString;)Ljava/lang/Class;something like: com.foo.bar.createLargeOrder(IILjava.lang.String;SLjava.sql.Date;)Ljava.lang.Integer;getSourcePosition(int bcIndex) abstract booleaninthashCode()abstract booleanbooleanbooleanIs this method abstract?booleanbooleanisBridge()Is this method a bridge method? See JLS 3rd Edition 15.12.4.5booleanisClinit()Is this method a class initializer?booleanisEnum()booleanisFinal()Is this method final?booleanisInit()Is this method an object initializer?booleanisModule()booleanisNative()Is this method native?booleanIs this method private?booleanIs this method protected?booleanisPublic()Is this method public?booleanisStatic()Is this member static?booleanIs this method synchronized?booleanIs this method synthetic, i.e., compiler-generated (this refers to the synthetic flag in java/dex bytecode)booleanIs the implementation of this method a model generated by WALA? For compiler-generated synthetic methods, refer toIMethod.isSynthetic()protected abstract DecoderFind the decoder object for this method, or create one if necessary.protected abstract voidWalk through the bytecodes and collect trivial information.toString()Methods inherited from interface IClassHierarchyDweller
getClassHierarchyMethods inherited from interface IMember
getAnnotationsMethods inherited from interface IMethod
getNumberOfDefaultParameters, getReturnType
-
Field Details
-
declaringClass
A wrapper around the declaring class.
-
-
Constructor Details
-
ShrikeBTMethod
-
-
Method Details
-
getBCInfo
- Throws:
InvalidClassFileException
-
getBytecodeIndex
Return the program counter (bytecode index) for a particular Shrike instruction index.- Throws:
InvalidClassFileException
-
getInstructionIndex
Return the Shrike instruction index for a particular valid program counter (bytecode index), or -1 if the Shrike instruction index could not be determined.This ShrikeBTMethod must not be native.
- Throws:
InvalidClassFileException
-
getNumShrikeInstructions
Return the number of Shrike instructions for this method.- Throws:
InvalidClassFileException
-
getCallSites
- Throws:
InvalidClassFileException
-
getNewSites
- Throws:
InvalidClassFileException
-
getImplicitExceptionTypes
- Returns:
Set<TypeReference>, the exceptions that statements in this method may throw,- Throws:
InvalidClassFileException
-
hasMonitorOp
- Returns:
- true iff this method has a monitorenter or monitorexit
- Throws:
InvalidClassFileException
-
getFieldsWritten
- Returns:
- Set of FieldReference
- Throws:
InvalidClassFileException
-
getFieldsRead
- Returns:
- Iterator of FieldReference
- Throws:
InvalidClassFileException
-
getArraysRead
- Returns:
- Iterator of TypeReference
- Throws:
InvalidClassFileException
-
getArraysWritten
- Returns:
- Iterator of TypeReference
- Throws:
InvalidClassFileException
-
getCastTypes
- Returns:
- Iterator of TypeReference
- Throws:
InvalidClassFileException
-
getBytecodes
protected abstract byte[] getBytecodes() -
getBytecodeStream
Method getBytecodeStream.- Returns:
- the bytecode stream for this method, or null if no bytecodes.
-
getMethodName
- Throws:
InvalidClassFileException
-
getMethodSignature
- Throws:
InvalidClassFileException
-
getReference
- Specified by:
getReferencein interfaceIMethod- Returns:
- canonical MethodReference corresponding to this method
-
isClinit
-
isInit
-
getModifiers
protected abstract int getModifiers() -
isNative
-
isAbstract
public boolean isAbstract()Description copied from interface:IMethodIs this method abstract?- Specified by:
isAbstractin interfaceIMethod
-
isPrivate
-
isProtected
public boolean isProtected()Description copied from interface:IMethodIs this method protected?- Specified by:
isProtectedin interfaceIMethod
-
isPublic
-
isFinal
-
isBridge
-
isSynchronized
public boolean isSynchronized()Description copied from interface:IMethodIs this method synchronized?- Specified by:
isSynchronizedin interfaceIMethod
-
isStatic
-
isSynthetic
public boolean isSynthetic()Description copied from interface:IMethodIs this method synthetic, i.e., compiler-generated (this refers to the synthetic flag in java/dex bytecode)- Specified by:
isSyntheticin interfaceIMethod
-
isAnnotation
public boolean isAnnotation()- Specified by:
isAnnotationin interfaceIMethod
-
isEnum
-
isModule
-
isWalaSynthetic
public boolean isWalaSynthetic()Description copied from interface:IMethodIs the implementation of this method a model generated by WALA? For compiler-generated synthetic methods, refer toIMethod.isSynthetic()- Specified by:
isWalaSyntheticin interfaceIMethod
-
getDeclaringClass
Description copied from interface:IMemberReturn the object that represents the declaring class for this member.- Specified by:
getDeclaringClassin interfaceIMember- Returns:
- the object that represents the declaring class for this member.
-
makeDecoder
Find the decoder object for this method, or create one if necessary.- Returns:
- null if the method has no code.
-
processDebugInfo
protected abstract void processDebugInfo(ShrikeBTMethod.BytecodeInfo bcInfo) throws InvalidClassFileException Walk through the bytecodes and collect trivial information.- Throws:
InvalidClassFileException
-
toString
-
equals
-
hashCode
-
getMaxLocals
public abstract int getMaxLocals()- See Also:
-
getMaxStackHeight
public abstract int getMaxStackHeight() -
getName
-
getDescriptor
Description copied from interface:IMethodsomething like: (IILjava.lang.String;SLjava.sql.Date;)Ljava.lang.Integer;- Specified by:
getDescriptorin interfaceIMethod
-
getInstructions
- Throws:
InvalidClassFileException
-
getHandlers
- Throws:
InvalidClassFileException
-
getParameterType
By convention, for a non-static method, getParameterType(0) is the this pointer- Specified by:
getParameterTypein interfaceIMethod
-
getNumberOfParameters
public int getNumberOfParameters()Method getNumberOfParameters. This result includes the "this" pointer if applicable- Specified by:
getNumberOfParametersin interfaceIMethod- Returns:
- int
-
hasExceptionHandler
public abstract boolean hasExceptionHandler()- Specified by:
hasExceptionHandlerin interfaceIMethod- Returns:
- true iff this method has at least one exception handler
-
getDeclaredExceptions
Clients should not modify the returned array. TODO: clone to avoid the problem?- Specified by:
getDeclaredExceptionsin interfaceIMethod- Returns:
- an array of the exception types declared by the throws clause for this method, or null if there are none
- Throws:
InvalidClassFileException
-
getDeclaredExceptionTypeNames
- Throws:
InvalidClassFileException
-
getSourcePosition
- Specified by:
getSourcePositionin interfaceIMethod- Throws:
InvalidClassFileException
-
getParameterSourcePosition
public IMethod.SourcePosition getParameterSourcePosition(int paramNum) throws InvalidClassFileException - Specified by:
getParameterSourcePositionin interfaceIMethod- Throws:
InvalidClassFileException
-
getLineNumber
public int getLineNumber(int bcIndex) - Specified by:
getLineNumberin interfaceIMethod- Returns:
- the source line number corresponding to a particular bytecode index, or -1 if the information is not available.
-
getCaughtExceptionTypes
- Returns:
Set<TypeReference>- Throws:
InvalidClassFileException
-
getSignature
Description copied from interface:IMethodsomething like: com.foo.bar.createLargeOrder(IILjava.lang.String;SLjava.sql.Date;)Ljava.lang.Integer;- Specified by:
getSignaturein interfaceIMethod
-
getSelector
Description copied from interface:IMethodsomething like: foo(Ljava/langString;)Ljava/lang/Class;- Specified by:
getSelectorin interfaceIMethod
-
getLocalVariableName
- Specified by:
getLocalVariableNamein interfaceIMethod- Returns:
- the (source code) name of the local variable of a given number at the specified program counter, or null if the information is not available.
-
hasLocalVariableTable
public abstract boolean hasLocalVariableTable()- Specified by:
hasLocalVariableTablein interfaceIMethod- Returns:
- true iff the local variable table information for this method is available
-
clearCaches
public void clearCaches()Clear all optional cached data associated with this class.
-