From 1cd6bbeccac4069e1cd858460aa39559ec316e79 Mon Sep 17 00:00:00 2001 From: Frank Vennemeyer Date: Fri, 5 May 2017 08:00:25 +0200 Subject: [PATCH] Align Java Eclipse formatter gradle interface with greclipse/scala as discussed in #94. --- plugin-gradle/README.md | 2 +- .../gradle/spotless/JavaExtension.java | 49 +++++++++++++++++-- .../diffplug/gradle/spotless/SelfTest.java | 2 +- spotlessSelf.gradle | 2 +- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 80bb2ffed..1e69e9169 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -112,7 +112,7 @@ spotless { removeUnusedImports() // removes any unused imports - eclipseFormatFile 'spotless.eclipseformat.xml' // XML file dumped out by the Eclipse formatter + eclipse().configFile 'spotless.eclipseformat.xml' // XML file dumped out by the Eclipse formatter // If you have Eclipse preference or property files, you can use them too. } } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java index ed98a13ec..cf118449d 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java @@ -15,6 +15,8 @@ */ package com.diffplug.gradle.spotless; +import static com.diffplug.gradle.spotless.PluginGradlePreconditions.requireElementsNonNull; + import java.util.List; import java.util.Objects; @@ -24,6 +26,8 @@ import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; +import com.diffplug.common.base.StringPrinter; +import com.diffplug.spotless.FormatterStep; import com.diffplug.spotless.SerializableFileFilter; import com.diffplug.spotless.extra.java.EclipseFormatterStep; import com.diffplug.spotless.generic.LicenseHeaderStep; @@ -59,17 +63,23 @@ public void importOrderFile(Object importOrderFile) { addStep(ImportOrderStep.createFromFile(getProject().file(importOrderFile))); } + /** Use {@link #eclipse()} instead */ + @Deprecated public void eclipseFormatFile(Object eclipseFormatFile) { eclipseFormatFile(EclipseFormatterStep.defaultVersion(), eclipseFormatFile); } + /** Use {@link #eclipse(String)} instead */ + @Deprecated public void eclipseFormatFile(String eclipseVersion, Object eclipseFormatFile) { Objects.requireNonNull(eclipseVersion, "eclipseVersion"); Objects.requireNonNull(eclipseFormatFile, "eclipseFormatFile"); - Project project = getProject(); - addStep(EclipseFormatterStep.create(eclipseVersion, - project.files(eclipseFormatFile).getFiles(), - GradleProvisioner.fromProject(project))); + getProject().getLogger().warn( + StringPrinter.buildStringFromLines( + "'eclipseFormatFile [version] ' is deprecated.", + "Use 'eclipse([version]).configFile()' instead.", + "For details see https://github.com/diffplug/spotless/tree/master/plugin-gradle#applying-to-java-source")); + eclipse(eclipseVersion).configFile(eclipseFormatFile); } /** Removes any unused imports. */ @@ -93,6 +103,37 @@ public void googleJavaFormat(String version) { addStep(GoogleJavaFormatStep.create(version, GradleProvisioner.fromProject(getProject()))); } + public EclipseConfig eclipse() { + return eclipse(EclipseFormatterStep.defaultVersion()); + } + + public EclipseConfig eclipse(String version) { + return new EclipseConfig(version); + } + + public class EclipseConfig { + final String version; + Object[] configFiles; + + EclipseConfig(String version) { + configFiles = new Object[0]; + this.version = Objects.requireNonNull(version); + addStep(createStep()); + } + + public void configFile(Object... configFiles) { + this.configFiles = requireElementsNonNull(configFiles); + replaceStep(createStep()); + } + + private FormatterStep createStep() { + Project project = getProject(); + return EclipseFormatterStep.create(version, + project.files(configFiles).getFiles(), + GradleProvisioner.fromProject(project)); + } + } + /** If the user hasn't specified the files yet, we'll assume he/she means all of the java files. */ @Override protected void setupTask(SpotlessTask task) { diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SelfTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SelfTest.java index c79f5bd37..79456587a 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SelfTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SelfTest.java @@ -94,7 +94,7 @@ private static void runTasksManually(Type type) throws Exception { java.target("**/*.java"); java.licenseHeaderFile("spotless.license.java"); java.importOrderFile("spotless.importorder"); - java.eclipseFormatFile("spotless.eclipseformat.xml"); + java.eclipse().configFile("spotless.eclipseformat.xml"); java.trimTrailingWhitespace(); java.customLazy("Lambda fix", () -> raw -> { if (!raw.contains("public class SelfTest ")) { diff --git a/spotlessSelf.gradle b/spotlessSelf.gradle index bed0662ed..edc69e345 100644 --- a/spotlessSelf.gradle +++ b/spotlessSelf.gradle @@ -23,7 +23,7 @@ spotless { bumpThisNumberIfACustomStepChanges(1) licenseHeaderFile 'spotless.license' importOrderFile 'spotless.importorder' - eclipseFormatFile 'spotless.eclipseformat.xml' + eclipse().configFile 'spotless.eclipseformat.xml' trimTrailingWhitespace() removeUnusedImports() }