Class ClassImpl

    • Constructor Detail

      • ClassImpl

        public ClassImpl​(java.lang.String packageName,
                         java.lang.String simpleName,
                         ElementContext ctx,
                         java.lang.String[] importSpecs,
                         JamClassPopulator populator)
      • ClassImpl

        public ClassImpl​(java.lang.String packageName,
                         java.lang.String simpleName,
                         ElementContext ctx,
                         java.lang.String[] importSpecs)
    • Method Detail

      • getContainingPackage

        public JPackage getContainingPackage()
        Description copied from interface: JClass

        Returns a JPackage which represents the package which contains this JClass.

        Specified by:
        getContainingPackage in interface JClass
      • getSuperclass

        public JClass getSuperclass()
        Description copied from interface: JClass

        Returns the Class representing the superclass of the entity (class, interface, primitive type or void) represented by this Class. If this Class represents either the Object class, an interface, a primitive type, or void, then null is returned. If this object represents an array class then the Class object representing the Object class is returned.

        Specified by:
        getSuperclass in interface JClass
      • getInterfaces

        public JClass[] getInterfaces()
        Description copied from interface: JClass
        Returns an unordered array containing all of the interfaces directly implemented by this class. Returns an empty array if no interfaces are implemented. REVIEW we probably want getInterfaces and getDeclaredInterfaces.
        Specified by:
        getInterfaces in interface JClass
      • getFields

        public JField[] getFields()
        Description copied from interface: JClass

        REVIEW should we consider renaming this to getAllFields()? I think this makes it more clear but is not consistent with java.lang.Class.

        Returns an unordered array containing Field objects reflecting all the accessible public fields of the class or interface represented by this Class object. The elements2 in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if the class or interface has no accessible public fields, or if it represents an array class, a primitive type, or void.

        Specifically, if this JClass object represents a class, this method returns the public fields of this class and of all its superclasses. If this JClass object represents an interface, this method returns the fields of this interface and of all its superinterfaces.

        The implicit length field for array class is not reflected by this method. User code should use the methods of class Array to manipulate arrays.

        Note that no guarantees are made about the ordering of fields in this array.

        See The Java Language Specification, sections 8.2 and 8.3.

        Specified by:
        getFields in interface JClass
      • getDeclaredFields

        public JField[] getDeclaredFields()
        Description copied from interface: JClass

        Returns an unordered array of Field objects reflecting all the fields declared by the class or interface represented by this Class object. This includes public, protected, default (package) access, and private fields, but excludes inherited fields. The elements2 in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if the class or interface declares no fields, or if this Class object represents a primitive type, an array class, or void.

        See The Java Language Specification, sections 8.2 and 8.3.

        Specified by:
        getDeclaredFields in interface JClass
      • getMethods

        public JMethod[] getMethods()
        Description copied from interface: JClass

        REVIEW should we consider renaming this to getAllMethods()? I think this makes it more clear but is not consistent with java.lang.Class.

        Returns an array containing Method objects reflecting all the public member methods of the class or interface represented by this Class object, including those declared by the class or interface and and those inherited from superclasses and superinterfaces. The elements2 in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if this Class object represents a class or interface that has no public member methods, or if this Class object represents an array class, primitive type, or void.

        The class initialization method is not included in the returned array. If the class declares multiple public member methods with the same parameter types, they are all included in the returned array.

        Specified by:
        getMethods in interface JClass
      • getProperties

        public JProperty[] getProperties()
        Description copied from interface: JClass
        Returns a representation of a java bean property as detailed in section 8.3 of the Java Beans specification, 'Design Patterns for Properties.' A JProperty can be thought of as a union of a getter method and corresponding setter method, although only one of these is required (view-only and write-only properties are returned). Note that public fields are never considered properties, as deetailed in the specification.
        Specified by:
        getProperties in interface JClass
      • getDeclaredProperties

        public JProperty[] getDeclaredProperties()
        Description copied from interface: JClass

        Like getProperties(), but only considers methods explicitly declared on this class in identifying the properties.

        Specified by:
        getDeclaredProperties in interface JClass
      • getDeclaredMethods

        public JMethod[] getDeclaredMethods()
        Description copied from interface: JClass

        Returns an unordered array of Method objects reflecting all the methods declared by the class or interface represented by this Class object. This includes public, protected, default (package) access, and private methods, but excludes inherited methods. The elements2 in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if the class or interface declares no methods, or if this Class object represents a primitive type, an array class, or void. The class initialization method is not included in the returned array. If the class declares multiple public member methods with the same parameter types, they are all included in the returned array.

        See The Java Language Specification, section 8.2.

        Specified by:
        getDeclaredMethods in interface JClass
      • getConstructors

        public JConstructor[] getConstructors()
        Description copied from interface: JClass

        Returns an unordered array containing Constructor objects reflecting all the public constructors of the class represented by this Class object. An array of length 0 is returned if the class has no public constructors, or if the class is an array class, or if the class reflects a primitive type or void.

        Specified by:
        getConstructors in interface JClass
      • isInterface

        public boolean isInterface()
        Description copied from interface: JClass

        Returns true if this JClass represents an interface.

        Specified by:
        isInterface in interface JClass
      • isAnnotationType

        public boolean isAnnotationType()
        Description copied from interface: JClass

        Returns true if this JClass represents a JSR175 annotation type.

        Specified by:
        isAnnotationType in interface JClass
      • isEnumType

        public boolean isEnumType()
        Description copied from interface: JClass

        Returns true if this class is an enumerated type.

        Specified by:
        isEnumType in interface JClass
      • getModifiers

        public int getModifiers()
        Description copied from interface: JMember

        Returns the modifiers specifier. This is a bit field exactly like those returned by java.lang.Class.getModifiers() and can be manipulated using java.lang.reflect.Modifier in the same way.

        Specified by:
        getModifiers in interface JMember
        Overrides:
        getModifiers in class MemberImpl
      • isFinal

        public boolean isFinal()
        Description copied from interface: JClass
        Return true if this class is final.
        Specified by:
        isFinal in interface JClass
      • isStatic

        public boolean isStatic()
        Description copied from interface: JClass
        Return true if this class is static. Note that top-level classes are never static.
        Specified by:
        isStatic in interface JClass
      • isAbstract

        public boolean isAbstract()
        Description copied from interface: JClass
        Return true if this class is abstract.
        Specified by:
        isAbstract in interface JClass
      • isAssignableFrom

        public boolean isAssignableFrom​(JClass arg)
        Description copied from interface: JClass

        Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter. It returns true if so; otherwise it returns false. If this Class object represents a primitive type, this method returns true if the specified Class parameter is exactly this Class object; otherwise it returns false.

        Specifically, this method tests whether the type represented by the specified Class parameter can be converted to the type represented by this Class object via an identity conversion or via a widening reference conversion. See The Java Language Specification, sections 5.1.1 and 5.1.4 , for details.

        Specified by:
        isAssignableFrom in interface JClass
      • getClasses

        public JClass[] getClasses()
        Description copied from interface: JClass

        Returns an unordered array containing the inner classes for this class. The array contains JClass objects representing all the public classes and interfaces that are members of the class represented by this JClass. This includes public class and interface members inherited from superclasses and public class and interface members declared by the class. This method returns an array of length 0 if this Class object has no public member classes or interfaces. This method also returns an array of length 0 if this JClass object represents a primitive type, an array class, or void.

        Note that no guarantees are made about the ordering of classes in this array.

        Specified by:
        getClasses in interface JClass
      • getFieldDescriptor

        public java.lang.String getFieldDescriptor()
        Description copied from interface: JClass

        Returns the name of this member in the format described in section 4.3.2 of the VM spec, 'Field Descriptors.' This is the same nasty format returned by java.lang.Class.getName(), and is the format you need to use in calls to Class.forName(). For example, the ClassfileName of the class of a two-dimensional array of strings is [[Ljava.lang.String;. For details, see http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html

        Specified by:
        getFieldDescriptor in interface JClass
      • forName

        public JClass forName​(java.lang.String name)
        Description copied from interface: JClass
        Shorthand for myClass.getClassLoader().loadClass(name)
        Specified by:
        forName in interface JClass
      • getImportedPackages

        public JPackage[] getImportedPackages()
        Description copied from interface: JClass

        Returns an unordered set of JPackages which are imported by this class using a package import statement (i.e. with the '*' wildcard), as well as the containing packages of all of the JClasses returned by getImportedClasses().

        Note that this is an optional operation; if the source for the class is not available (i.e. this JClass is backed by a java.lang.Class), then this method will return an array of length 0.

        Specified by:
        getImportedPackages in interface JClass
      • getImportedClasses

        public JClass[] getImportedClasses()
        Description copied from interface: JClass

        Returns an unordered array of classes that were explicitly imported by this class using an import statement. It does not include any classes that might be imported via package imports (i.e. with the '*' wildcard), nor does it include any classes that are simply used via fully-qualified name in the body of this class.

        Note that this is an optional operation; if the source for the class is not available (i.e. this JClass is backed by a java.lang.Class), then this method will return an array of length 0.

        Specified by:
        getImportedClasses in interface JClass
      • accept

        public void accept​(JVisitor visitor)
        Description copied from interface: JElement

        Accepts the given visitor.

        Specified by:
        accept in interface JElement
      • getPrimitiveClass

        public java.lang.Class getPrimitiveClass()
        Description copied from interface: JClass

        If this JClass represents a primitive (isPrimitiveType() returns true), this method returns the java.lang.Class representing the class of the primitive. For example, JClass representing an integer returns the equivalent of 'int.class' or 'java.lang.Integer.type.'

        Specified by:
        getPrimitiveClass in interface JClass
        Returns:
        The primitive class, or null if this is JClass is not primitive.
      • isPrimitiveType

        public boolean isPrimitiveType()
        Description copied from interface: JClass
        Return true if this JClass represents primitive type (int, long, double, and so forth). Remember that primitive wrapper classes such as java.lang.Integer are NOT considered primitives.
        Specified by:
        isPrimitiveType in interface JClass
      • isBuiltinType

        public boolean isBuiltinType()
        Description copied from interface: JClass
        Returns true if this class is a builtin type. This is true if any of the following returns true: isPrimitive(), isArray(), isVoid(), or isUnresolved..
        Specified by:
        isBuiltinType in interface JClass
        Returns:
      • isVoidType

        public boolean isVoidType()
        Description copied from interface: JClass

        Returns true if this JClass represents the void type.

        Specified by:
        isVoidType in interface JClass
      • isUnresolvedType

        public boolean isUnresolvedType()
        Description copied from interface: JClass

        Returns true if a backing entity for this class could not be resolved. This will be true, for example, of the JClass which you get when requesting a method's return type when no class for that type can be found. In this case, the JClass will be have only a name - all other properties will be null/empty.

        Specified by:
        isUnresolvedType in interface JClass
      • isObjectType

        public boolean isObjectType()
        Description copied from interface: JClass

        Returns true if this JClass represents java.lang.Object.

        Specified by:
        isObjectType in interface JClass
      • isArrayType

        public boolean isArrayType()
        Description copied from interface: JClass

        Returns true if this JClass represents an array type.

        Specified by:
        isArrayType in interface JClass
      • getArrayComponentType

        public JClass getArrayComponentType()
        Description copied from interface: JClass

        Returns the Class representing the component type of an array. If this JClass does not represent an array class this method returns null.

        Note that this method differs substantially from java.lang.Class.getComponentType() in the way it treats multidimensional arrays. Specifically, let fooArrayClass be the class of an n dimensional array of class foo for n > 2. For the java.lang.Class representation of fooArrayClass, getComponentType() will return a java.lang.Class for an (n-1)-dimensional array of foos. By contrast, the JClass representation of fooArrayClass will always simply return a JClass representing foo for any value of n > 1.

        In other words, this method always returns the 'core' type of the array, effectively hiding away all of the intermediary array types. Given that JClass provides the additional getArrayDimensions facility, it is felt that this is a much easier convention for tool authors to work with.

        Specified by:
        getArrayComponentType in interface JClass
      • getArrayDimensions

        public int getArrayDimensions()
        Description copied from interface: JClass

        If this JClass represents an array type (isArray() == true), returns the number of dimensions in the array. Otherwise returns zero.

        Specified by:
        getArrayDimensions in interface JClass
      • getAnnotation

        public JAnnotation getAnnotation​(java.lang.Class proxyClass)
        Description copied from interface: JAnnotatedElement

        Returns the JAnnotation which is being proxied by the given subclass of TypedAnnotationProxyBase, or null if no such annotation exists. If it does exist, the getProxy() method on the returned object is guaranteed to return be an instance of the proxyClass.

        Specified by:
        getAnnotation in interface JAnnotatedElement
        Overrides:
        getAnnotation in class AnnotatedElementImpl
      • setSuperclass

        public void setSuperclass​(java.lang.String qualifiedClassName)
        Description copied from interface: MClass
        Sets the class which this class extends. The class name must be fully- qualified. Pass null to make the class extend nothing.
        Specified by:
        setSuperclass in interface MClass
      • setSuperclassUnqualified

        public void setSuperclassUnqualified​(java.lang.String unqualifiedClassName)
        Description copied from interface: MClass
        Sets the name of this class that this class extends. The name may or may nor be fully-qualified. Pass null to make the class extend nothing.
        Specified by:
        setSuperclassUnqualified in interface MClass
      • setSuperclass

        public void setSuperclass​(JClass clazz)
        Description copied from interface: MClass
        Sets the class which this class extends. Pass null to make the class extend nothing.
        Specified by:
        setSuperclass in interface MClass
      • addInterface

        public void addInterface​(JClass interf)
        Description copied from interface: MClass
        Adds to the list of interfaces implemented by this class.
        Specified by:
        addInterface in interface MClass
      • addInterface

        public void addInterface​(java.lang.String qcName)
        Description copied from interface: MClass
        Adds to the list of interfaces implemented by this class.
        Specified by:
        addInterface in interface MClass
      • addInterfaceUnqualified

        public void addInterfaceUnqualified​(java.lang.String ucname)
        Description copied from interface: MClass
        Adds to the list of interfaces implemented by this class. The class name may or may not be qualified.
        Specified by:
        addInterfaceUnqualified in interface MClass
      • removeInterface

        public void removeInterface​(JClass interf)
        Description copied from interface: MClass
        Removes an interface from the list of interfaces implemented by this class. Does nothing if the class does not implement the named interface.
        Specified by:
        removeInterface in interface MClass
      • removeInterface

        public void removeInterface​(java.lang.String qcname)
        Description copied from interface: MClass
        Removes a named interface from the list of interfaces implemented by this class. Does nothing if the class does not implement the named interface.
        Specified by:
        removeInterface in interface MClass
      • addNewConstructor

        public MConstructor addNewConstructor()
        Description copied from interface: MClass
        Creates a new constructor, adds it to this class, and returns it.
        Specified by:
        addNewConstructor in interface MClass
      • removeConstructor

        public void removeConstructor​(MConstructor constr)
        Description copied from interface: MClass
        Removes a constructor from this class. Does nothing if the given constructor is not on this class.
        Specified by:
        removeConstructor in interface MClass
      • getMutableConstructors

        public MConstructor[] getMutableConstructors()
        Description copied from interface: MClass
        Returns the constructors declared on this class. This does not include constructors from any base class or interface. This is simply a more strongly-typed version of getDeclaredConstructors().
        Specified by:
        getMutableConstructors in interface MClass
      • addNewField

        public MField addNewField()
        Description copied from interface: MClass
        Creates a new field, adds it to this class, and returns it. The type of the field must be qualified
        Specified by:
        addNewField in interface MClass
      • removeField

        public void removeField​(MField field)
        Description copied from interface: MClass
        Removes the given field from this class. Does nothing if this class does not contain the field.
        Specified by:
        removeField in interface MClass
      • getMutableFields

        public MField[] getMutableFields()
        Description copied from interface: MClass
        Returns the fields declared on this class. This does not include fields from any base class or interface. This is simply a more strongly-typed version of getDeclaredFields().
        Specified by:
        getMutableFields in interface MClass
      • addNewMethod

        public MMethod addNewMethod()
        Description copied from interface: MClass
        Creates a new method, adds it to this class, and returns it.
        Specified by:
        addNewMethod in interface MClass
      • removeMethod

        public void removeMethod​(MMethod method)
        Description copied from interface: MClass
        Removes the given method from this class. Does nothing if this class does not contain the method.
        Specified by:
        removeMethod in interface MClass
      • getMutableMethods

        public MMethod[] getMutableMethods()
        Description copied from interface: MClass
        Returns the EditableMethods declared on this class. This does not include methods inherited from any base class or interface. This is simply a more strongly-typed version of getDeclaredMethods().
        Specified by:
        getMutableMethods in interface MClass
      • setIsInterface

        public void setIsInterface​(boolean b)
        Specified by:
        setIsInterface in interface MClass
      • setIsAnnotationType

        public void setIsAnnotationType​(boolean b)
        Specified by:
        setIsAnnotationType in interface MClass
      • setIsEnumType

        public void setIsEnumType​(boolean b)
        Specified by:
        setIsEnumType in interface MClass
      • getQualifiedName

        public java.lang.String getQualifiedName()
        Description copied from interface: JElement

        Returns a qualified name for this abstraction. The exact format of this name depends on the particular abstraction. Please refer to the documentation for each JElement subclass for a detailed description of the qualified name formats.

        Specified by:
        getQualifiedName in interface JClassRef
        Specified by:
        getQualifiedName in interface JElement
      • setState

        public void setState​(int state)
      • validateClassName

        public static void validateClassName​(java.lang.String className)
                                      throws java.lang.IllegalArgumentException
        Throws an IllegalArgument exception if the given string is not a valid class name. Useful for parameter checking in several places.
        Throws:
        java.lang.IllegalArgumentException
      • ensureLoaded

        public void ensureLoaded()