Skip to content
This repository has been archived by the owner on Aug 15, 2024. It is now read-only.

Commit

Permalink
fix eclipse annotation processing (#241)
Browse files Browse the repository at this point in the history
fix eclipse annotation processing
  • Loading branch information
rzpt authored Aug 17, 2022
1 parent 61b9d5c commit 42ea796
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 2 deletions.
5 changes: 5 additions & 0 deletions changelog/@unreleased/pr-241.v2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: fix
fix:
description: fix eclipse annotation processing
links:
- https://github.com/palantir/gradle-processors/pull/241
42 changes: 41 additions & 1 deletion src/main/groovy/org/inferred/gradle/ProcessorsPlugin.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.SourceSet
import org.gradle.plugins.ide.api.XmlFileContentMerger
import org.gradle.plugins.ide.eclipse.EclipsePlugin
import org.gradle.plugins.ide.eclipse.model.Classpath
import org.gradle.plugins.ide.eclipse.model.EclipseModel
import org.gradle.plugins.ide.eclipse.model.SourceFolder
import org.gradle.plugins.ide.idea.IdeaPlugin
import org.gradle.plugins.ide.idea.model.IdeaModel
import org.gradle.plugins.ide.idea.model.IdeaModule
Expand Down Expand Up @@ -94,7 +97,10 @@ class ProcessorsPlugin implements Plugin<Project> {
project.eclipse {
extensions.create('processors', EclipseProcessorsExtension)
processors.conventionMapping.outputDir = {
project.file('generated/java')
project.file('generated_src')
}
processors.conventionMapping.testOutputDir = {
project.file('generated_testSrc')
}

// If this is empty, then it means EclipsePlugin didn't initialize it yet
Expand All @@ -119,13 +125,29 @@ class ProcessorsPlugin implements Plugin<Project> {
{
[
outputDir: project.relativePath(project.eclipse.processors.outputDir).replace('\\', '\\\\'),
testOutputDir: project.relativePath(project.eclipse.processors.testOutputDir).replace('\\', '\\\\'),
deps : allProcessorConf
]
}
)
project.tasks.eclipseAptPrefs.inputs.files allProcessorConf
project.tasks.eclipse.dependsOn project.tasks.eclipseAptPrefs
project.tasks.cleanEclipse.dependsOn project.tasks.cleanEclipseAptPrefs
project.tasks.eclipseClasspath.configure {
doFirst {
if (!allProcessorConf.empty) {
EclipseModel eclipseModel = project.getExtensions().getByType(EclipseModel.class);
eclipseModel.classpath {
file {
beforeMerged { cp ->
addEclipseOutput(project, cp, project.eclipse.processors.outputDir, false)
addEclipseOutput(project, cp, project.eclipse.processors.testOutputDir, true)
}
}
}
}
}
}

templateTask(
project,
Expand All @@ -142,6 +164,23 @@ class ProcessorsPlugin implements Plugin<Project> {
}
}

private static void addEclipseOutput(Project project, Classpath cp, File dir, boolean isTest) {
// Eclipse complains if the directory does not exist.
dir.mkdirs();
String path = project.relativePath(dir);
// Use build to reuse existing gitignore rule.
// Use .ecapt_generated to avoid stomping on gradle generated files.
String buildOutput = isTest ? "build/.ecapt_generated/test" : "build/.ecapt_generated/main"
SourceFolder sf = new SourceFolder(path, buildOutput);
Map<String, Object> attributes = sf.getEntryAttributes();
attributes.put("ignore_optional_problems", "true");
attributes.put("optional", "true");
if (isTest) {
attributes.put("test", "true");
}
cp.getEntries().add(sf);
}

private static void configureIdeaPlugin(Project project, Configuration allProcessorConf) {
project.plugins.withType(IdeaPlugin, { plugin ->
IdeaModel idea = project.extensions.getByType(IdeaModel)
Expand Down Expand Up @@ -352,6 +391,7 @@ class ProcessorsExtension {

class EclipseProcessorsExtension {
Object outputDir
Object testOutputDir
}

class IdeaProcessorsExtension {
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/org/inferred/gradle/apt-prefs.template
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ eclipse.preferences.version=1
<% if (!deps.empty) { %>\
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=${outputDir}
org.eclipse.jdt.apt.genTestSrcDir=${testOutputDir}
org.eclipse.jdt.apt.reconcileEnabled=true
<% } else { %>\
org.eclipse.jdt.apt.aptEnabled=false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,8 @@ class ProcessorsPluginFunctionalTest extends AbstractPluginTest {
def expected = """
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=generated${File.separator}java
org.eclipse.jdt.apt.genSrcDir=generated_src
org.eclipse.jdt.apt.genTestSrcDir=generated_testSrc
org.eclipse.jdt.apt.reconcileEnabled=true
""".replaceFirst('\n','').stripIndent()

Expand All @@ -395,6 +396,7 @@ class ProcessorsPluginFunctionalTest extends AbstractPluginTest {
eclipse.processors {
outputDir = 'something'
testOutputDir = 'testsomething'
}
"""

Expand All @@ -415,6 +417,7 @@ class ProcessorsPluginFunctionalTest extends AbstractPluginTest {
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=something
org.eclipse.jdt.apt.genTestSrcDir=testsomething
org.eclipse.jdt.apt.reconcileEnabled=true
""".replaceFirst('\n', '').stripIndent()

Expand Down

0 comments on commit 42ea796

Please sign in to comment.