AntTypeDefinition (Apache Ant API)
Date: 2018-07-10

org.apache.tools.ant

## Class AntTypeDefinition

- java.lang.Object
- - org.apache.tools.ant.AntTypeDefinition

- Direct Known Subclasses:
    PreSetDef.PreSetDefinition

      public class AntTypeDefinition
      extends java.lang.Object

  This class contains all the information on a particular ant type, the classname, adapter and the class it should be assignable from. This type replaces the task/datatype split of pre ant 1.6.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `AntTypeDefinition()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `checkClass(Project project)` Checks if the attributes are correct.
    `java.lang.Object` | `create(Project project)` Create an instance of the definition.
    `java.lang.ClassLoader` | `getClassLoader()` Get the classloader for this definition.
    `java.lang.String` | `getClassName()` Get the classname of the definition.
    `java.lang.Class<?>` | `getExposedClass(Project project)` Get the exposed class for this definition.
    `java.lang.String` | `getName()` Return the definition's name.
    `java.lang.Class<?>` | `getTypeClass(Project project)` Get the definition class.
    `<T> T` | `innerCreateAndSet(java.lang.Class<T> newclass, Project project)` Inner implementation of the `createAndSet(Project, Class)` logic, with no exception catching.
    `java.lang.Class<?>` | `innerGetTypeClass()` Try and load a class, with no attempt to catch any fault.
    `boolean` | `isRestrict()` Get the restrict attribute.
    `boolean` | `sameDefinition(AntTypeDefinition other, Project project)` Equality method for this definition (assumes the names are the same).
    `void` | `setAdapterClass(java.lang.Class<?> adapterClass)` Set the adapter class for this definition.
    `void` | `setAdaptToClass(java.lang.Class<?> adaptToClass)` Set the assignable class for this definition.
    `void` | `setClass(java.lang.Class<?> clazz)` Set the class of the definition.
    `void` | `setClassLoader(java.lang.ClassLoader classLoader)` Set the classloader to use to create an instance of the definition.
    `void` | `setClassName(java.lang.String className)` Set the classname of the definition.
    `void` | `setName(java.lang.String name)` Set the definition's name.
    `void` | `setRestrict(boolean restrict)` Set the restrict attribute.
    `boolean` | `similarDefinition(AntTypeDefinition other, Project project)` Similar definition; used to compare two definitions defined twice with the same name and the same types.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AntTypeDefinition

          public AntTypeDefinition()

  - ### Method Detail

    - #### setRestrict

          public void setRestrict(boolean restrict)

      Set the restrict attribute.
      Parameters:
        `restrict` - the value to set.

    - #### isRestrict

          public boolean isRestrict()

      Get the restrict attribute.
      Returns:
        the restrict attribute.

    - #### setName

          public void setName(java.lang.String name)

      Set the definition's name.
      Parameters:
        `name` - the name of the definition.

    - #### getName

          public java.lang.String getName()

      Return the definition's name.
      Returns:
        the name of the definition.

    - #### setClass

          public void setClass(java.lang.Class<?> clazz)

      Set the class of the definition. As a side-effect may set the classloader and classname.
      Parameters:
        `clazz` - the class of this definition.

    - #### setClassName

          public void setClassName(java.lang.String className)

      Set the classname of the definition.
      Parameters:
        `className` - the classname of this definition.

    - #### getClassName

          public java.lang.String getClassName()

      Get the classname of the definition.
      Returns:
        the name of the class of this definition.

    - #### setAdapterClass

          public void setAdapterClass(java.lang.Class<?> adapterClass)

      Set the adapter class for this definition. This class is used to adapt the definitions class if required.
      Parameters:
        `adapterClass` - the adapterClass.

    - #### setAdaptToClass

          public void setAdaptToClass(java.lang.Class<?> adaptToClass)

      Set the assignable class for this definition.
      Parameters:
        `adaptToClass` - the assignable class.

    - #### setClassLoader

          public void setClassLoader(java.lang.ClassLoader classLoader)

      Set the classloader to use to create an instance of the definition.
      Parameters:
        `classLoader` - the ClassLoader.

    - #### getClassLoader

          public java.lang.ClassLoader getClassLoader()

      Get the classloader for this definition.
      Returns:
        the classloader for this definition.

    - #### getExposedClass

          public java.lang.Class<?> getExposedClass(Project project)

      Get the exposed class for this definition. This will be a proxy class (adapted class) if there is an adapter class and the definition class is not assignable from the assignable class.
      Parameters:
        `project` - the current project.
      Returns:
        the exposed class - may return null if unable to load the class

    - #### getTypeClass

          public java.lang.Class<?> getTypeClass(Project project)

      Get the definition class.
      Parameters:
        `project` - the current project.
      Returns:
        the type of the definition.

    - #### innerGetTypeClass

          public java.lang.Class<?> innerGetTypeClass()
                                               throws java.lang.ClassNotFoundException

      Try and load a class, with no attempt to catch any fault.
      Returns:
        the class that implements this component
      Throws:
        `java.lang.ClassNotFoundException` - if the class cannot be found.
        `java.lang.NoClassDefFoundError` - if the there is an error finding the class.

    - #### create

          public java.lang.Object create(Project project)

      Create an instance of the definition. The instance may be wrapped in a proxy class.
      Parameters:
        `project` - the current project.
      Returns:
        the created object.

    - #### checkClass

          public void checkClass(Project project)

      Checks if the attributes are correct.
      - if the class can be created.
      - if an adapter class can be created
      - if the type is assignable from adapter
      - if the type can be used with the adapter class
      Parameters:
        `project` - the current project.

    - #### innerCreateAndSet

          public <T> T innerCreateAndSet(java.lang.Class<T> newclass,
                                         Project project)
                                  throws java.lang.NoSuchMethodException,
                                         java.lang.InstantiationException,
                                         java.lang.IllegalAccessException,
                                         java.lang.reflect.InvocationTargetException

      Inner implementation of the `createAndSet(Project, Class)` logic, with no exception catching.
      Type Parameters:
        `T` - return type of the method
      Parameters:
        `newclass` - class to create
        `project` - the project to use
      Returns:
        a newly constructed and bound instance.
      Throws:
        `java.lang.NoSuchMethodException` - no good constructor.
        `java.lang.InstantiationException` - cannot initialize the object.
        `java.lang.IllegalAccessException` - cannot access the object.
        `java.lang.reflect.InvocationTargetException` - error in invocation.

    - #### sameDefinition

          public boolean sameDefinition(AntTypeDefinition other,
                                        Project project)

      Equality method for this definition (assumes the names are the same).
      Parameters:
        `other` - another definition.
        `project` - the project the definition.
      Returns:
        true if the definitions are the same.

    - #### similarDefinition

          public boolean similarDefinition(AntTypeDefinition other,
                                           Project project)

      Similar definition; used to compare two definitions defined twice with the same name and the same types. The classloader may be different but have the same path so #sameDefinition cannot be used.
      Parameters:
        `other` - the definition to compare to.
        `project` - the current project.
      Returns:
        true if the definitions are the same.