Class MethodAnnotation

    • Field Detail

      • METHOD_DANGEROUS_TARGET_ACTUAL_GUARANTEED_NULL

        public static final java.lang.String METHOD_DANGEROUS_TARGET_ACTUAL_GUARANTEED_NULL
        See Also:
        Constant Field Values
      • METHOD_DANGEROUS_TARGET

        public static final java.lang.String METHOD_DANGEROUS_TARGET
        See Also:
        Constant Field Values
      • METHOD_RETURN_VALUE_OF

        public static final java.lang.String METHOD_RETURN_VALUE_OF
        See Also:
        Constant Field Values
      • METHOD_SAFE_TARGET

        public static final java.lang.String METHOD_SAFE_TARGET
        See Also:
        Constant Field Values
      • METHOD_EQUALS_USED

        public static final java.lang.String METHOD_EQUALS_USED
        See Also:
        Constant Field Values
      • METHOD_SUPERCLASS_CONSTRUCTOR

        public static final java.lang.String METHOD_SUPERCLASS_CONSTRUCTOR
        See Also:
        Constant Field Values
      • METHOD_CONSTRUCTOR

        public static final java.lang.String METHOD_CONSTRUCTOR
        See Also:
        Constant Field Values
      • METHOD_OVERRIDDEN

        public static final java.lang.String METHOD_OVERRIDDEN
        See Also:
        Constant Field Values
      • METHOD_DID_YOU_MEAN_TO_OVERRIDE

        public static final java.lang.String METHOD_DID_YOU_MEAN_TO_OVERRIDE
        See Also:
        Constant Field Values
      • METHOD_COMPUTED_IN

        public static final java.lang.String METHOD_COMPUTED_IN
        See Also:
        Constant Field Values
      • METHOD_ALTERNATIVE_TARGET

        public static final java.lang.String METHOD_ALTERNATIVE_TARGET
        See Also:
        Constant Field Values
    • Constructor Detail

      • MethodAnnotation

        public MethodAnnotation​(@DottedClassName
                                java.lang.String className,
                                java.lang.String methodName,
                                java.lang.String methodSig,
                                boolean isStatic)
        Constructor.
        Parameters:
        className - the name of the class containing the method
        methodName - the name of the method
        methodSig - the Java type signature of the method
        isStatic - true if the method is static, false if not
    • Method Detail

      • fromVisitedMethod

        public static MethodAnnotation fromVisitedMethod​(PreorderVisitor visitor)
        Factory method to create a MethodAnnotation from the method the given visitor is currently visiting.
        Parameters:
        visitor - the BetterVisitor currently visiting the method
      • fromCalledMethod

        public static MethodAnnotation fromCalledMethod​(DismantleBytecode visitor)
        Factory method to create a MethodAnnotation from a method called by the instruction the given visitor is currently visiting.
        Parameters:
        visitor - the visitor
        Returns:
        the MethodAnnotation representing the called method
      • fromForeignMethod

        public static MethodAnnotation fromForeignMethod​(@SlashedClassName
                                                         java.lang.String className,
                                                         java.lang.String methodName,
                                                         java.lang.String methodSig,
                                                         int accessFlags)
        Factory method to create the MethodAnnotation from the classname, method name, signature, etc. The method tries to look up source line information for the method.
        Parameters:
        className - name of the class containing the method
        methodName - name of the method
        methodSig - signature of the method
        accessFlags - the access flags of the method
        Returns:
        the MethodAnnotation
      • fromForeignMethod

        public static MethodAnnotation fromForeignMethod​(java.lang.String className,
                                                         java.lang.String methodName,
                                                         java.lang.String methodSig,
                                                         boolean isStatic)
        Factory method to create the MethodAnnotation from the classname, method name, signature, etc. The method tries to look up source line information for the method.
        Parameters:
        className - name of the class containing the method
        methodName - name of the method
        methodSig - signature of the method
        isStatic - true if the method is static, false otherwise
        Returns:
        the MethodAnnotation
      • fromCalledMethod

        public static MethodAnnotation fromCalledMethod​(java.lang.String className,
                                                        java.lang.String methodName,
                                                        java.lang.String methodSig,
                                                        boolean isStatic)
        Create a MethodAnnotation from a method that is not directly accessible. We will use the repository to try to find its class in order to populate the information as fully as possible.
        Parameters:
        className - class containing called method
        methodName - name of called method
        methodSig - signature of called method
        isStatic - true if called method is static
        Returns:
        the MethodAnnotation for the called method
      • fromXMethod

        public static MethodAnnotation fromXMethod​(XMethod xmethod)
        Create a MethodAnnotation from an XMethod.
        Parameters:
        xmethod - the XMethod
        Returns:
        the MethodAnnotation
      • fromMethodDescriptor

        public static MethodAnnotation fromMethodDescriptor​(MethodDescriptor methodDescriptor)
        Create a MethodAnnotation from a MethodDescriptor.
        Parameters:
        methodDescriptor - the MethodDescriptor
        Returns:
        the MethodAnnotation
      • getMethodName

        public java.lang.String getMethodName()
        Get the method name.
      • getJavaSourceMethodName

        public java.lang.String getJavaSourceMethodName()
      • getMethodSignature

        public java.lang.String getMethodSignature()
        Get the method type signature.
      • isStatic

        public boolean isStatic()
        Return whether or not the method is static.
        Returns:
        true if the method is static, false otherwise
      • toXMethod

        public XMethod toXMethod()
        Convert to an XMethod.
        Returns:
        an XMethod specifying the same method as this MethodAnnotation
      • accept

        public void accept​(BugAnnotationVisitor visitor)
        Description copied from interface: BugAnnotation
        Accept a BugAnnotationVisitor.
        Parameters:
        visitor - the visitor to accept
      • getNameInClass

        public java.lang.String getNameInClass​(ClassAnnotation primaryClass)
        Get the "full" method name. This is a format which looks sort of like a method signature that would appear in Java source code.
      • getSignatureInClass

        public java.lang.String getSignatureInClass​(ClassAnnotation primaryClass)
      • getNameInClass

        public java.lang.String getNameInClass​(boolean shortenPackages,
                                               boolean useJVMMethodName,
                                               boolean hash)
      • getNameInClass

        public java.lang.String getNameInClass​(boolean shortenPackages,
                                               boolean useJVMMethodName,
                                               boolean hash,
                                               boolean omitMethodName)
        Get the "full" method name. This is a format which looks sort of like a method signature that would appear in Java source code. note: If shortenPackeges==true, this will return the same value as getNameInClass(), except that method caches the result and this one does not. Calling this one may be slow.
        Parameters:
        shortenPackages - whether to shorten package names if they are in java or in the same package as this method.
      • getFullMethod

        public java.lang.String getFullMethod​(ClassAnnotation primaryClass)
        Get the "full" method name. This is a format which looks sort of like a method signature that would appear in Java source code.
      • stripJavaLang

        public java.lang.String stripJavaLang​(@DottedClassName
                                              java.lang.String className)
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

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

        public void writeXML​(XMLOutput xmlOutput)
                      throws java.io.IOException
        Description copied from interface: XMLWriteable
        Write this object to given XMLOutput.
        Parameters:
        xmlOutput - the XMLOutput for the document
        Throws:
        java.io.IOException
      • writeXML

        public void writeXML​(XMLOutput xmlOutput,
                             boolean addMessages,
                             boolean isPrimary)
                      throws java.io.IOException
        Throws:
        java.io.IOException