Package proguard.classfile
Class MethodSignature
java.lang.Object
proguard.classfile.Signature
proguard.classfile.MethodSignature
- All Implemented Interfaces:
Comparable<Signature>,MethodInfo
Represents a Method signature containing a class, method and a descriptor.
In order to avoid a huge blow-up in memory consumption for analyses that rely heavily on
method signatures, e.g. the creation of a call graph, this class provides the ability to cache
signatures belonging to concrete Method objects. By using the corresponding computeIfAbsent(Clazz, Method) method, the amount of strings that need to be retained during
runtime is reduced.
-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal @Nullable MethodDescriptorfinal @Nullable Stringstatic final MethodSignature -
Constructor Summary
ConstructorsConstructorDescriptionMethodSignature(@NotNull Clazz clazz) MethodSignature(@NotNull Clazz clazz, @NotNull Method method) MethodSignature(@Nullable String className) MethodSignature(@Nullable String internalClassName, @Nullable String method, @Nullable String descriptor) MethodSignature(@Nullable String internalClassName, @Nullable String method, @Nullable MethodDescriptor descriptor) -
Method Summary
Modifier and TypeMethodDescriptionprotected Stringprotected Stringstatic voidRemove all currently cachedMethodSignatureobjects from the cache, allowing them to be removed by the garbage collector.static MethodSignaturecomputeIfAbsent(Clazz clazz, Method method) Get the singletonMethodSignatureobject for this specificMethod.boolean@Nullable MethodDescriptorReturns the method's descriptor.@Nullable StringReturns the method's name.Returns theMethodreference that corresponds to the method represented by thisMethodSignatureornullif no reference is available (e.g.booleanCheck if this signature is missing information.static booleanmatchesIgnoreNull(MethodSignature signature, MethodSignature wildcard) Fuzzy check if twoMethodSignatureobjects are equal.static booleanmatchesIgnoreNullAndDollar(MethodSignature signature, MethodSignature wildcard) Fuzzy check like {@link .matchesIgnoreNull(MethodSignature)} but allows dollar signs in type strings.Methods inherited from class proguard.classfile.Signature
compareTo, computeIfAbsent, getClassName, getExternalPackageName, getFqn, getPackageName, getPrettyFqn, getReferencedClass, hashCode, of, setCacheEnabled, toString
-
Field Details
-
UNKNOWN
-
method
-
descriptor
-
-
Constructor Details
-
MethodSignature
public MethodSignature(@Nullable @Nullable String internalClassName, @Nullable @Nullable String method, @Nullable @Nullable MethodDescriptor descriptor) -
MethodSignature
-
MethodSignature
-
MethodSignature
-
MethodSignature
-
-
Method Details
-
getReferencedMethod
Returns theMethodreference that corresponds to the method represented by thisMethodSignatureornullif no reference is available (e.g. the methhod or its class were missing). -
computeIfAbsent
Get the singletonMethodSignatureobject for this specificMethod. If it is not yet available in the cache, it will be newly instantiated.- Parameters:
clazz- The class containing the target methodmethod- The method whose signature is to be generated- Returns:
- The cached or newly generated
MethodSignatureobject
-
isIncomplete
public boolean isIncomplete()Description copied from class:SignatureCheck if this signature is missing information.- Specified by:
isIncompletein classSignature
-
calculateFqn
- Specified by:
calculateFqnin classSignature
-
calculatePrettyFqn
- Specified by:
calculatePrettyFqnin classSignature
-
clearCache
public static void clearCache()Remove all currently cachedMethodSignatureobjects from the cache, allowing them to be removed by the garbage collector. -
matchesIgnoreNull
Fuzzy check if twoMethodSignatureobjects are equal. If any pattern field is null, its value in the matched object does not influence the check result, providing a way to create a wildcardMethodSignaturethat e.g. matches several methods of a class that have the same name but a differentMethodDescriptor.- Parameters:
signature- TheMethodSignatureto be comparedwildcard- TheMethodSignaturepattern to be matched against- Returns:
- true if the two objects match
-
matchesIgnoreNullAndDollar
public static boolean matchesIgnoreNullAndDollar(MethodSignature signature, MethodSignature wildcard) Fuzzy check like {@link .matchesIgnoreNull(MethodSignature)} but allows dollar signs in type strings. Usually the notation for inner classes iscom/example/Foo$Bar, but sometimes external systems call this classcom/example/Foo/Bar. These two names correspond to the same class and thus should be treated as the same if they appear in aMethodSignature. If it is to be expected that this situation may occur, this method should be preferred over {@link .matchesIgnoreNull(MethodSignature)} to avoid false negatives.- Parameters:
signature- TheMethodSignatureto be comparedwildcard- TheMethodSignaturepattern to be matched against- Returns:
- true if the two objects match
-
equals
-
getMethodName
Description copied from interface:MethodInfoReturns the method's name.- Specified by:
getMethodNamein interfaceMethodInfo
-
getDescriptor
Description copied from interface:MethodInfoReturns the method's descriptor.- Specified by:
getDescriptorin interfaceMethodInfo
-