Class JavaLanguage
java.lang.Object
com.ibm.wala.classLoader.LanguageImpl
com.ibm.wala.classLoader.JavaLanguage
- All Implemented Interfaces:
BytecodeLanguage, Language, Constants
The implementation of
Language which defines Java semantics.-
Nested Class Summary
Nested Classes -
Field Summary
Fields inherited from interface Constants
ACC_ABSTRACT, ACC_ANNOTATION, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MODULE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_MethodRef, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_String, CONSTANT_Utf8, indexedTypes, indexedTypes_T, MAYBE, NO, OP_aaload, OP_aastore, OP_aconst_null, OP_aload, OP_aload_0, OP_aload_1, OP_aload_2, OP_aload_3, OP_anewarray, OP_areturn, OP_arraylength, OP_astore, OP_astore_0, OP_astore_1, OP_astore_2, OP_astore_3, OP_athrow, OP_baload, OP_bastore, OP_bipush, OP_caload, OP_castore, OP_checkcast, OP_d2f, OP_d2i, OP_d2l, OP_dadd, OP_daload, OP_dastore, OP_dcmpg, OP_dcmpl, OP_dconst_0, OP_dconst_1, OP_ddiv, OP_dload, OP_dload_0, OP_dload_1, OP_dload_2, OP_dload_3, OP_dmul, OP_dneg, OP_drem, OP_dreturn, OP_dstore, OP_dstore_0, OP_dstore_1, OP_dstore_2, OP_dstore_3, OP_dsub, OP_dup, OP_dup_x1, OP_dup_x2, OP_dup2, OP_dup2_x1, OP_dup2_x2, OP_f2d, OP_f2i, OP_f2l, OP_fadd, OP_faload, OP_fastore, OP_fcmpg, OP_fcmpl, OP_fconst_0, OP_fconst_1, OP_fconst_2, OP_fdiv, OP_fload, OP_fload_0, OP_fload_1, OP_fload_2, OP_fload_3, OP_fmul, OP_fneg, OP_frem, OP_freturn, OP_fstore, OP_fstore_0, OP_fstore_1, OP_fstore_2, OP_fstore_3, OP_fsub, OP_getfield, OP_getstatic, OP_goto, OP_goto_w, OP_i2b, OP_i2c, OP_i2d, OP_i2f, OP_i2l, OP_i2s, OP_iadd, OP_iaload, OP_iand, OP_iastore, OP_iconst_0, OP_iconst_1, OP_iconst_2, OP_iconst_3, OP_iconst_4, OP_iconst_5, OP_iconst_m1, OP_idiv, OP_if_acmpeq, OP_if_acmpne, OP_if_icmpeq, OP_if_icmpge, OP_if_icmpgt, OP_if_icmple, OP_if_icmplt, OP_if_icmpne, OP_ifeq, OP_ifge, OP_ifgt, OP_ifle, OP_iflt, OP_ifne, OP_ifnonnull, OP_ifnull, OP_iinc, OP_iload, OP_iload_0, OP_iload_1, OP_iload_2, OP_iload_3, OP_imul, OP_ineg, OP_instanceof, OP_invokedynamic, OP_invokeinterface, OP_invokespecial, OP_invokestatic, OP_invokevirtual, OP_ior, OP_irem, OP_ireturn, OP_ishl, OP_ishr, OP_istore, OP_istore_0, OP_istore_1, OP_istore_2, OP_istore_3, OP_isub, OP_iushr, OP_ixor, OP_jsr, OP_jsr_w, OP_l2d, OP_l2f, OP_l2i, OP_ladd, OP_laload, OP_land, OP_lastore, OP_lcmp, OP_lconst_0, OP_lconst_1, OP_ldc, OP_ldc_w, OP_ldc2_w, OP_ldiv, OP_lload, OP_lload_0, OP_lload_1, OP_lload_2, OP_lload_3, OP_lmul, OP_lneg, OP_lookupswitch, OP_lor, OP_lrem, OP_lreturn, OP_lshl, OP_lshr, OP_lstore, OP_lstore_0, OP_lstore_1, OP_lstore_2, OP_lstore_3, OP_lsub, OP_lushr, OP_lxor, OP_monitorenter, OP_monitorexit, OP_multianewarray, OP_new, OP_newarray, OP_nop, OP_pop, OP_pop2, OP_putfield, OP_putstatic, OP_ret, OP_return, OP_saload, OP_sastore, OP_sipush, OP_swap, OP_tableswitch, OP_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TYPE_boolean, TYPE_boolean_index, TYPE_byte, TYPE_byte_index, TYPE_char, TYPE_char_index, TYPE_Class, TYPE_double, TYPE_double_index, TYPE_Error, TYPE_Exception, TYPE_float, TYPE_float_index, TYPE_int, TYPE_int_index, TYPE_long, TYPE_long_index, TYPE_MethodHandle, TYPE_MethodType, TYPE_null, TYPE_Object, TYPE_Object_index, TYPE_RuntimeException, TYPE_short, TYPE_short_index, TYPE_String, TYPE_Throwable, TYPE_unknown, TYPE_void, YES -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic Collection<TypeReference> static Collection<TypeReference> static Collection<TypeReference> get the interfaces implemented by all arrays in the languagestatic Collection<TypeReference> static Collection<TypeReference> Given a Java constant o, return the appropriate language type to associate with the constant.static Collection<TypeReference> getFakeRootMethod(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) getInvokeMethodReference(ClassLoaderReference loader, IInvokeInstruction instruction) getMetadataToken(Object value) Get the representation of the meta-data corresponding to value.getName()What is the name of the language?static Collection<TypeReference> static Collection<TypeReference> static Collection<TypeReference> static Collection<TypeReference> getPointerType(TypeReference pointee) getPrimitive(TypeReference reference) get the abstraction of a primitive type to be used for type inferenceWhat is the root type in a type hierarchy for this language? e.g.What is the root type of exceptions in this language? e.g.inferInvokeExceptions(MethodReference target, IClassHierarchy cha) determine the set of possible exception types a call to target may throwbooleanisBooleanType(TypeReference type) booleanisCharType(TypeReference type) booleanisDoubleType(TypeReference type) booleanisFloatType(TypeReference type) booleanisIntType(TypeReference type) booleanisLongType(TypeReference type) booleanisMetadataType(TypeReference type) Is t a "metadata" type for the language, i.e., a type describing some other type (e.g., java.lang.Class for Java)?booleanisNullType(TypeReference type) Is t the type of the language's null value? Should return true ift == null(?).booleanisStringType(TypeReference type) booleanisVoidType(TypeReference type) lookupPrimitiveType(String name) Given a source-level primitive type name, get the corresponding "low-level" type name, e.g., the corresponding character to use in a Java method descriptor<T extends InstanceKey>
ModRef.ModVisitor<T, ? extends ExtendedHeapModel> makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<T> pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) <T extends InstanceKey>
ModRef.RefVisitor<T, ? extends ExtendedHeapModel> makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<T> pa, ExtendedHeapModel h) booleando MethodReference objects have declared parameter types?Methods inherited from class LanguageImpl
equals, getBaseLanguage, getDerivedLanguages, hashCode, makeInducedCFG, modelConstant, registerDerivedLanguage, toStringMethods inherited from interface Language
getBaseLanguage, getDerivedLanguages, makeInducedCFG, modelConstant, registerDerivedLanguage
-
Constructor Details
-
JavaLanguage
public JavaLanguage()
-
-
Method Details
-
getAaStoreExceptions
-
getArithmeticException
-
getArrayAccessExceptions
-
getClassCastException
-
getClassNotFoundException
-
getNewArrayExceptions
-
getNewSafeArrayExceptions
-
getNewScalarExceptions
-
getNullPointerException
-
getExceptionInInitializerError
-
getName
-
getRootType
Description copied from interface:LanguageWhat is the root type in a type hierarchy for this language? e.g. java.lang.Object in Java.- Specified by:
getRootTypein interfaceLanguage
-
getThrowableType
Description copied from interface:LanguageWhat is the root type of exceptions in this language? e.g. java.lang.Throwable in Java- Specified by:
getThrowableTypein interfaceLanguage
-
getConstantType
Description copied from interface:LanguageGiven a Java constant o, return the appropriate language type to associate with the constant. Possible types for o can be language dependent, but typically include Boolean, String, Integer, Float, etc.- Specified by:
getConstantTypein interfaceLanguage
-
isNullType
Description copied from interface:LanguageIs t the type of the language's null value? Should return true ift == null(?).- Specified by:
isNullTypein interfaceLanguage
-
getArrayInterfaces
Description copied from interface:Languageget the interfaces implemented by all arrays in the language- Specified by:
getArrayInterfacesin interfaceLanguage
-
lookupPrimitiveType
Description copied from interface:LanguageGiven a source-level primitive type name, get the corresponding "low-level" type name, e.g., the corresponding character to use in a Java method descriptor- Specified by:
lookupPrimitiveTypein interfaceLanguage
-
inferInvokeExceptions
public Collection<TypeReference> inferInvokeExceptions(MethodReference target, IClassHierarchy cha) throws InvalidClassFileException Description copied from interface:Languagedetermine the set of possible exception types a call to target may throw- Specified by:
inferInvokeExceptionsin interfaceLanguage- Returns:
Collection<TypeReference>, set of exception types a call to a declared target might throw.- Throws:
IllegalArgumentException- if target is nullIllegalArgumentException- if cha is nullInvalidClassFileException
-
getImplicitExceptionTypes
- Specified by:
getImplicitExceptionTypesin interfaceBytecodeLanguage- Parameters:
pei- a potentially-excepting instruction- Returns:
- the exception types that pei may throw, independent of the class hierarchy. null if
none.
Notes
- this method will NOT return the exception type explicitly thrown by an athrow
- this method will NOT return the exception types that a called method may throw
- this method ignores OutOfMemoryError
- this method ignores linkage errors
- this method ignores IllegalMonitorState exceptions
- Throws:
IllegalArgumentException- if pei is null
-
instructionFactory
- Specified by:
instructionFactoryin interfaceLanguage
-
isDoubleType
- Specified by:
isDoubleTypein interfaceLanguage
-
isFloatType
- Specified by:
isFloatTypein interfaceLanguage
-
isIntType
-
isLongType
- Specified by:
isLongTypein interfaceLanguage
-
isVoidType
- Specified by:
isVoidTypein interfaceLanguage
-
isMetadataType
Description copied from interface:LanguageIs t a "metadata" type for the language, i.e., a type describing some other type (e.g., java.lang.Class for Java)?- Specified by:
isMetadataTypein interfaceLanguage
-
isStringType
- Specified by:
isStringTypein interfaceLanguage
-
isBooleanType
- Specified by:
isBooleanTypein interfaceLanguage
-
isCharType
- Specified by:
isCharTypein interfaceLanguage
-
getMetadataToken
Description copied from interface:LanguageGet the representation of the meta-data corresponding to value. For example, in Java, if value represents some type, the returned object should be the correspondingTypeReference. The returned object should be appropriate for use as the token in anSSALoadMetadataInstructionfor the language- Specified by:
getMetadataTokenin interfaceLanguage
-
getPointerType
- Specified by:
getPointerTypein interfaceLanguage- Throws:
UnsupportedOperationException
-
getStringType
- Specified by:
getStringTypein interfaceLanguage
-
getPrimitive
Description copied from interface:Languageget the abstraction of a primitive type to be used for type inference- Specified by:
getPrimitivein interfaceLanguage- See Also:
-
getInvokeMethodReference
public MethodReference getInvokeMethodReference(ClassLoaderReference loader, IInvokeInstruction instruction) - Specified by:
getInvokeMethodReferencein interfaceBytecodeLanguage
-
methodsHaveDeclaredParameterTypes
public boolean methodsHaveDeclaredParameterTypes()Description copied from interface:Languagedo MethodReference objects have declared parameter types?- Specified by:
methodsHaveDeclaredParameterTypesin interfaceLanguage
-
getFakeRootMethod
public AbstractRootMethod getFakeRootMethod(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) - Specified by:
getFakeRootMethodin interfaceLanguage
-
makeRefVisitor
public <T extends InstanceKey> ModRef.RefVisitor<T, ? extends ExtendedHeapModel> makeRefVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<T> pa, ExtendedHeapModel h) - Specified by:
makeRefVisitorin interfaceLanguage
-
makeModVisitor
public <T extends InstanceKey> ModRef.ModVisitor<T, ? extends ExtendedHeapModel> makeModVisitor(CGNode n, Collection<PointerKey> result, PointerAnalysis<T> pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) - Specified by:
makeModVisitorin interfaceLanguage
-