Interface ObjectFactory
-
@Incubating public interface ObjectFactory
A factory for creating various kinds of model objects.An instance of the factory can be injected into a task or plugin by annotating a public constructor or property getter method with
javax.inject.Inject
. It is also available viaProject.getObjects()
.- Since:
- 4.0
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description DirectoryProperty
directoryProperty()
Creates a newDirectoryProperty
that uses the project directory to resolve relative paths, if required.RegularFileProperty
fileProperty()
Creates a newRegularFileProperty
that uses the project directory to resolve relative paths, if required.<T> ListProperty<T>
listProperty(Class<T> elementType)
<K,V>
MapProperty<K,V>mapProperty(Class<K> keyType, Class<V> valueType)
<T extends Named>
Tnamed(Class<T> type, String name)
Creates a simple immutableNamed
object of the given type and name.<T> T
newInstance(Class<? extends T> type, Object... parameters)
Create a new instance of T, usingparameters
as the construction parameters.<T> Property<T>
property(Class<T> valueType)
Creates aProperty
implementation to hold values of the given type.<T> SetProperty<T>
setProperty(Class<T> elementType)
SourceDirectorySet
sourceDirectorySet(String name, String displayName)
Creates aSourceDirectorySet
.
-
-
-
Method Detail
-
named
<T extends Named> T named(Class<T> type, String name) throws ObjectInstantiationException
Creates a simple immutableNamed
object of the given type and name.The given type can be an interface that extends
Named
or an abstract class that 'implements'Named
. An abstract class, if provided:- Must provide a zero-args constructor that is not private.
- Must not define or inherit any instance fields.
- Should not provide an implementation for
Named.getName()
and should define this method as abstract. Any implementation will be overridden. - Must not define or inherit any other abstract methods.
An interface, if provided, must not define or inherit any other methods.
Objects created using this method are not decorated or extensible.
- Throws:
ObjectInstantiationException
- On failure to create the new instance.- Since:
- 4.0
-
newInstance
<T> T newInstance(Class<? extends T> type, Object... parameters) throws ObjectInstantiationException
Create a new instance of T, usingparameters
as the construction parameters.The type must be a non-abstract class.
Objects created using this method are decorated and extensible, meaning that they have DSL support mixed in and can be extended using the `extensions` property, similar to the
Project
object.An @Inject annotation is required on any constructor that accepts parameters because JSR-330 semantics for dependency injection are used. In addition to those parameters provided as an argument to this method, the following services are also available for injection:
- Throws:
ObjectInstantiationException
- On failure to create the new instance.- Since:
- 4.2
-
sourceDirectorySet
SourceDirectorySet sourceDirectorySet(String name, String displayName)
Creates aSourceDirectorySet
.- Parameters:
name
- A short name for the set.displayName
- A human consumable display name for the set.- Since:
- 5.0
-
property
<T> Property<T> property(Class<T> valueType)
Creates aProperty
implementation to hold values of the given type. The property has no initial value.For certain types, there are more specialized property factory methods available:
- For
List
properties, you should uselistProperty(Class)
. - For
Set
properties, you should usesetProperty(Class)
. - For
Map
properties, you should usemapProperty(Class, Class)
. - For
Directory
properties, you should usedirectoryProperty()
. - For
RegularFile
properties, you should usefileProperty()
.
- Parameters:
valueType
- The type of the property.- Returns:
- The property. Never returns null.
- Since:
- 4.3
- For
-
listProperty
<T> ListProperty<T> listProperty(Class<T> elementType)
Creates aListProperty
implementation to hold aList
of the given element typeT
. The property has an empty list as its initial value.The implementation will return immutable
List
values from its query methods.- Type Parameters:
T
- The type of element.- Parameters:
elementType
- The type of element.- Returns:
- The property. Never returns null;
- Since:
- 4.3
-
setProperty
<T> SetProperty<T> setProperty(Class<T> elementType)
Creates aSetProperty
implementation to hold aSet
of the given element typeT
. The property has an empty set as its initial value.The implementation will return immutable
Set
values from its query methods.- Type Parameters:
T
- The type of element.- Parameters:
elementType
- The type of element.- Returns:
- The property. Never returns null;
- Since:
- 4.5
-
mapProperty
<K,V> MapProperty<K,V> mapProperty(Class<K> keyType, Class<V> valueType)
Creates aMapProperty
implementation to hold aMap
of the given key typeK
and value typeV
. The property has an empty map as its initial value.The implementation will return immutable
Map
values from its query methods.- Type Parameters:
K
- the type of key.V
- the type of value.- Parameters:
keyType
- the type of key.valueType
- the type of value.- Returns:
- the property. Never returns null.
- Since:
- 5.1
-
directoryProperty
DirectoryProperty directoryProperty()
Creates a newDirectoryProperty
that uses the project directory to resolve relative paths, if required. The property has no initial value.- Since:
- 5.0
-
fileProperty
RegularFileProperty fileProperty()
Creates a newRegularFileProperty
that uses the project directory to resolve relative paths, if required. The property has no initial value.- Since:
- 5.0
-
-