package org.gradle.sample.plugin;
import javax.inject.Inject;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.tooling.provider.model.ToolingModelBuilder;
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry;
/**
* A plugin that exposes a custom tooling model.
*/
public class CustomPlugin implements Plugin<Project> {
private final ToolingModelBuilderRegistry registry;
/**
* Need to use a {@link ToolingModelBuilderRegistry} to register the custom tooling model, so inject this into
* the constructor.
*/
@Inject
public CustomPlugin(ToolingModelBuilderRegistry registry) {
this.registry = registry;
}
public void apply(Project project) {
// Register a builder for the custom tooling model
registry.register(new CustomToolingModelBuilder());
}
private static class CustomToolingModelBuilder implements ToolingModelBuilder {
public boolean canBuild(String modelName) {
// The default name for a model is the name of the Java interface
return modelName.equals(CustomModel.class.getName());
}
public Object buildAll(String modelName, Project project) {
return new DefaultModel();
}
}
}