Class ClassGen

  • All Implemented Interfaces:
    java.lang.Cloneable

    public class ClassGen
    extends AccessFlags
    implements java.lang.Cloneable
    Template class for building up a java class. May be initialized with an existing java class (file).
    See Also:
    JavaClass
    • Field Detail

      • className

        private java.lang.String className
      • superClassName

        private java.lang.String superClassName
      • fileName

        private final java.lang.String fileName
      • classNameIndex

        private int classNameIndex
      • superclassNameIndex

        private int superclassNameIndex
      • major

        private int major
      • minor

        private int minor
      • fieldList

        private final java.util.List<Field> fieldList
      • methodList

        private final java.util.List<Method> methodList
      • attributeList

        private final java.util.List<Attribute> attributeList
      • interfaceList

        private final java.util.List<java.lang.String> interfaceList
    • Constructor Detail

      • ClassGen

        public ClassGen​(JavaClass clazz)
        Initialize with existing class.
        Parameters:
        clazz - JavaClass object (e.g. read from file)
      • ClassGen

        public ClassGen​(java.lang.String className,
                        java.lang.String superClassName,
                        java.lang.String fileName,
                        int accessFlags,
                        java.lang.String[] interfaces)
        Convenience constructor to set up some important values initially.
        Parameters:
        className - fully qualified class name
        superClassName - fully qualified superclass name
        fileName - source file name
        accessFlags - access qualifiers
        interfaces - implemented interfaces
      • ClassGen

        public ClassGen​(java.lang.String className,
                        java.lang.String superClassName,
                        java.lang.String fileName,
                        int accessFlags,
                        java.lang.String[] interfaces,
                        ConstantPoolGen cp)
        Convenience constructor to set up some important values initially.
        Parameters:
        className - fully qualified class name
        superClassName - fully qualified superclass name
        fileName - source file name
        accessFlags - access qualifiers
        interfaces - implemented interfaces
        cp - constant pool to use
    • Method Detail

      • getComparator

        public static BCELComparator getComparator()
        Returns:
        Comparison strategy object
      • setComparator

        public static void setComparator​(BCELComparator comparator)
        Parameters:
        comparator - Comparison strategy object
      • addAttribute

        public void addAttribute​(Attribute a)
        Add an attribute to this class.
        Parameters:
        a - attribute to add
      • addEmptyConstructor

        public void addEmptyConstructor​(int accessFlags)
        Convenience method. Add an empty constructor to this class that does nothing but calling super().
        Parameters:
        accessFlags - rights for constructor
      • addField

        public void addField​(Field f)
        Add a field to this class.
        Parameters:
        f - field to add
      • addInterface

        public void addInterface​(java.lang.String name)
        Add an interface to this class, i.e., this class has to implement it.
        Parameters:
        name - interface to implement (fully qualified class name)
      • addMethod

        public void addMethod​(Method m)
        Add a method to this class.
        Parameters:
        m - method to add
      • addObserver

        public void addObserver​(ClassObserver o)
        Add observer for this object.
      • clone

        public java.lang.Object clone()
        Overrides:
        clone in class java.lang.Object
      • containsField

        public boolean containsField​(Field f)
      • containsField

        public Field containsField​(java.lang.String name)
        Returns:
        field object with given name, or null
      • containsMethod

        public Method containsMethod​(java.lang.String name,
                                     java.lang.String signature)
        Returns:
        method object with given name and signature, or null
      • equals

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

        public Attribute[] getAttributes()
      • getClassName

        public java.lang.String getClassName()
      • getClassNameIndex

        public int getClassNameIndex()
      • getFields

        public Field[] getFields()
      • getFileName

        public java.lang.String getFileName()
      • getInterfaceNames

        public java.lang.String[] getInterfaceNames()
      • getInterfaces

        public int[] getInterfaces()
      • getJavaClass

        public JavaClass getJavaClass()
        Returns:
        the (finally) built up Java class object.
      • getMajor

        public int getMajor()
        Returns:
        major version number of class file
      • getMethodAt

        public Method getMethodAt​(int pos)
      • getMethods

        public Method[] getMethods()
      • getMinor

        public int getMinor()
        Returns:
        minor version number of class file
      • getSuperclassName

        public java.lang.String getSuperclassName()
      • getSuperclassNameIndex

        public int getSuperclassNameIndex()
      • hashCode

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

        public void removeAttribute​(Attribute a)
        Remove an attribute from this class.
        Parameters:
        a - attribute to remove
      • removeField

        public void removeField​(Field f)
        Remove a field to this class.
        Parameters:
        f - field to remove
      • removeInterface

        public void removeInterface​(java.lang.String name)
        Remove an interface from this class.
        Parameters:
        name - interface to remove (fully qualified name)
      • removeMethod

        public void removeMethod​(Method m)
        Remove a method from this class.
        Parameters:
        m - method to remove
      • removeObserver

        public void removeObserver​(ClassObserver o)
        Remove observer for this object.
      • replaceField

        public void replaceField​(Field old,
                                 Field newField)
        Replace given field with new one. If the old one does not exist add the new_ field to the class anyway.
      • replaceMethod

        public void replaceMethod​(Method old,
                                  Method newMethod)
        Replace given method with new one. If the old one does not exist add the newMethod method to the class anyway.
      • setClassName

        public void setClassName​(java.lang.String name)
      • setClassNameIndex

        public void setClassNameIndex​(int classNameIndex)
      • setConstantPool

        public void setConstantPool​(ConstantPoolGen constantPool)
      • setMajor

        public void setMajor​(int major)
        Set major version number of class file, default value is 45 (JDK 1.1)
        Parameters:
        major - major version number
      • setMethodAt

        public void setMethodAt​(Method method,
                                int pos)
      • setMethods

        public void setMethods​(Method[] methods)
      • setMinor

        public void setMinor​(int minor)
        Set minor version number of class file, default value is 3 (JDK 1.1)
        Parameters:
        minor - minor version number
      • setSuperclassName

        public void setSuperclassName​(java.lang.String name)
      • setSuperclassNameIndex

        public void setSuperclassNameIndex​(int superclassNameIndex)
      • unpackAnnotations

        private AnnotationEntryGen[] unpackAnnotations​(Attribute[] attrs)
        Look for attributes representing annotations and unpack them.
      • update

        public void update()
        Call notify() method on all observers. This method is not called automatically whenever the state has changed, but has to be called by the user after they have finished editing the object.