Class ClassItem


  • public class ClassItem
    extends java.lang.Object
    Wrapper for field or method information. Provides the information needed for access to either existing or added methods in existing classes.
    Author:
    Dennis M. Sosnoski
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.String[] m_argTypes
      Argument types for method.
      private ClassFile m_classFile
      Owning class information.
      private FieldOrMethod m_item
      Wrapped existing item.
      private java.lang.String m_name
      Item name.
      private java.lang.String[] m_parmNames
      Parameter names for method (null if not yet found).
      private java.lang.String m_signature
      Encoded signature.
      private java.lang.String m_typeName
      Fully qualified class name of item type.
      private static java.util.HashMap s_primitiveMap
      Map for primitive type signature variants.
      private static java.util.HashMap s_signatureParamsMap
      Map from method signature to array of argument types.
      private static java.util.HashMap s_signatureTypeMap
      Map from method signature to return type.
      private static java.util.HashMap s_typeMap
      Map from type name to BCEL type.
      private static byte SIGNATURE_ATTRIBUTE_TAG
      Tag value for signature attribute.
    • Constructor Summary

      Constructors 
      Constructor Description
      ClassItem​(java.lang.String name, ClassFile cf, FieldOrMethod item)
      Constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static ClassItem findStaticMethod​(java.lang.String name, java.lang.String[] sigs)
      Get static method by fully qualified name.
      static ClassItem findVirtualMethod​(java.lang.String name, java.lang.String[] sigs)
      Get virtual method by fully qualified name.
      int getAccessFlags()
      Get access flags.
      int getArgumentCount()
      Get number of arguments for method.
      java.lang.String getArgumentType​(int index)
      Get argument type as fully qualified class name.
      java.lang.String[] getArgumentTypes()
      Get argument types as array of fully qualified class names.
      ClassFile getClassFile()
      Get owning class information.
      java.lang.String[] getExceptions()
      Get names of exceptions thrown by method.
      java.lang.String getFullName()
      Get fully-qualified class and method name.
      java.lang.String getGenericsSignature()
      Get the generics signature information for item.
      java.lang.String getName()
      Get item name.
      java.lang.String getParameterName​(int index)
      Get method parameter name.
      static java.lang.String[] getParametersFromSignature​(java.lang.String sig)
      Get parameter type names from method signature.
      static java.lang.String getPrimitiveSignature​(java.lang.String type)
      Get the signature for a primitive.
      java.lang.String getSignature()
      Get method signature.
      static java.lang.String[] getSignatureVariants​(java.lang.String name)
      Get all variant signatures for a fully qualified class name.
      static java.lang.String getTypeFromSignature​(java.lang.String sig)
      Get return type names from method signature.
      java.lang.String getTypeName()
      Get item type as fully qualified class name.
      static boolean isAssignable​(java.lang.String from, java.lang.String to)
      Check if a value of one type can be directly assigned to another type.
      boolean isInitializer()
      Check if item is an initializer.
      boolean isMethod()
      Check if item is a method.
      static boolean isPrimitive​(java.lang.String type)
      Check if type is a primitive.
      boolean isStatic()
      Check if item is a static.
      void makeAccessible​(ClassFile src)
      Make accessible item.
      void setAccessFlags​(int flags)
      Set access flags.
      static Type typeFromName​(java.lang.String name)
      Create type from name.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • SIGNATURE_ATTRIBUTE_TAG

        private static final byte SIGNATURE_ATTRIBUTE_TAG
        Tag value for signature attribute.
        See Also:
        Constant Field Values
      • s_primitiveMap

        private static java.util.HashMap s_primitiveMap
        Map for primitive type signature variants.
      • s_typeMap

        private static java.util.HashMap s_typeMap
        Map from type name to BCEL type.
      • s_signatureParamsMap

        private static java.util.HashMap s_signatureParamsMap
        Map from method signature to array of argument types.
      • s_signatureTypeMap

        private static java.util.HashMap s_signatureTypeMap
        Map from method signature to return type.
      • m_classFile

        private ClassFile m_classFile
        Owning class information.
      • m_name

        private java.lang.String m_name
        Item name.
      • m_signature

        private java.lang.String m_signature
        Encoded signature.
      • m_typeName

        private java.lang.String m_typeName
        Fully qualified class name of item type.
      • m_argTypes

        private java.lang.String[] m_argTypes
        Argument types for method.
      • m_parmNames

        private java.lang.String[] m_parmNames
        Parameter names for method (null if not yet found).
      • m_item

        private FieldOrMethod m_item
        Wrapped existing item.
    • Constructor Detail

      • ClassItem

        public ClassItem​(java.lang.String name,
                         ClassFile cf,
                         FieldOrMethod item)
        Constructor. Builds a wrapper for an item based on an existing field or method.
        Parameters:
        name - field or method name
        cf - owning class information
        item - field or method information
    • Method Detail

      • getClassFile

        public ClassFile getClassFile()
        Get owning class information.
        Returns:
        owning class information
      • getName

        public java.lang.String getName()
        Get item name.
        Returns:
        item name
      • getFullName

        public java.lang.String getFullName()
        Get fully-qualified class and method name.
        Returns:
        fully-qualified class and method name
      • getTypeName

        public java.lang.String getTypeName()
        Get item type as fully qualified class name.
        Returns:
        item type name
      • getArgumentCount

        public int getArgumentCount()
        Get number of arguments for method.
        Returns:
        argument count for method, or zero if not a method
      • getArgumentType

        public java.lang.String getArgumentType​(int index)
        Get argument type as fully qualified class name.
        Parameters:
        index - argument number
        Returns:
        argument type name
      • getParameterName

        public java.lang.String getParameterName​(int index)
        Get method parameter name.
        Parameters:
        index - parameter index
        Returns:
        parameter name
      • getArgumentTypes

        public java.lang.String[] getArgumentTypes()
        Get argument types as array of fully qualified class names.
        Returns:
        array of argument types
      • getAccessFlags

        public int getAccessFlags()
        Get access flags.
        Returns:
        flags for access type of field or method
      • setAccessFlags

        public void setAccessFlags​(int flags)
        Set access flags.
        Parameters:
        flags - access flags for field or method
      • makeAccessible

        public void makeAccessible​(ClassFile src)
        Make accessible item. Check if this field or method is accessible from another class, and if not decreases the access restrictions to make it accessible.
        Parameters:
        src - class file for required access
      • isStatic

        public boolean isStatic()
        Check if item is a static.
        Returns:
        true if a static, false if member
      • getSignature

        public java.lang.String getSignature()
        Get method signature.
        Returns:
        encoded method signature
      • isMethod

        public boolean isMethod()
        Check if item is a method.
        Returns:
        true if a method, false if a field
      • isInitializer

        public boolean isInitializer()
        Check if item is an initializer.
        Returns:
        true if an initializer, false if a field or normal method
      • getExceptions

        public java.lang.String[] getExceptions()
        Get names of exceptions thrown by method.
        Returns:
        array of exceptions thrown by method, or null if a field
      • getGenericsSignature

        public java.lang.String getGenericsSignature()
        Get the generics signature information for item.
        Returns:
        generics signature (null if none)
      • isPrimitive

        public static boolean isPrimitive​(java.lang.String type)
        Check if type is a primitive.
        Parameters:
        type -
        Returns:
        true if a primitive, false if not
      • getPrimitiveSignature

        public static java.lang.String getPrimitiveSignature​(java.lang.String type)
        Get the signature for a primitive.
        Parameters:
        type -
        Returns:
        signature for a primitive type
      • getParametersFromSignature

        public static java.lang.String[] getParametersFromSignature​(java.lang.String sig)
        Get parameter type names from method signature.
        Parameters:
        sig - method signature to be decoded
        Returns:
        array of argument type names
      • getTypeFromSignature

        public static java.lang.String getTypeFromSignature​(java.lang.String sig)
        Get return type names from method signature.
        Parameters:
        sig - method signature to be decoded
        Returns:
        return type name
      • typeFromName

        public static Type typeFromName​(java.lang.String name)
        Create type from name.
        Parameters:
        name - fully qualified type name
        Returns:
        corresponding type
      • findVirtualMethod

        public static ClassItem findVirtualMethod​(java.lang.String name,
                                                  java.lang.String[] sigs)
                                           throws JiBXException
        Get virtual method by fully qualified name. This splits the class name from the method name, finds the class, and then tries to find a matching method name in that class or a superclass.
        Parameters:
        name - fully qualified class and method name
        sigs - possible method signatures
        Returns:
        information for the method, or null if not found
        Throws:
        JiBXException - if configuration error
      • findStaticMethod

        public static ClassItem findStaticMethod​(java.lang.String name,
                                                 java.lang.String[] sigs)
                                          throws JiBXException
        Get static method by fully qualified name. This splits the class name from the method name, finds the class, and then tries to find a matching method name in that class.
        Parameters:
        name - fully qualified class and method name
        sigs - possible method signatures
        Returns:
        information for the method, or null if not found
        Throws:
        JiBXException - if configuration error
      • getSignatureVariants

        public static java.lang.String[] getSignatureVariants​(java.lang.String name)
                                                       throws JiBXException
        Get all variant signatures for a fully qualified class name. The returned array gives all signatures (for interfaces or classes) which instances of the class can match.
        Parameters:
        name - fully qualified class name
        Returns:
        possible signature variations for instances of the class
        Throws:
        JiBXException - if configuration error
      • isAssignable

        public static boolean isAssignable​(java.lang.String from,
                                           java.lang.String to)
                                    throws JiBXException
        Check if a value of one type can be directly assigned to another type. This is basically the equivalent of the instanceof operator, but with application to primitive types as well as object types.
        Parameters:
        from - fully qualified class name of initial type
        to - fully qualified class name of assignment type
        Returns:
        true if assignable, false if not
        Throws:
        JiBXException - if configuration error