use of org.gradle.model.internal.registry.ModelRegistry in project gradle by gradle.
the class DependentComponentsReport method report.
@TaskAction
public void report() {
// Once we are here, the project lock is held. If we synchronize to avoid cross-project operations, we will have a dead lock.
getWorkerLeaseService().runAsIsolatedTask(() -> {
// Cross-project ModelRegistry operations do not happen concurrently.
synchronized (DependentComponentsReport.class) {
((ProjectInternal) getProject()).getOwner().applyToMutableState(project -> {
ModelRegistry modelRegistry = getModelRegistry();
DependentBinariesResolver dependentBinariesResolver = modelRegistry.find("dependentBinariesResolver", DependentBinariesResolver.class);
StyledTextOutput textOutput = getTextOutputFactory().create(DependentComponentsReport.class);
TextDependentComponentsReportRenderer reportRenderer = new TextDependentComponentsReportRenderer(dependentBinariesResolver, showNonBuildable, showTestSuites);
reportRenderer.setOutput(textOutput);
ProjectDetails projectDetails = ProjectDetails.of(project);
reportRenderer.startProject(projectDetails);
Set<ComponentSpec> allComponents = getAllComponents(modelRegistry);
if (showTestSuites) {
allComponents.addAll(getAllTestSuites(modelRegistry));
}
reportRenderer.renderComponents(getReportedComponents(allComponents));
reportRenderer.renderLegend();
reportRenderer.completeProject(projectDetails);
reportRenderer.complete();
});
}
});
}
use of org.gradle.model.internal.registry.ModelRegistry in project gradle by gradle.
the class ModelReport method report.
@TaskAction
public void report() {
ProjectInternal project = (ProjectInternal) getProject();
project.prepareForRuleBasedPlugins();
StyledTextOutput textOutput = getTextOutputFactory().create(ModelReport.class);
ModelNodeRenderer renderer = new ModelNodeRenderer(isShowHidden(), getFormat());
TextModelReportRenderer textModelReportRenderer = new TextModelReportRenderer(renderer);
textModelReportRenderer.setOutput(textOutput);
ProjectDetails projectDetails = ProjectDetails.of(project);
textModelReportRenderer.startProject(projectDetails);
ModelRegistry modelRegistry = getModelRegistry();
ModelNode rootNode = modelRegistry.realizeNode(ModelPath.ROOT);
// Ensure binding validation has been done. This should happen elsewhere
modelRegistry.bindAllReferences();
textModelReportRenderer.render(rootNode);
textModelReportRenderer.completeProject(projectDetails);
textModelReportRenderer.complete();
}
use of org.gradle.model.internal.registry.ModelRegistry in project gradle by gradle.
the class RuleBasedPluginTarget method applyRules.
@Override
public void applyRules(@Nullable String pluginId, Class<?> clazz) {
target.prepareForRuleBasedPlugins();
ModelRegistry modelRegistry = target.getModelRegistry();
Iterable<Class<? extends RuleSource>> declaredSources = ruleDetector.getDeclaredSources(clazz);
for (Class<? extends RuleSource> ruleSource : declaredSources) {
ExtractedRuleSource<?> rules = ruleInspector.extract(ruleSource);
for (Class<?> dependency : rules.getRequiredPlugins()) {
target.getPluginManager().apply(dependency);
}
modelRegistry.getRoot().applyToSelf(rules);
}
}
Aggregations