Skip to content

Commit 975e7c6

Browse files
authored
Merge pull request #38 from gsmet/prepare-new-extension-annotation-processor
Prepare the extension for the new extension annotation processor
2 parents eddfc85 + 6e9b8d6 commit 975e7c6

15 files changed

+285
-145
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.quarkus.develocity.project;
2+
3+
import org.apache.maven.project.MavenProject;
4+
5+
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
6+
import com.gradle.develocity.agent.maven.api.scan.BuildScanApi;
7+
8+
import io.quarkus.develocity.project.util.MavenMojoExecutionConfig;
9+
import io.quarkus.develocity.project.util.MavenProperties;
10+
11+
@FunctionalInterface
12+
public interface GoalMetadataProvider {
13+
14+
void configure(Context context);
15+
16+
class Context {
17+
private final BuildScanApi buildScanApi;
18+
private final MojoMetadataProvider.Context metadataContext;
19+
private final MavenProperties properties;
20+
private final MavenMojoExecutionConfig configuration;
21+
22+
public Context(BuildScanApi buildScanApi, MojoMetadataProvider.Context metadataContext) {
23+
this.buildScanApi = buildScanApi;
24+
this.metadataContext = metadataContext;
25+
this.properties = new MavenProperties(metadataContext.getSession(), metadataContext.getMojoExecution());
26+
this.configuration = new MavenMojoExecutionConfig(metadataContext.getMojoExecution());
27+
}
28+
29+
public BuildScanApi buildScan() {
30+
return buildScanApi;
31+
}
32+
33+
public MojoMetadataProvider.Context metadata() {
34+
return metadataContext;
35+
}
36+
37+
public MavenProject project() {
38+
return metadataContext.getProject();
39+
}
40+
41+
public MavenProperties properties() {
42+
return properties;
43+
}
44+
45+
public MavenMojoExecutionConfig configuration() {
46+
return configuration;
47+
}
48+
49+
public void buildScanDeduplicatedValue(String key, String value) {
50+
buildScanApi.executeOnce(key + value, ignored -> buildScanApi.value(key, value));
51+
}
52+
}
53+
}

src/main/java/io/quarkus/develocity/project/SimpleQuarkusConfiguredPlugin.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import com.gradle.develocity.agent.maven.api.DevelocityApi;
1313
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
14-
import com.gradle.develocity.agent.maven.api.cache.NormalizationProvider;
1514

1615
public abstract class SimpleQuarkusConfiguredPlugin implements ConfiguredPlugin {
1716

@@ -31,7 +30,7 @@ public void configureBuildCache(DevelocityApi develocityApi, MavenSession mavenS
3130

3231
for (Entry<String, GoalMetadataProvider> goalMetadataProviderEntry : goalMetadataProviders.entrySet()) {
3332
if (goalMetadataProviderEntry.getKey().equalsIgnoreCase(context.getMojoExecution().getGoal())) {
34-
goalMetadataProviderEntry.getValue().configure(context);
33+
goalMetadataProviderEntry.getValue().configure(new GoalMetadataProvider.Context(develocityApi.getBuildScan(), context));
3534
}
3635
}
3736
});
@@ -69,16 +68,4 @@ protected void addClasspathInput(MojoMetadataProvider.Context context, MojoMetad
6968
throw new IllegalStateException("Classpath can't be resolved");
7069
}
7170
}
72-
73-
@FunctionalInterface
74-
public interface PluginNormalizationProvider {
75-
76-
void configure(NormalizationProvider.Context context);
77-
}
78-
79-
@FunctionalInterface
80-
public interface GoalMetadataProvider {
81-
82-
void configure(MojoMetadataProvider.Context context);
83-
}
8471
}

src/main/java/io/quarkus/develocity/project/plugins/CompilerConfiguredPlugin.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.nio.file.Path;
44
import java.util.Map;
55

6-
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
76
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider.Context.FileSet.NormalizationStrategy;
87

