Class JDefinedClass

All Implemented Interfaces:
JAnnotatable, JClassContainer, JDeclaration, JDocCommentable, JGenerable, JGenerifiable, Comparable<JType>
Direct Known Subclasses:
JAnonymousClass

public class JDefinedClass extends JClass implements JDeclaration, JClassContainer, JGenerifiable, JAnnotatable, JDocCommentable
A generated Java class/interface/enum/....

This class models a declaration, and since a declaration can be always used as a reference, it inherits JClass.

Where to go from here?

You'd want to generate fields and methods on a class. See method(int, JType, String) and field(int, JType, String).

  • Field Details

    • name

      private String name
      Name of this class. Null if anonymous.
    • mods

      private JMods mods
      Modifiers for the class declaration
    • superClass

      private JClass superClass
      Name of the super class of this class.
    • interfaces

      private final Set<JClass> interfaces
      List of interfaces that this class implements
    • fields

      final Map<String,JFieldVar> fields
      Fields keyed by their names.
    • init

      private JBlock init
      Static initializer, if this class has one
    • jdoc

      private JDocComment jdoc
      class javadoc
    • constructors

      private final List<JMethod> constructors
      Set of constructors for this class, if any
    • methods

      private final List<JMethod> methods
      Set of methods that are members of this class
    • classes

      private Map<String,JDefinedClass> classes
      Nested classes as a map from name to JDefinedClass. The name is all capitalized in a case sensitive file system (JCodeModel.isCaseSensitiveFileSystem) to avoid conflicts. Lazily created to save footprint.
      See Also:
    • hideFile

      private boolean hideFile
      Flag that controls whether this class should be really generated or not. Sometimes it is useful to generate code that refers to class X, without actually generating the code of X. This flag is used to surpress X.java file in the output.
    • metadata

      public Object metadata
      Client-app spcific metadata associated with this user-created class.
    • directBlock

      private String directBlock
      String that will be put directly inside the generated code. Can be null.
    • outer

      private JClassContainer outer
      If this is a package-member class, this is JPackage. If this is a nested class, this is JDefinedClass. If this is an anonymous class, this constructor shouldn't be used.
    • classType

      private final ClassType classType
      Default value is class or interface or annotationTypeDeclaration or enum
    • enumConstantsByName

      private final Map<String,JEnumConstant> enumConstantsByName
      Set of enum constants that are keyed by names. In Java, enum constant order is actually significant, because of order ID they get. So let's preserve the order.
    • annotations

      private List<JAnnotationUse> annotations
      Annotations on this variable. Lazily created.
    • generifiable

      private final JGenerifiableImpl generifiable
      Helper class to implement JGenerifiable.
  • Constructor Details

  • Method Details

    • isAnonymous

      public final boolean isAnonymous()
      Returns true if this is an anonymous class.
    • _extends

      public JDefinedClass _extends(JClass superClass)
      This class extends the specifed class.
      Parameters:
      superClass - Superclass for this class
      Returns:
      This class
    • _extends

      public JDefinedClass _extends(Class<?> superClass)
    • _extends

      public JClass _extends()
      Returns the class extended by this class.
      Specified by:
      _extends in class JClass
      Returns:
      Returns the JClass representing the superclass of the entity (class or interface) represented by this JClass. Even if no super class is given explicitly or this JClass is not a class, this method still returns JClass for Object. If this JClass represents Object, return null.
    • _implements

      public JDefinedClass _implements(JClass iface)
      This class implements the specifed interface.
      Parameters:
      iface - Interface that this class implements
      Returns:
      This class
    • _implements

      public JDefinedClass _implements(Class<?> iface)
    • _implements

      public Iterator<JClass> _implements()
      Returns an iterator that walks the nested classes defined in this class.
      Specified by:
      _implements in class JClass
      Returns:
      A non-null valid iterator that iterates all JClass objects that represents those interfaces implemented by this object.
    • name

      public String name()
      JClass name accessor.

      For example, for java.util.List, this method returns "List""

      Specified by:
      name in class JClass
      Returns:
      Name of this class
    • enumConstant

      public JEnumConstant enumConstant(String name)
      If the named enum already exists, the reference to it is returned. Otherwise this method generates a new enum reference with the given name and returns it.
      Parameters:
      name - The name of the constant.
      Returns:
      The generated type-safe enum constant.
    • fullName

      public String fullName()
      Gets the fully qualified name of this class.
      Specified by:
      fullName in class JType
      Returns:
      Strings like "int", "java.lang.String", "java.io.File[]". Never null.
    • binaryName

      public String binaryName()
      Description copied from class: JType
      Gets the binary name of the type. See http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#44909
      Overrides:
      binaryName in class JType
      Returns:
      Name like "Foo$Bar", "int", "java.lang.String", "java.io.File[]". Never null.
    • isInterface

      public boolean isInterface()
      Description copied from class: JClass
      Checks if this object represents an interface.
      Specified by:
      isInterface in class JClass
    • isAbstract

      public boolean isAbstract()
      Description copied from class: JClass
      Checks if this class is an abstract class.
      Specified by:
      isAbstract in class JClass
    • field

      public JFieldVar field(int mods, JType type, String name)
      Adds a field to the list of field members of this JDefinedClass.
      Parameters:
      mods - Modifiers for this field
      type - JType of this field
      name - Name of this field
      Returns:
      Newly generated field
    • field

      public JFieldVar field(int mods, Class<?> type, String name)
    • field

      public JFieldVar field(int mods, JType type, String name, JExpression init)
      Adds a field to the list of field members of this JDefinedClass.
      Parameters:
      mods - Modifiers for this field.
      type - JType of this field.
      name - Name of this field.
      init - Initial value of this field.
      Returns:
      Newly generated field
    • isAnnotationTypeDeclaration

      public boolean isAnnotationTypeDeclaration()
      This method indicates if the interface is an annotationTypeDeclaration
    • _annotationTypeDeclaration

      public JDefinedClass _annotationTypeDeclaration(String name) throws JClassAlreadyExistsException
      Add an annotationType Declaration to this package
      Specified by:
      _annotationTypeDeclaration in interface JClassContainer
      Parameters:
      name - Name of the annotation Type declaration to be added to this package
      Returns:
      newly created Annotation Type Declaration
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • _enum

      Add a public enum to this package
      Specified by:
      _enum in interface JClassContainer
      Parameters:
      name - Name of the enum to be added to this package
      Returns:
      newly created Enum
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • _enum

      public JDefinedClass _enum(int mods, String name) throws JClassAlreadyExistsException
      Add a public enum to this package
      Parameters:
      mods - Modifiers for this enum declaration
      name - Name of the enum to be added to this package
      Returns:
      newly created Enum
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • getClassType

      public ClassType getClassType()
    • field

      public JFieldVar field(int mods, Class<?> type, String name, JExpression init)
    • fields

      public Map<String,JFieldVar> fields()
      Returns all the fields declred in this class. The returned Map is a read-only live view.
      Returns:
      always non-null.
    • removeField

      public void removeField(JFieldVar field)
      Removes a JFieldVar from this class.
      Throws:
      IllegalArgumentException - if the given field is not a field on this class.
    • init

      public JBlock init()
      Creates, if necessary, and returns the static initializer for this class.
      Returns:
      JBlock containing initialization statements for this class
    • constructor

      public JMethod constructor(int mods)
      Adds a constructor to this class.
      Parameters:
      mods - Modifiers for this constructor
    • constructors

      public Iterator<JMethod> constructors()
      Returns an iterator that walks the constructors defined in this class.
    • getConstructor

      public JMethod getConstructor(JType[] argTypes)
      Looks for a method that has the specified method signature and return it.
      Returns:
      null if not found.
    • method

      public JMethod method(int mods, JType type, String name)
      Add a method to the list of method members of this JDefinedClass instance.
      Parameters:
      mods - Modifiers for this method
      type - Return type for this method
      name - Name of the method
      Returns:
      Newly generated JMethod
    • method

      public JMethod method(int mods, Class<?> type, String name)
    • methods

      public Collection<JMethod> methods()
      Returns the set of methods defined in this class.
    • getMethod

      public JMethod getMethod(String name, JType[] argTypes)
      Looks for a method that has the specified method signature and return it.
      Returns:
      null if not found.
    • isClass

      public boolean isClass()
      Description copied from interface: JClassContainer
      Returns true if the container is a class.
      Specified by:
      isClass in interface JClassContainer
    • isPackage

      public boolean isPackage()
      Description copied from interface: JClassContainer
      Returns true if the container is a package.
      Specified by:
      isPackage in interface JClassContainer
    • getPackage

      public JPackage getPackage()
      Description copied from interface: JClassContainer
      Gets the nearest package parent.

      If this.isPackage(), then return this.

      Specified by:
      getPackage in interface JClassContainer
    • _class

      public JDefinedClass _class(int mods, String name) throws JClassAlreadyExistsException
      Add a new nested class to this class.
      Specified by:
      _class in interface JClassContainer
      Parameters:
      mods - Modifiers for this class declaration
      name - Name of class to be added to this package
      Returns:
      Newly generated class
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • _class

      public JDefinedClass _class(int mods, String name, boolean isInterface) throws JClassAlreadyExistsException
      Deprecated.
      Create a new class or a new interface.
      Specified by:
      _class in interface JClassContainer
      Throws:
      JClassAlreadyExistsException
    • _class

      public JDefinedClass _class(int mods, String name, ClassType classTypeVal) throws JClassAlreadyExistsException
      Description copied from interface: JClassContainer
      Creates a new class/enum/interface/annotation.
      Specified by:
      _class in interface JClassContainer
      Throws:
      JClassAlreadyExistsException
    • _class

      public JDefinedClass _class(String name) throws JClassAlreadyExistsException
      Add a new public nested class to this class.
      Specified by:
      _class in interface JClassContainer
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • _interface

      public JDefinedClass _interface(int mods, String name) throws JClassAlreadyExistsException
      Add an interface to this package.
      Specified by:
      _interface in interface JClassContainer
      Parameters:
      mods - Modifiers for this interface declaration
      name - Name of interface to be added to this package
      Returns:
      Newly generated interface
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • _interface

      public JDefinedClass _interface(String name) throws JClassAlreadyExistsException
      Adds a public interface to this package.
      Specified by:
      _interface in interface JClassContainer
      Throws:
      JClassAlreadyExistsException - When the specified class/interface was already created.
    • javadoc

      public JDocComment javadoc()
      Creates, if necessary, and returns the class javadoc for this JDefinedClass
      Specified by:
      javadoc in interface JDocCommentable
      Returns:
      JDocComment containing javadocs for this class
    • hide

      public void hide()
      Mark this file as hidden, so that this file won't be generated.

      This feature could be used to generate code that refers to class X, without actually generating X.java.

    • isHidden

      public boolean isHidden()
    • classes

      public final Iterator<JDefinedClass> classes()
      Returns an iterator that walks the nested classes defined in this class.
      Specified by:
      classes in interface JClassContainer
    • getClasses

      private Map<String,JDefinedClass> getClasses()
    • listClasses

      public final JClass[] listClasses()
      Returns all the nested classes defined in this class.
    • outer

      public JClass outer()
      Description copied from class: JClass
      Returns the class in which this class is nested, or null if this is a top-level class.
      Overrides:
      outer in class JClass
    • declare

      public void declare(JFormatter f)
      Specified by:
      declare in interface JDeclaration
    • declareBody

      protected void declareBody(JFormatter f)
      prints the body of a class.
    • direct

      public void direct(String string)
      Places the given string directly inside the generated class. This method can be used to add methods/fields that are not generated by CodeModel. This method should be used only as the last resort.
    • _package

      public final JPackage _package()
      Description copied from class: JClass
      Gets the package to which this class belongs. TODO: shall we move move this down?
      Specified by:
      _package in class JClass
    • parentContainer

      public final JClassContainer parentContainer()
      Description copied from interface: JClassContainer
      Parent JClassContainer. If this is a package, this method returns a parent package, or null if this package is the root package. If this is an outer-most class, this method returns a package to which it belongs. If this is an inner class, this method returns the outer class.
      Specified by:
      parentContainer in interface JClassContainer
    • generify

      public JTypeVar generify(String name)
      Description copied from interface: JGenerifiable
      Adds a new type variable to this declaration.
      Specified by:
      generify in interface JGenerifiable
    • generify

      public JTypeVar generify(String name, Class<?> bound)
      Description copied from interface: JGenerifiable
      Adds a new type variable to this declaration with a bound.
      Specified by:
      generify in interface JGenerifiable
    • generify

      public JTypeVar generify(String name, JClass bound)
      Description copied from interface: JGenerifiable
      Adds a new type variable to this declaration with a bound.
      Specified by:
      generify in interface JGenerifiable
    • typeParams

      public JTypeVar[] typeParams()
      Description copied from class: JClass
      Iterates all the type parameters of this class/interface.

      For example, if this JClass represents Set<T>, this method returns an array that contains single JTypeVar for 'T'.

      Specified by:
      typeParams in interface JGenerifiable
      Overrides:
      typeParams in class JClass
    • substituteParams

      protected JClass substituteParams(JTypeVar[] variables, List<JClass> bindings)
      Description copied from class: JClass
      Substitutes the type variables with their actual arguments.

      For example, when this class is Map<String,Map<V>>, (where V then doing substituteParams( V, Integer ) returns a JClass for Map<String,Map<Integer>>.

      This method needs to work recursively.

      Specified by:
      substituteParams in class JClass
    • annotate

      public JAnnotationUse annotate(Class<? extends Annotation> clazz)
      Adding ability to annotate a class
      Specified by:
      annotate in interface JAnnotatable
      Parameters:
      clazz - The annotation class to annotate the class with
    • annotate

      public JAnnotationUse annotate(JClass clazz)
      Adding ability to annotate a class
      Specified by:
      annotate in interface JAnnotatable
      Parameters:
      clazz - The annotation class to annotate the class with
    • annotate2

      public <W extends JAnnotationWriter> W annotate2(Class<W> clazz)
      Description copied from interface: JAnnotatable
      Adds an annotation to this program element and returns a type-safe writer to fill in the values of such annotations.
      Specified by:
      annotate2 in interface JAnnotatable
    • annotations

      public Collection<JAnnotationUse> annotations()
      Specified by:
      annotations in interface JAnnotatable
      Returns:
      Can be empty but never null.
    • mods

      public JMods mods()
      Returns:
      the current modifiers of this class. Always return non-null valid object.