diff --git a/changelog/@unreleased/pr-794.v2.yml b/changelog/@unreleased/pr-794.v2.yml new file mode 100644 index 000000000..b8085f49a --- /dev/null +++ b/changelog/@unreleased/pr-794.v2.yml @@ -0,0 +1,6 @@ +type: feature +feature: + description: Automatically configure the [Intellij Eclipse format plugin](https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter) + to use the eclipse formatter + links: + - https://github.com/palantir/gradle-baseline/pull/794 diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java index 449bc6540..949db9ff0 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java @@ -19,7 +19,6 @@ import com.diffplug.gradle.spotless.SpotlessExtension; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.file.ConfigurableFileCollection; @@ -35,10 +34,9 @@ class BaselineFormat extends AbstractBaselinePlugin { public void apply(Project project) { this.project = project; - Path eclipseXml = Paths.get(getConfigDir(), "spotless/eclipse.xml"); - project.getPluginManager().withPlugin("java", plugin -> { project.getPluginManager().apply("com.diffplug.gradle.spotless"); + Path eclipseXml = eclipseConfigFile(project); project.getExtensions().getByType(SpotlessExtension.class).java(java -> { // Configure a lazy FileCollection then pass it as the target @@ -78,4 +76,8 @@ public void apply(Project project) { static boolean eclipseFormattingEnabled(Project project) { return project.hasProperty(ECLIPSE_FORMATTING); } + + static Path eclipseConfigFile(Project project) { + return project.getRootDir().toPath().resolve(".baseline/spotless/eclipse.xml"); + } } diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineIdea.groovy b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineIdea.groovy index 4d60b9682..216043c6e 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineIdea.groovy +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineIdea.groovy @@ -19,6 +19,7 @@ package com.palantir.baseline.plugins import groovy.transform.CompileStatic import groovy.xml.XmlUtil import java.nio.file.Files +import java.nio.file.Path import java.nio.file.Paths import org.eclipse.jgit.api.Git import org.eclipse.jgit.transport.URIish @@ -27,7 +28,6 @@ import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.FileTreeElement import org.gradle.api.specs.Spec -import org.gradle.api.tasks.compile.JavaCompile import org.gradle.plugins.ide.idea.GenerateIdeaModule import org.gradle.plugins.ide.idea.GenerateIdeaProject import org.gradle.plugins.ide.idea.GenerateIdeaWorkspace @@ -51,6 +51,7 @@ class BaselineIdea extends AbstractBaselinePlugin { addCodeStyle(node) addCopyright(node) addCheckstyle(node) + addEclipseFormat(node) addGit(node) addInspectionProjectProfile(node) addJavacSettings(node) @@ -136,6 +137,41 @@ class BaselineIdea extends AbstractBaselinePlugin { copyrightManager.@default = lastFileName } + private void addEclipseFormat(node) { + def baselineFormat = project.plugins.findPlugin(BaselineFormat) + if (baselineFormat == null) { + project.logger.debug "Baseline: Skipping IDEA eclipse format configuration since baseline-format not applied" + return + } + + if (!BaselineFormat.eclipseFormattingEnabled(project)) { + project.logger.debug "Baseline: Not configuring EclipseCodeFormatter because com.palantir.baseline-format.eclipse is not enabled in gradle.properties" + return; + } + + Path formatterConfig = BaselineFormat.eclipseConfigFile(project) + if (!Files.exists(formatterConfig)) { + project.logger.warn "Please run ./gradlew baselineUpdateConfig to create eclipse formatter config: " + formatterConfig + return + } + + project.logger.debug "Baseline: Configuring EclipseCodeFormatter plugin for Idea" + node.append(new XmlParser().parseText(""" + + + + """)) + def externalDependencies = matchOrCreateChild(node, 'component', [name: 'ExternalDependencies']) + matchOrCreateChild(externalDependencies, 'plugin', [id: 'EclipseCodeFormatter']) + } + private void addCheckstyle(node) { def checkstyle = project.plugins.findPlugin(BaselineCheckstyle) if (checkstyle == null) { @@ -161,7 +197,6 @@ class BaselineIdea extends AbstractBaselinePlugin { """.stripIndent())) - def externalDependencies = matchOrCreateChild(node, 'component', [name: 'ExternalDependencies']) matchOrCreateChild(externalDependencies, 'plugin', [id: 'CheckStyle-IDEA']) }