8+
import io.quarkus.develocity.project.GoalMetadataProvider;
99
import io.quarkus.develocity.project.SimpleQuarkusConfiguredPlugin;
1010
import io.quarkus.develocity.project.util.Matchers;
1111

@@ -18,24 +18,33 @@ protected String getPluginName() {
1818

1919
@Override
2020
protected Map<String, GoalMetadataProvider> getGoalMetadataProviders() {
21-
return Map.of(
22-
"compile", CompilerConfiguredPlugin::configureCompile);
21+
return Map.of("compile", CompilerConfiguredPlugin::configureCompile);
2322
}
2423

25-
private static void configureCompile(MojoMetadataProvider.Context context) {
26-
if (Matchers.directory(context, Path.of("integration-tests"))) {
27-
context.inputs(inputs -> inputs.fileSet("specs",
28-
context.getProject().getBasedir() + "/disable-unbind-executions",
29-
fs -> fs.normalizationStrategy(NormalizationStrategy.RELATIVE_PATH)));
24+
private static void configureCompile(GoalMetadataProvider.Context context) {
25+
if (Matchers.directory(context.metadata(), Path.of("integration-tests"))) {
26+
context.metadata().inputs(inputs -> {
27+
inputs.fileSet("specs",
28+
context.project().getBasedir() + "/disable-unbind-executions",
29+
fs -> fs.normalizationStrategy(NormalizationStrategy.RELATIVE_PATH));
30+
});
3031
}
3132

32-
context.outputs(outputs -> {
33-
if (Matchers.directory(context, Path.of("extensions")) ||
34-
Matchers.directory(context, Path.of("test-framework", "jacoco")) ||
35-
Matchers.directory(context, Path.of("core", "runtime")) ||
36-
Matchers.directory(context, Path.of("core", "deployment"))) {
37-
outputs.notCacheableBecause("The extension config doc generation tool shares data across all extensions");
38-
}
33+
// for extensions, we need to add skipDocs/quickly as an input as it affects the annotation processor
34+
if (Matchers.directory(context.metadata(), Path.of("extensions")) ||
35+
Matchers.directory(context.metadata(), Path.of("test-framework", "jacoco")) ||
36+
Matchers.directory(context.metadata(), Path.of("core", "runtime")) ||
37+
Matchers.directory(context.metadata(), Path.of("core", "deployment"))) {
38+
39+
context.metadata().inputs(inputs -> {
40+
boolean skipDocs = context.properties().getBoolean("skipDocs") || context.properties().getBoolean("quickly");
41+
inputs.property("skipDocs", skipDocs);
42+
});
43+
}
44+
45+
context.metadata().outputs(outputs -> {
46+
// cache the config doc output of the extension annotation processor
47+
outputs.directory("quarkusConfigDoc", context.project().getBuild().getDirectory() + "/quarkus-config-doc");
3948
});
4049
}
4150
}

src/main/java/io/quarkus/develocity/project/plugins/EnforcerConfiguredPlugin.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
import java.util.Map;
44
import java.util.stream.Collectors;
55

6-
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
7-
6+
import io.quarkus.develocity.project.GoalMetadataProvider;
87
import io.quarkus.develocity.project.SimpleQuarkusConfiguredPlugin;
98

109
public class EnforcerConfiguredPlugin extends SimpleQuarkusConfiguredPlugin {
@@ -20,15 +19,15 @@ protected Map<String, GoalMetadataProvider> getGoalMetadataProviders() {
2019
"enforce", EnforcerConfiguredPlugin::configureEnforce);
2120
}
2221

23-
private static void configureEnforce(MojoMetadataProvider.Context context) {
24-
context.inputs(inputs -> {
25-
dependsOnGav(inputs, context);
22+
private static void configureEnforce(GoalMetadataProvider.Context context) {
23+
context.metadata().inputs(inputs -> {
24+
dependsOnGav(inputs, context.metadata());
2625
inputs.properties("skip", "fail", "failFast", "failIfNoRules", "rules", "rulesToExecute", "rulesToSkip",
2726
"ignoreCache");
2827
dependsOnOs(inputs);
2928
dependsOnJavaVersion(inputs);
3029

31-
String dependencies = context.getProject().getArtifacts().stream()
30+
String dependencies = context.project().getArtifacts().stream()
3231
.map(a -> a.getGroupId() + ":" + a.getArtifactId() + ":" + a.getVersion() + ":" + a.getClassifier())
3332
.sorted()
3433
.collect(Collectors.joining("\n"));
@@ -38,7 +37,7 @@ private static void configureEnforce(MojoMetadataProvider.Context context) {
3837
inputs.ignore("project", "mojoExecution", "session");
3938
});
4039

41-
context.outputs(outputs -> {
40+
context.metadata().outputs(outputs -> {
4241
outputs.cacheable("If the inputs and dependencies are identical, we should have the same output");
4342
});
4443
}

src/main/java/io/quarkus/develocity/project/plugins/FailsafeConfiguredPlugin.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.nio.file.Path;
44
import java.util.Map;
55

6-
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
76
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider.Context.FileSet.NormalizationStrategy;
87

8+
import io.quarkus.develocity.project.GoalMetadataProvider;
99
import io.quarkus.develocity.project.SimpleQuarkusConfiguredPlugin;
1010
import io.quarkus.develocity.project.util.Matchers;
1111

@@ -22,24 +22,24 @@ protected Map<String, GoalMetadataProvider> getGoalMetadataProviders() {
2222
"integration-test", FailsafeConfiguredPlugin::configureIntegrationTest);
2323
}
2424

25-
private static void configureIntegrationTest(MojoMetadataProvider.Context context) {
26-
context.inputs(inputs -> {
27-
inputs.fileSet("quarkus-dependencies", context.getProject().getBuild().getDirectory(), fs -> fs
25+
private static void configureIntegrationTest(GoalMetadataProvider.Context context) {
26+
context.metadata().inputs(inputs -> {
27+
inputs.fileSet("quarkus-dependencies", context.project().getBuild().getDirectory(), fs -> fs
2828
.include("quarkus-*-dependencies.txt").normalizationStrategy(NormalizationStrategy.CLASSPATH));
2929
// for compatibility with older versions but this is deprecated
30-
inputs.fileSet("quarkus-dependency-checksums", context.getProject().getBuild().getDirectory(), fs -> fs
30+
inputs.fileSet("quarkus-dependency-checksums", context.project().getBuild().getDirectory(), fs -> fs
3131
.include("quarkus-*-dependency-checksums.txt").normalizationStrategy(NormalizationStrategy.RELATIVE_PATH));
3232

33-
if (Matchers.directory(context, Path.of("integration-tests"))) {
34-
inputs.fileSet("native-runner", context.getProject().getBuild().getDirectory(),
33+
if (Matchers.directory(context.metadata(), Path.of("integration-tests"))) {
34+
inputs.fileSet("native-runner", context.project().getBuild().getDirectory(),
3535
fs -> fs.include("*-runner").normalizationStrategy(NormalizationStrategy.RELATIVE_PATH));
3636
}
3737
});
3838

39-
context.outputs(outputs -> {
40-
if (Matchers.directory(context, Path.of("integration-tests", "devtools")) ||
41-
Matchers.directory(context, Path.of("integration-tests", "gradle")) ||
42-
Matchers.directory(context, Path.of("integration-tests", "maven"))) {
39+
context.metadata().outputs(outputs -> {
40+
if (Matchers.directory(context.metadata(), Path.of("integration-tests", "devtools")) ||
41+
Matchers.directory(context.metadata(), Path.of("integration-tests", "gradle")) ||
42+
Matchers.directory(context.metadata(), Path.of("integration-tests", "maven"))) {
4343
outputs.notCacheableBecause("It is too hard to figure out the dependency tree of these modules");
4444
}
4545
});

src/main/java/io/quarkus/develocity/project/plugins/FormatterConfiguredPlugin.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import java.util.Map;
44

5-
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
65
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider.Context.FileSet.EmptyDirectoryHandling;
76
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider.Context.FileSet.NormalizationStrategy;
87

8+
import io.quarkus.develocity.project.GoalMetadataProvider;
99
import io.quarkus.develocity.project.SimpleQuarkusConfiguredPlugin;
1010

1111
public class FormatterConfiguredPlugin extends SimpleQuarkusConfiguredPlugin {
@@ -21,9 +21,9 @@ protected Map<String, GoalMetadataProvider> getGoalMetadataProviders() {
2121
"format", FormatterConfiguredPlugin::configureFormat);
2222
}
2323

24-
private static void configureFormat(MojoMetadataProvider.Context context) {
25-
context.inputs(inputs -> {
26-
dependsOnGav(inputs, context);
24+
private static void configureFormat(GoalMetadataProvider.Context context) {
25+
context.metadata().inputs(inputs -> {
26+
dependsOnGav(inputs, context.metadata());
2727

2828
inputs.properties("includes", "excludes", "compilerSource", "compilerCompliance", "compilerTargetPlatform", "lineEnding", "configFile",
2929
"configJsFile", "configHtmlFile", "configXmlFile", "configJsonFile", "configCssFile", "skipFormattingCache",
@@ -40,9 +40,9 @@ private static void configureFormat(MojoMetadataProvider.Context context) {
4040
inputs.ignore("project", "targetDirectory", "basedir");
4141
});
4242

43-
context.nested("encoding", c -> c.inputs(inputs -> inputs.properties("displayName")));
43+
context.metadata().nested("encoding", c -> c.inputs(inputs -> inputs.properties("displayName")));
4444

45-
context.outputs(outputs -> {
45+
context.metadata().outputs(outputs -> {
4646
outputs.cacheable("If the inputs and dependencies are identical, we should have the same output");
4747

4848
outputs.directory("cachedir");

src/main/java/io/quarkus/develocity/project/plugins/ImpsortConfiguredPlugin.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import java.util.Map;
44

5-
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider;
65
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider.Context.FileSet.EmptyDirectoryHandling;
76
import com.gradle.develocity.agent.maven.api.cache.MojoMetadataProvider.Context.FileSet.NormalizationStrategy;
87

8+
import io.quarkus.develocity.project.GoalMetadataProvider;
99
import io.quarkus.develocity.project.SimpleQuarkusConfiguredPlugin;
1010

1111
public class ImpsortConfiguredPlugin extends SimpleQuarkusConfiguredPlugin {
@@ -21,9 +21,9 @@ protected Map<String, GoalMetadataProvider> getGoalMetadataProviders() {
2121
"sort", ImpsortConfiguredPlugin::configureSort);
2222
}
2323

24-
private static void configureSort(MojoMetadataProvider.Context context) {
25-
context.inputs(inputs -> {
26-
dependsOnGav(inputs, context);
24+
private static void configureSort(GoalMetadataProvider.Context context) {
25+
context.metadata().inputs(inputs -> {
26+
dependsOnGav(inputs, context.metadata());
2727

2828
inputs.properties("sourceEncoding", "skip", "staticGroups", "groups", "staticAfter", "joinStaticWithNonStatic",
2929
"includes", "excludes", "removeUnused", "treatSamePackageAsUnused", "breadthFirstComparator",
@@ -41,7 +41,7 @@ private static void configureSort(MojoMetadataProvider.Context context) {
4141
"cachedir");
4242
});
4343

44-
context.outputs(outputs -> {
44+
context.metadata().outputs(outputs -> {
4545
outputs.cacheable("If the inputs and dependencies are identical, we should have the same output");
4646

4747
// For now we don't want to output the cachedir as it contains absolute paths

0 commit comments

Comments
 (0)