ComponentType (Gradle API 4.7)
Date: 2018-04-18

org.gradle.platform.base

## Annotation Type ComponentType

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

  Declares a custom `ComponentSpec` type. The following example demonstrates how to register a custom component type using a plugin with a `ComponentType` annotation. Furthermore the plugin creates an instance of SampleComponent named 'sampleComponent'.

       interface SampleComponent extends ComponentSpec {}
       class DefaultSampleComponent extends BaseComponentSpec implements SampleComponent {}

       apply plugin: MySamplePlugin

       class MySamplePlugin extends RuleSource {
           @ComponentType
           void register(TypeBuilder<SampleComponent> builder) {
               builder.defaultImplementation(DefaultSampleComponent)
           }

           @Mutate
           void createSampleLibraryComponents(ModelMap<SampleComponent> componentSpecs) {
               componentSpecs.create("sampleComponent")
           }
       }