Class MethodSignature

  • All Implemented Interfaces:
    java.lang.Comparable<Signature>, MethodInfo

    public class MethodSignature
    extends Signature
    implements 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 Detail

      • method

        @Nullable
        public final @Nullable java.lang.String method
    • Constructor Detail

      • MethodSignature

        public MethodSignature​(@Nullable
                               @Nullable java.lang.String internalClassName,
                               @Nullable
                               @Nullable java.lang.String method,
                               @Nullable
                               @Nullable MethodDescriptor descriptor)
      • MethodSignature

        public MethodSignature​(@Nullable
                               @Nullable java.lang.String internalClassName,
                               @Nullable
                               @Nullable java.lang.String method,
                               @Nullable
                               @Nullable java.lang.String descriptor)
      • MethodSignature

        public MethodSignature​(@NotNull
                               @NotNull Clazz clazz,
                               @NotNull
                               @NotNull Method method)
      • MethodSignature

        public MethodSignature​(@NotNull
                               @NotNull Clazz clazz)
      • MethodSignature

        public MethodSignature​(@Nullable
                               @Nullable java.lang.String className)
    • Method Detail

      • getReferencedMethod

        public Method getReferencedMethod()
        Returns the Method reference that corresponds to the method represented by this MethodSignature or null if no reference is available (e.g. the methhod or its class were missing).
      • computeIfAbsent

        public static MethodSignature computeIfAbsent​(Clazz clazz,
                                                      Method method)
        Get the singleton MethodSignature object for this specific Method. If it is not yet available in the cache, it will be newly instantiated.
        Parameters:
        clazz - The class containing the target method
        method - The method whose signature is to be generated
        Returns:
        The cached or newly generated MethodSignature object
      • isIncomplete

        public boolean isIncomplete()
        Description copied from class: Signature
        Check if this signature is missing information.
        Specified by:
        isIncomplete in class Signature
      • calculateFqn

        protected java.lang.String calculateFqn()
        Specified by:
        calculateFqn in class Signature
      • clearCache

        public static void clearCache()
        Remove all currently cached MethodSignature objects from the cache, allowing them to be removed by the garbage collector.
      • matchesIgnoreNull

        public static boolean matchesIgnoreNull​(MethodSignature signature,
                                                MethodSignature wildcard)
        Fuzzy check if two MethodSignature objects 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 wildcard MethodSignature that e.g. matches several methods of a class that have the same name but a different MethodDescriptor.
        Parameters:
        signature - The MethodSignature to be compared
        wildcard - The MethodSignature pattern 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 is com/example/Foo$Bar, but sometimes external systems call this class com/example/Foo/Bar. These two names correspond to the same class and thus should be treated as the same if they appear in a MethodSignature. 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 - The MethodSignature to be compared
        wildcard - The MethodSignature pattern to be matched against
        Returns:
        true if the two objects match
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class Signature
      • getMethodName

        @Nullable
        public @Nullable java.lang.String getMethodName()
        Description copied from interface: MethodInfo
        Returns the method's name.
        Specified by:
        getMethodName in interface MethodInfo