Class JavaClass

  • All Implemented Interfaces:
    java.lang.Cloneable, java.lang.Comparable<JavaClass>, Node

    public class JavaClass
    extends AccessFlags
    implements java.lang.Cloneable, Node, java.lang.Comparable<JavaClass>
    Represents a Java class, that is, the data structures, constant pool, fields, methods and commands contained in a Java .class file. See JVM specification for details. The intent of this class is to represent a parsed or otherwise existing class file. Those interested in programmatically generating classes should see the ClassGen class.
    See Also:
    ClassGen
    • Constructor Detail

      • JavaClass

        public JavaClass​(int classNameIndex,
                         int superclassNameIndex,
                         java.lang.String fileName,
                         int major,
                         int minor,
                         int accessFlags,
                         ConstantPool constantPool,
                         int[] interfaces,
                         Field[] fields,
                         Method[] methods,
                         Attribute[] attributes)
        Constructor gets all contents as arguments.
        Parameters:
        classNameIndex - Class name.
        superclassNameIndex - Superclass name.
        fileName - File name.
        major - Major compiler version.
        minor - Minor compiler version.
        accessFlags - Access rights defined by bit flags.
        constantPool - Array of constants.
        interfaces - Implemented interfaces.
        fields - Class fields.
        methods - Class methods.
        attributes - Class attributes.
      • JavaClass

        public JavaClass​(int classNameIndex,
                         int superclassNameIndex,
                         java.lang.String fileName,
                         int major,
                         int minor,
                         int accessFlags,
                         ConstantPool constantPool,
                         int[] interfaces,
                         Field[] fields,
                         Method[] methods,
                         Attribute[] attributes,
                         byte source)
        Constructor gets all contents as arguments.
        Parameters:
        classNameIndex - Index into constant pool referencing a ConstantClass that represents this class.
        superclassNameIndex - Index into constant pool referencing a ConstantClass that represents this class's superclass.
        fileName - File name.
        major - Major compiler version.
        minor - Minor compiler version.
        accessFlags - Access rights defined by bit flags.
        constantPool - Array of constants.
        interfaces - Implemented interfaces.
        fields - Class fields.
        methods - Class methods.
        attributes - Class attributes.
        source - Read from file or generated in memory.
    • Method Detail

      • setComparator

        public static void setComparator​(BCELComparator<JavaClass> comparator)
        Sets the comparison strategy object.
        Parameters:
        comparator - Comparison strategy object.
      • accept

        public void accept​(Visitor v)
        Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
        Specified by:
        accept in interface Node
        Parameters:
        v - Visitor object.
      • compareTo

        public int compareTo​(JavaClass obj)
        Return the natural ordering of two JavaClasses. This ordering is based on the class name
        Specified by:
        compareTo in interface java.lang.Comparable<JavaClass>
        Since:
        6.0
      • copy

        public JavaClass copy()
        Creates a deep copy of this class.
        Returns:
        deep copy of this class.
      • dump

        public void dump​(java.io.DataOutputStream file)
                  throws java.io.IOException
        Dumps Java class to output stream in binary format.
        Parameters:
        file - Output stream.
        Throws:
        java.io.IOException - Thrown if an I/O error occurs.
      • dump

        public void dump​(java.io.File file)
                  throws java.io.IOException
        Dumps class to a file.
        Parameters:
        file - Output file.
        Throws:
        java.io.IOException - Thrown if an I/O error occurs.
      • dump

        public void dump​(java.io.OutputStream file)
                  throws java.io.IOException
        Dumps Java class to output stream in binary format.
        Parameters:
        file - Output stream.
        Throws:
        java.io.IOException - Thrown if an I/O error occurs.
      • dump

        public void dump​(java.lang.String fileName)
                  throws java.io.IOException
        Dumps class to a file named fileName.
        Parameters:
        fileName - Output file name.
        Throws:
        java.io.IOException - Thrown if an I/O error occurs.
      • equals

        public boolean equals​(java.lang.Object obj)
        Return value as defined by given BCELComparator strategy. By default two JavaClass objects are said to be equal when their class names are equal.
        Overrides:
        equals in class java.lang.Object
        See Also:
        Object.equals(Object)
      • findField

        public Field findField​(java.lang.String fieldName,
                               Type fieldType)
                        throws java.lang.ClassNotFoundException
        Finds a visible field by name and type in this class and its super classes.
        Parameters:
        fieldName - The field name to find.
        fieldType - The field type to find.
        Returns:
        field matching given name and type, null if field is not found or not accessible from this class.
        Throws:
        java.lang.ClassNotFoundException - Thrown if the class cannot be found.
        Since:
        6.8.0
      • getAllInterfaces

        public JavaClass[] getAllInterfaces()
                                     throws java.lang.ClassNotFoundException
        Gets all interfaces implemented by this JavaClass (transitively).
        Returns:
        all interfaces.
        Throws:
        java.lang.ClassNotFoundException - Thrown if any of the class's superclasses or interfaces can't be found.
      • getAttribute

        public final <T extends Attribute> T getAttribute​(byte tag)
        Gets attribute for given tag.
        Type Parameters:
        T - The attribute type.
        Parameters:
        tag - The attribute tag.
        Returns:
        Attribute for given tag, null if not found. Refer to Const.ATTR_UNKNOWN constants named ATTR_* for possible values.
        Since:
        6.10.0
      • getAttributes

        public Attribute[] getAttributes()
        Gets attributes of the class.
        Returns:
        Attributes of the class.
      • getBytes

        public byte[] getBytes()
        Gets class in binary format.
        Returns:
        class in binary format.
      • getClassName

        public java.lang.String getClassName()
        Gets the class name.
        Returns:
        Class name.
      • getClassNameIndex

        public int getClassNameIndex()
        Gets the class name index.
        Returns:
        Class name index.
      • getFields

        public Field[] getFields()
        Gets the fields.
        Returns:
        Fields, that is, variables of the class. Like the JVM spec mandates for the classfile format, these fields are those specific to this class, and not those of the superclass or superinterfaces.
      • getFileName

        public java.lang.String getFileName()
        Gets the file name of class.
        Returns:
        File name of class, aka SourceFile attribute value.
      • getInterfaceIndices

        public int[] getInterfaceIndices()
        Gets indices in constant pool of implemented interfaces.
        Returns:
        Indices in constant pool of implemented interfaces.
      • getInterfaceNames

        public java.lang.String[] getInterfaceNames()
        Gets names of implemented interfaces.
        Returns:
        Names of implemented interfaces.
      • getInterfaces

        public JavaClass[] getInterfaces()
                                  throws java.lang.ClassNotFoundException
        Gets interfaces directly implemented by this JavaClass.
        Returns:
        The interfaces.
        Throws:
        java.lang.ClassNotFoundException - Thrown if any of the class's interfaces can't be found.
      • getMajor

        public int getMajor()
        Gets the major number of class file version.
        Returns:
        Major number of class file version.
      • getMethod

        public Method getMethod​(java.lang.reflect.Method m)
        Gets a Method corresponding to java.lang.reflect.Method if any.
        Parameters:
        m - The method to find.
        Returns:
        A Method corresponding to java.lang.reflect.Method if any.
      • getMethods

        public Method[] getMethods()
        Gets the methods of the class.
        Returns:
        Methods of the class.
      • getMinor

        public int getMinor()
        Gets the minor number of class file version.
        Returns:
        Minor number of class file version.
      • getPackageName

        public java.lang.String getPackageName()
        Gets the package name.
        Returns:
        Package name.
      • getRepository

        public Repository getRepository()
        Gets the ClassRepository which holds its definition. By default this is the same as SyntheticRepository.getInstance().
        Returns:
        The repository.
      • getSource

        public final byte getSource()
        Gets the source.
        Returns:
        either HEAP (generated), FILE, or ZIP.
      • getSourceFileName

        public java.lang.String getSourceFileName()
        Gets the file name where this class was read from.
        Returns:
        file name where this class was read from.
      • getSourceFilePath

        public java.lang.String getSourceFilePath()
        Gets the source file path including the package path.
        Returns:
        path to original source file of parsed class, relative to original source directory.
        Since:
        6.7.0
      • getSuperClass

        public JavaClass getSuperClass()
                                throws java.lang.ClassNotFoundException
        Gets the superclass for this JavaClass object, or null if this is Object.
        Returns:
        The superclass for this JavaClass object, or null if this is Object.
        Throws:
        java.lang.ClassNotFoundException - Thrown if the superclass can't be found.
      • getSuperClasses

        public JavaClass[] getSuperClasses()
                                    throws java.lang.ClassNotFoundException
        Gets list of super classes of this class in ascending order.
        Returns:
        list of super classes of this class in ascending order, that is, Object is always the last element.
        Throws:
        java.lang.ClassNotFoundException - Thrown if any of the superclasses can't be found.
      • getSuperclassName

        public java.lang.String getSuperclassName()
        returns the super class name of this class. In the case that this class is Object, it will return itself (Object). This is probably incorrect but isn't fixed at this time to not break existing clients.
        Returns:
        Superclass name.
      • getSuperclassNameIndex

        public int getSuperclassNameIndex()
        Gets the class name index.
        Returns:
        Class name index.
      • hashCode

        public int hashCode()
        Return value as defined by given BCELComparator strategy. By default return the hash code of the class name.
        Overrides:
        hashCode in class java.lang.Object
        See Also:
        Object.hashCode()
      • implementationOf

        public boolean implementationOf​(JavaClass inter)
                                 throws java.lang.ClassNotFoundException
        Checks if this class is an implementation of interface inter.
        Parameters:
        inter - The interface to check.
        Returns:
        true, if this class is an implementation of interface inter.
        Throws:
        java.lang.ClassNotFoundException - Thrown if superclasses or superinterfaces of this class can't be found.
      • instanceOf

        public final boolean instanceOf​(JavaClass superclass)
                                 throws java.lang.ClassNotFoundException
        Equivalent to runtime "instanceof" operator.
        Parameters:
        superclass - The superclass to check.
        Returns:
        true if this JavaClass is derived from the super class.
        Throws:
        java.lang.ClassNotFoundException - Thrown if superclasses or superinterfaces of this object can't be found.
      • isAnonymous

        public final boolean isAnonymous()
        Checks if this class is anonymous.
        Returns:
        true if anonymous.
        Since:
        6.0
      • isClass

        public final boolean isClass()
        Checks if this is a class.
        Returns:
        true if this is a class.
      • isNested

        public final boolean isNested()
        Checks if this class is nested.
        Returns:
        true if nested.
        Since:
        6.0
      • isRecord

        public boolean isRecord()
        Tests whether this class was declared as a record
        Returns:
        true if a record attribute is present, false otherwise.
        Since:
        6.9.0
      • isSuper

        public final boolean isSuper()
        Checks if this is a super class.
        Returns:
        true if this is a super class.
      • setAttributes

        public void setAttributes​(Attribute[] attributes)
        Sets the attributes.
        Parameters:
        attributes - The attributes.
      • setClassName

        public void setClassName​(java.lang.String className)
        Sets the class name.
        Parameters:
        className - The class name.
      • setClassNameIndex

        public void setClassNameIndex​(int classNameIndex)
        Sets the class name index.
        Parameters:
        classNameIndex - The class name index.
      • setConstantPool

        public void setConstantPool​(ConstantPool constantPool)
        Sets the constant pool.
        Parameters:
        constantPool - The constant pool.
      • setFields

        public void setFields​(Field[] fields)
        Sets the fields.
        Parameters:
        fields - The fields.
      • setFileName

        public void setFileName​(java.lang.String fileName)
        Sets File name of class, aka SourceFile attribute value.
        Parameters:
        fileName - The file name.
      • setInterfaceNames

        public void setInterfaceNames​(java.lang.String[] interfaceNames)
        Sets the interface names.
        Parameters:
        interfaceNames - The interface names.
      • setInterfaces

        public void setInterfaces​(int[] interfaces)
        Sets the interfaces.
        Parameters:
        interfaces - The interfaces.
      • setMajor

        public void setMajor​(int major)
        Sets the major version.
        Parameters:
        major - The major version.
      • setMethods

        public void setMethods​(Method[] methods)
        Sets the methods.
        Parameters:
        methods - The methods.
      • setMinor

        public void setMinor​(int minor)
        Sets the minor version.
        Parameters:
        minor - The minor version.
      • setRepository

        public void setRepository​(Repository repository)
        Sets the ClassRepository which loaded the JavaClass. Should be called immediately after parsing is done.
        Parameters:
        repository - The repository.
      • setSourceFileName

        public void setSourceFileName​(java.lang.String sourceFileName)
        Sets absolute path to file this class was read from.
        Parameters:
        sourceFileName - The source file name.
      • setSuperclassName

        public void setSuperclassName​(java.lang.String superclassName)
        Sets the superclass name.
        Parameters:
        superclassName - The superclass name.
      • setSuperclassNameIndex

        public void setSuperclassNameIndex​(int superclassNameIndex)
        Sets the superclass name index.
        Parameters:
        superclassNameIndex - The superclass name index.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        Returns:
        String representing class contents.