org.gradle.model

## Annotation Type Model

-     @Retention(value=RUNTIME)
      @Target(value=METHOD)
      @Incubating
      public @interface Model

  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.

- - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element and Description
    --- | ---
    `String` | `value` Denotes the name by which the model element will be available.

- - ### Element Detail

    - #### value

          public abstract String value

      Denotes the name by which the model element will be available.

      If the value is the empty string, the exact name of the annotated method will be used.

      The value must:

      - Start with a lower case letter
      - Contain only ASCII letters, numbers and the '_' character

      This restriction also applies when the name is being derived from the method name.

      Returns:
        the name by which the model element will be available
      Default:
        ""