Package sootup.java.core
Class JavaIdentifierFactory
java.lang.Object
sootup.java.core.JavaIdentifierFactory
- All Implemented Interfaces:
IdentifierFactory
- Direct Known Subclasses:
JavaModuleIdentifierFactory
The Java-specific implementation of
IdentifierFactory. Should not be used for other
languages.-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final @NonNull com.google.common.cache.Cache<String,JavaClassType> Caches class typesprotected final @NonNull com.google.common.cache.Cache<String,PackageName> Caches the created PackageNames for packages.protected final @NonNull Map<String,PrimitiveType> static final @NonNull MethodSubSignature -
Method Summary
Modifier and TypeMethodDescription@NonNull Collection<PrimitiveType>getArrayType(Type baseType, int dim) Gets the array type.@NonNull JavaClassTypegetBoxedType(@NonNull PrimitiveType primitiveType) getClassType(String fullyQualifiedClassName) Always creates a new ClassSignature.getClassType(String className, String packageName) Always creates a new ClassSignature.@NonNull FieldSignaturegetFieldSignature(@NonNull ClassType declaringClassSignature, @NonNull FieldSubSignature subSignature) Gets the field signature.getFieldSignature(String fieldName, ClassType declaringClassSignature, String fieldType) Gets the field signature.getFieldSignature(String fieldName, ClassType declaringClassSignature, Type fieldType) Gets the field signature.@NonNull FieldSubSignaturegetFieldSubSignature(@NonNull String name, @NonNull Type type) Gets the field sub signature.static JavaIdentifierFactory@NonNull MethodSignaturegetMethodSignature(@NonNull ClassType declaringClassSignature, @NonNull MethodSubSignature subSignature) Gets the method signature.getMethodSignature(String fullyQualifiedNameDeclClass, String methodName, String fqReturnType, List<String> parameters) Always creates a new MethodSignature AND a new ClassSignature.getMethodSignature(ClassType declaringClassSignature, String methodName, String fqReturnType, List<String> parameters) Always creates a new MethodSignature reusing the given ClassSignature.getMethodSignature(ClassType declaringClassSignature, String methodName, Type fqReturnType, List<Type> parameters) Gets the method signature.@NonNull MethodSubSignaturegetMethodSubSignature(@NonNull String name, @NonNull Type returnType, @NonNull Iterable<? extends Type> parameterSignatures) Gets the method sub signature.getPackageName(@NonNull String packageName) Returns a unique PackageName.@NonNull Optional<PrimitiveType>getPrimitiveType(@NonNull String typeName) Gets the primitive type.getStaticInitializerSignature(ClassType declaringClassSignature) Gets the static initializer method signature.booleanisConstructorSignature(@NonNull MethodSignature methodSignature) booleanisConstructorSubSignature(@NonNull MethodSubSignature methodSubSignature) booleanisMainSubSignature(@NonNull MethodSubSignature methodSubSignature) booleanisStaticInitializerSubSignature(@NonNull MethodSubSignature methodSubSignature) @NonNull FieldSignatureparseFieldSignature(@NonNull String fieldSignature) Parses aMethodSignatureeither from a Soot or from a JavaDoc-like signature specification.@NonNull FieldSubSignatureparseFieldSubSignature(@NonNull String subSignature) Parses aFieldSubSignatureeither from a Soot or from a JavaDoc-like signature specification.@NonNull MethodSignatureparseMethodSignature(@NonNull String methodSignature) Parses aMethodSignatureeither from a Soot or from a JavaDoc-like signature specification.@NonNull MethodSubSignatureparseMethodSubSignature(@NonNull String subSignature) Parses aMethodSubSignatureeither from a Soot or from a JavaDoc-like signature specification.
-
Field Details
-
STATIC_INITIALIZER
-
packageCache
Caches the created PackageNames for packages. -
classTypeCache
Caches class types -
primitiveTypeMap
-
-
Method Details
-
getInstance
-
getClassType
Always creates a new ClassSignature. In opposite to PackageSignatures, ClassSignatures are not cached because the are unique per class, and thus reusing them does not make sense.- Specified by:
getClassTypein interfaceIdentifierFactory- Parameters:
className- the simple class namepackageName- the Java package name; must not be null use empty string for the default packagePackageName.DEFAULT_PACKAGEthe Java package name- Returns:
- a ClassSignature for a Java class
- Throws:
NullPointerException- if the given package name is null. Use the empty string to denote the default package.
-
getClassType
Always creates a new ClassSignature.- Specified by:
getClassTypein interfaceIdentifierFactory- Parameters:
fullyQualifiedClassName- the fully-qualified name of the class- Returns:
- a ClassSignature for a Java Class
-
getType
- Specified by:
getTypein interfaceIdentifierFactory- Parameters:
typeDesc- the fully-qualified name of the class or for primitives its simple name, e.g., int, null, void, ...- Returns:
- the type signature
-
getPrimitiveType
Description copied from interface:IdentifierFactoryGets the primitive type.- Specified by:
getPrimitiveTypein interfaceIdentifierFactory- Parameters:
typeName- the type name- Returns:
- the primitive type
-
getAllPrimitiveTypes
-
getBoxedType
- Specified by:
getBoxedTypein interfaceIdentifierFactory
-
getArrayType
Description copied from interface:IdentifierFactoryGets the array type.- Specified by:
getArrayTypein interfaceIdentifierFactory- Parameters:
baseType- the base typedim- the dim- Returns:
- the array type
-
getPackageName
Returns a unique PackageName. The method looks up a cache if it already contains a signature with the given package name. If the cache lookup fails a new signature is created.- Specified by:
getPackageNamein interfaceIdentifierFactory- Parameters:
packageName- the Java package name; must not be null use empty string for the default packagePackageName.DEFAULT_PACKAGE- Returns:
- a PackageName
- Throws:
NullPointerException- if the given package name is null. Use the empty string to denote the default package.
-
getMethodSignature
public MethodSignature getMethodSignature(String fullyQualifiedNameDeclClass, String methodName, String fqReturnType, List<String> parameters) Always creates a new MethodSignature AND a new ClassSignature.- Specified by:
getMethodSignaturein interfaceIdentifierFactory- Parameters:
fullyQualifiedNameDeclClass- the fully-qualified name of the declaring classmethodName- the method's namefqReturnType- the fully-qualified name of the return type or a primitive's nameparameters- the methods parameters fully-qualified name or a primitive's name- Returns:
- a MethodSignature
-
getMethodSignature
public MethodSignature getMethodSignature(ClassType declaringClassSignature, String methodName, String fqReturnType, List<String> parameters) Always creates a new MethodSignature reusing the given ClassSignature.- Specified by:
getMethodSignaturein interfaceIdentifierFactory- Parameters:
declaringClassSignature- the ClassSignature of the declaring classmethodName- the method's namefqReturnType- the fully-qualified name of the return type or a primitive's nameparameters- the methods parameters fully-qualified name or a primitive's name- Returns:
- a MethodSignature
-
getMethodSignature
public MethodSignature getMethodSignature(ClassType declaringClassSignature, String methodName, Type fqReturnType, List<Type> parameters) Description copied from interface:IdentifierFactoryGets the method signature.- Specified by:
getMethodSignaturein interfaceIdentifierFactory- Parameters:
declaringClassSignature- the declaring class signaturemethodName- the method namefqReturnType- the fq return typeparameters- the parameters- Returns:
- the method signature
-
getMethodSignature
public @NonNull MethodSignature getMethodSignature(@NonNull ClassType declaringClassSignature, @NonNull MethodSubSignature subSignature) Description copied from interface:IdentifierFactoryGets the method signature.- Specified by:
getMethodSignaturein interfaceIdentifierFactory- Parameters:
declaringClassSignature- the declaring class signaturesubSignature- the sub signature- Returns:
- the method signature
-
parseMethodSignature
Parses aMethodSignatureeither from a Soot or from a JavaDoc-like signature specification.Soot syntax:
<CLASS: RETURNTYPE METHOD(PARAM1, PARAM2, PARAM3)>JavaDoc-like syntax:
CLASS#METHOD(PARAM1, PARAM2, PARAM3): RETURNTYPESoot syntax examples:
<de.upb.sootup.signatures.Remove: de.upb.sootup.signatures.MethodSignature parseMethodSignature(java.lang.String)> <de.upb.sootup.signatures.Remove: de.upb.sootup.signatures.MethodSignature getMethodSignature(java.lang.String, de.upb.sootup.types.JavaClassType)>JavaDoc-like syntax examples:
de.upb.sootup.signatures.Remove#parseMethodSignature(java.lang.String): de.upb.sootup.signatures.MethodSignature de.upb.sootup.signatures.Remove#getMethodSignature(java.lang.String, de.upb.sootup.types.JavaClassType): de.upb.sootup.signatures.MethodSignature- Specified by:
parseMethodSignaturein interfaceIdentifierFactory- Parameters:
methodSignature- A Soot- or JavaDoc-like method signature.- Returns:
- The parsed
MethodSignature.
-
getMethodSubSignature
public @NonNull MethodSubSignature getMethodSubSignature(@NonNull String name, @NonNull Type returnType, @NonNull Iterable<? extends Type> parameterSignatures) Description copied from interface:IdentifierFactoryGets the method sub signature.- Specified by:
getMethodSubSignaturein interfaceIdentifierFactory- Parameters:
name- the namereturnType- the return typeparameterSignatures- the parameter signatures- Returns:
- the method sub signature
-
parseMethodSubSignature
Parses aMethodSubSignatureeither from a Soot or from a JavaDoc-like signature specification.Soot syntax:
<RETURNTYPE METHOD(PARAM1, PARAM2, PARAM3)>JavaDoc-like syntax:
#METHOD(PARAM1, PARAM2, PARAM3): RETURNTYPESoot syntax examples:
>de.upb.sootup.signatures.MethodSignature parseMethodSignature(java.lang.String)> >de.upb.sootup.signatures.MethodSignature getMethodSignature(java.lang.String, de.upb.sootup.types.JavaClassType)>JavaDoc-like syntax examples:
#parseMethodSignature(java.lang.String): de.upb.sootup.signatures.MethodSignature #getMethodSignature(java.lang.String, de.upb.sootup.types.JavaClassType): de.upb.sootup.signatures.MethodSignature- Specified by:
parseMethodSubSignaturein interfaceIdentifierFactory- Parameters:
subSignature- A Soot- or Kotlin-like method sub-signature.- Returns:
- The parsed
MethodSubSignature.
-
parseFieldSignature
Parses aMethodSignatureeither from a Soot or from a JavaDoc-like signature specification.Soot syntax:
<CLASS: TYPE FIELD>JavaDoc-like syntax:
CLASS#FIELD: TYPESoot syntax examples:
<de.upb.sootup.signatures.Remove: de.upb.sootup.signatures.Remove INSTANCE>JavaDoc-like syntax examples:
de.upb.sootup.signatures.Remove#INSTANCE: de.upb.sootup.signatures.Remove- Specified by:
parseFieldSignaturein interfaceIdentifierFactory- Parameters:
fieldSignature- A Soot- or JavaDoc-like field signature.- Returns:
- The parsed
MethodSignature.
-
getFieldSignature
public FieldSignature getFieldSignature(String fieldName, ClassType declaringClassSignature, String fieldType) Description copied from interface:IdentifierFactoryGets the field signature.- Specified by:
getFieldSignaturein interfaceIdentifierFactory- Parameters:
fieldName- the field namedeclaringClassSignature- the declaring class signaturefieldType- the field type- Returns:
- the field signature
-
getFieldSignature
public FieldSignature getFieldSignature(String fieldName, ClassType declaringClassSignature, Type fieldType) Description copied from interface:IdentifierFactoryGets the field signature.- Specified by:
getFieldSignaturein interfaceIdentifierFactory- Parameters:
fieldName- the field namedeclaringClassSignature- the declaring class signaturefieldType- the field type- Returns:
- the field signature
-
getFieldSignature
public @NonNull FieldSignature getFieldSignature(@NonNull ClassType declaringClassSignature, @NonNull FieldSubSignature subSignature) Description copied from interface:IdentifierFactoryGets the field signature.- Specified by:
getFieldSignaturein interfaceIdentifierFactory- Parameters:
declaringClassSignature- the declaring class signaturesubSignature- the sub signature- Returns:
- the field signature
-
getFieldSubSignature
Description copied from interface:IdentifierFactoryGets the field sub signature.- Specified by:
getFieldSubSignaturein interfaceIdentifierFactory- Parameters:
name- the nametype- the type- Returns:
- the field sub signature
-
parseFieldSubSignature
Parses aFieldSubSignatureeither from a Soot or from a JavaDoc-like signature specification.Soot syntax:
<TYPE FIELD>JavaDoc-like syntax:
#FIELD: TYPESoot syntax example:
<de.upb.sootup.signatures.Remove INSTANCE>JavaDoc-like syntax example:
#INSTANCE: de.upb.sootup.signatures.Remove- Specified by:
parseFieldSubSignaturein interfaceIdentifierFactory- Parameters:
subSignature- A Soot- or Kotlin-like method sub-signature.- Returns:
- The parsed
FieldSubSignature.
-
getStaticInitializerSignature
Description copied from interface:IdentifierFactoryGets the static initializer method signature.- Specified by:
getStaticInitializerSignaturein interfaceIdentifierFactory- Parameters:
declaringClassSignature- the declaring class signature- Returns:
- the static initializer method signature
-
isStaticInitializerSubSignature
- Specified by:
isStaticInitializerSubSignaturein interfaceIdentifierFactory
-
isConstructorSignature
- Specified by:
isConstructorSignaturein interfaceIdentifierFactory
-
isConstructorSubSignature
- Specified by:
isConstructorSubSignaturein interfaceIdentifierFactory
-
isMainSubSignature
- Specified by:
isMainSubSignaturein interfaceIdentifierFactory
-