# Model

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
@Incubating
annotation class Model(source)

### Deprecated

The Gradle software model is deprecated and will be removed in Gradle 10. Use the new component model (e.g. `cpp-application`, `cpp-library`, `swift-application`, `swift-library`, `xctest`) instead.

Denotes that the RuleSource method rule carrying this annotation creates a new top level element in the model space.

The method must advertise a name and type for the model element. The name is defined either by the name of the method, or the value of this annotation. The type is defined differently depending on whether the new element is Managed or not.

## Creating managed model elements

If the element is to be of a managed type, the method must return `void` and receive the newly created instance as the first parameter. All other parameters are considered inputs.

It is an error for a `@Model` rule to return `void` and specify a non-managed type as the first parameter. It is an error for a `@Model` rule to return `void` and for the first parameter to be annotated with Path. It is an error for a `@Model` rule to specify a managed type as the return type.

## Creating non-managed model elements

If the element is to be of a non-managed type, the method must return the newly created instance. All parameters are considered inputs. Please see RuleSource for more information on method rules.

## Functions

annotationType
Link copied to clipboard
abstract fun annotationType(): Class<out Annotation>
equals
Link copied to clipboard
abstract fun equals(p: Any): Boolean
hashCode
Link copied to clipboard
abstract fun hashCode(): Int
toString
Link copied to clipboard
abstract fun toString(): String
value
Link copied to clipboard
abstract fun value(): String
Denotes the name by which the model element will be available.