Skip to content

Commit 01e3a2d

Browse files
authored
Fix configuration cache issues with the APT plugin (#218)
2 parents 36ee341 + 2df5945 commit 01e3a2d

File tree

6 files changed

+72
-28
lines changed

6 files changed

+72
-28
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Goomph releases
22

33
## [Unreleased]
4+
### Added
5+
- Add Gradle configuration cache compatibility fixes for the Eclipse APT plugin.
46

57
## [4.3.0] - 2025-03-11
68
### Added

src/main/java/com/diffplug/gradle/eclipse/apt/AptEclipsePlugin.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
import org.gradle.api.Project;
2424
import org.gradle.api.Task;
2525
import org.gradle.api.internal.PropertiesTransformer;
26+
import org.gradle.api.model.ObjectFactory;
2627
import org.gradle.api.plugins.ExtensionAware;
2728
import org.gradle.api.plugins.JavaPlugin;
2829
import org.gradle.api.plugins.JavaPluginExtension;
30+
import org.gradle.api.provider.MapProperty;
2931
import org.gradle.api.tasks.Delete;
3032
import org.gradle.api.tasks.SourceSet;
3133
import org.gradle.internal.xml.XmlTransformer;
@@ -36,6 +38,8 @@
3638

3739
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
3840

41+
import javax.inject.Inject;
42+
3943
/**
4044
* Plugin which modifies the eclipse project file so that it will
4145
* include gradle `annotationProcessor` dependencies. No configuration
@@ -52,6 +56,18 @@ private static Action<Task> dependsOn(final Object taskDependency) {
5256
return task -> task.dependsOn(taskDependency);
5357
}
5458

59+
private final ObjectFactory objects;
60+
61+
@Deprecated
62+
public AptEclipsePlugin() {
63+
throw new UnsupportedOperationException("Cannot directly instantiate AptEclipsePlugin");
64+
}
65+
66+
@Inject
67+
public AptEclipsePlugin(ObjectFactory objects) {
68+
this.objects = objects;
69+
}
70+
5571
@Override
5672
public void apply(final Project project) {
5773
project.getPlugins().apply(AptPlugin.class);
@@ -103,14 +119,13 @@ private void configureJdtApt(
103119
.getExtensions()
104120
.getByType(AptPlugin.AptOptions.class)
105121
.isAnnotationProcessing()));
106-
jdtApt.setProcessorOptions(
107-
() ->
108-
project
109-
.getTasks()
110-
.getByName(mainSourceSet.getCompileJavaTaskName())
111-
.getExtensions()
112-
.getByType(AptPlugin.AptOptions.class)
113-
.getProcessorArgs());
122+
MapProperty<String, ?> processorOptions = objects
123+
.mapProperty(String.class, Object.class)
124+
.value(project.getTasks().named(mainSourceSet.getCompileJavaTaskName()).map(task ->
125+
task.getExtensions().getByType(AptPlugin.AptOptions.class).getProcessorArgs()
126+
));
127+
jdtApt.setProcessorOptions(processorOptions::getOrNull);
128+
project.afterEvaluate(p -> processorOptions.finalizeValue());
114129

115130
eclipseModel
116131
.getJdt()

src/main/java/com/diffplug/gradle/eclipse/apt/AptPlugin.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,14 @@ private <T extends AbstractCompile> void configureCompileTasks(
109109
final Project project,
110110
Class<T> compileTaskClass,
111111
final Function<T, CompileOptions> getCompileOptions) {
112-
IMPL.configureTasks(
113-
project,
114-
compileTaskClass,
115-
task -> {
116-
CompileOptions compileOptions = getCompileOptions.apply(task);
117-
final AptOptions aptOptions = IMPL.createAptOptions();
118-
task.getExtensions().add(AptOptions.class, "aptOptions", aptOptions);
119-
IMPL.configureCompileTask(task, compileOptions, aptOptions);
120-
});
112+
project.afterEvaluate(p -> {
113+
for (T task : p.getTasks().withType(compileTaskClass)) {
114+
CompileOptions compileOptions = getCompileOptions.apply(task);
115+
final AptOptions aptOptions = IMPL.createAptOptions();
116+
task.getExtensions().add(AptOptions.class, "aptOptions", aptOptions);
117+
IMPL.configureCompileTask(task, compileOptions, aptOptions);
118+
}
119+
});
121120
}
122121

123122
private <T extends AbstractCompile> void configureCompileTaskForSourceSet(

src/main/java/com/diffplug/gradle/eclipse/apt/EclipseJdtApt.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,31 @@
2222
import java.util.Objects;
2323
import java.util.function.Supplier;
2424
import javax.annotation.Nullable;
25+
import javax.inject.Inject;
26+
2527
import org.gradle.api.Action;
2628
import org.gradle.api.Project;
29+
import org.gradle.api.file.ProjectLayout;
2730
import org.gradle.api.provider.Property;
2831
import org.gradle.api.provider.Provider;
32+
import org.gradle.api.provider.ProviderFactory;
2933
import org.gradle.plugins.ide.api.PropertiesFileContentMerger;
3034
import org.gradle.util.ConfigureUtil;
3135

3236
public class EclipseJdtApt {
33-
private final Project project;
37+
private final ProviderFactory providers;
38+
private final ProjectLayout layout;
3439
private final PropertiesFileContentMerger file;
3540

41+
@Deprecated
3642
public EclipseJdtApt(Project project, PropertiesFileContentMerger file) {
37-
this.project = project;
43+
this(project, project.getProviders(), project.getLayout(), file);
44+
}
45+
46+
@Inject
47+
public EclipseJdtApt(Project project, ProviderFactory providers, ProjectLayout layout, PropertiesFileContentMerger file) {
48+
this.providers = providers;
49+
this.layout = layout;
3850
this.file = file;
3951
this.aptEnabled = project.getObjects().property(Boolean.class);
4052
aptEnabled.set(true);
@@ -78,7 +90,7 @@ public void setReconcileEnabled(Provider<Boolean> reconcileEnabled) {
7890
private final Property<File> genSrcDir;
7991

8092
public File getGenSrcDir() {
81-
return project.file(genSrcDir);
93+
return layout.getProjectDirectory().file(genSrcDir.map(File::getAbsolutePath)).get().getAsFile();
8294
}
8395

8496
public void setGenSrcDir(File genSrcDir) {
@@ -87,13 +99,13 @@ public void setGenSrcDir(File genSrcDir) {
8799

88100
public void setGenSrcDir(Object genSrcDir) {
89101
Objects.requireNonNull(genSrcDir);
90-
this.genSrcDir.set(project.provider(() -> project.file(genSrcDir)));
102+
this.genSrcDir.set(providers.provider(() -> layout.getProjectDirectory().files(genSrcDir).getSingleFile()));
91103
}
92104

93105
private final Property<File> genTestSrcDir;
94106

95107
public File getGenTestSrcDir() {
96-
return project.file(genTestSrcDir);
108+
return layout.getProjectDirectory().file(genTestSrcDir.map(File::getAbsolutePath)).get().getAsFile();
97109
}
98110

99111
public void setGenTestSrcDir(File genTestSrcDir) {
@@ -102,7 +114,7 @@ public void setGenTestSrcDir(File genTestSrcDir) {
102114

103115
public void setGenTestSrcDir(Object genTestSrcDir) {
104116
Objects.requireNonNull(genTestSrcDir);
105-
this.genTestSrcDir.set(project.provider(() -> project.file(genTestSrcDir)));
117+
this.genSrcDir.set(providers.provider(() -> layout.getProjectDirectory().files(genTestSrcDir).getSingleFile()));
106118
}
107119

108120
// XXX: this is actually either a Property<Map> or a MapProperty depending on Gradle version

src/main/java/com/diffplug/gradle/eclipse/apt/GenerateEclipseFactorypath.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.io.File;
1919
import java.util.LinkedHashSet;
2020
import java.util.Set;
21-
import org.gradle.api.artifacts.Configuration;
21+
import org.gradle.api.file.FileCollection;
2222
import org.gradle.api.tasks.Internal;
2323
import org.gradle.plugins.ide.api.XmlGeneratorTask;
2424

@@ -38,10 +38,10 @@ protected void configure(Factorypath factorypath) {
3838
EclipseFactorypath factorypathModel = getFactorypath();
3939
factorypathModel.getFile().getBeforeMerged().execute(factorypath);
4040
Set<File> entries = new LinkedHashSet<>();
41-
for (Configuration configuration : factorypathModel.getPlusConfigurations()) {
41+
for (FileCollection configuration : factorypathModel.getPlusConfigurations()) {
4242
entries.addAll(configuration.getFiles());
4343
}
44-
for (Configuration configuration : factorypathModel.getMinusConfigurations()) {
44+
for (FileCollection configuration : factorypathModel.getMinusConfigurations()) {
4545
entries.removeAll(configuration.getFiles());
4646
}
4747
factorypath.mergeEntries(entries);

src/main/java/com/diffplug/gradle/eclipse/apt/GenerateEclipseJdtApt.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,37 @@
1616
package com.diffplug.gradle.eclipse.apt;
1717

1818
import java.util.Map;
19+
20+
import org.gradle.api.file.ProjectLayout;
1921
import org.gradle.api.tasks.Internal;
2022
import org.gradle.plugins.ide.api.PropertiesGeneratorTask;
2123

24+
import javax.inject.Inject;
25+
2226
public class GenerateEclipseJdtApt extends PropertiesGeneratorTask<JdtApt> {
2327
@SuppressWarnings("NullAway.Init") // will be initialized by setJdtApt right after creation
2428
private EclipseJdtApt jdtApt;
2529

30+
private final ProjectLayout layout;
31+
32+
@Deprecated
33+
public GenerateEclipseJdtApt() {
34+
this(null);
35+
}
36+
37+
@Inject
38+
public GenerateEclipseJdtApt(ProjectLayout layout) {
39+
this.layout = layout != null ? layout : getProject().getLayout();
40+
}
41+
2642
@SuppressWarnings("unchecked")
2743
@Override
2844
protected void configure(JdtApt jdtApt) {
2945
EclipseJdtApt jdtAptModel = getJdtApt();
3046
jdtAptModel.getFile().getBeforeMerged().execute(jdtApt);
3147
jdtApt.setAptEnabled(jdtAptModel.isAptEnabled());
32-
jdtApt.setGenSrcDir(getProject().relativePath(jdtAptModel.getGenSrcDir()));
33-
jdtApt.setGenTestSrcDir(getProject().relativePath(jdtAptModel.getGenTestSrcDir()));
48+
jdtApt.setGenSrcDir(layout.getProjectDirectory().file(jdtAptModel.getGenSrcDir().getAbsolutePath()).getAsFile().getPath());
49+
jdtApt.setGenTestSrcDir(layout.getProjectDirectory().file(jdtAptModel.getGenTestSrcDir().getAbsolutePath()).getAsFile().getPath());
3450
jdtApt.setReconcileEnabled(jdtAptModel.isReconcileEnabled());
3551
jdtApt.getProcessorOptions().clear();
3652
if (jdtAptModel.getProcessorOptions() != null) {

0 commit comments

Comments
 (0)