diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java index 26c3e602c4..cbf0c79abe 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java @@ -39,6 +39,7 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Component; @@ -107,6 +108,9 @@ public abstract class AbstractSpotlessMojo extends AbstractMojo { @Component protected BuildContext buildContext; + @Component + private MavenSession mavenSession; + @Parameter(defaultValue = "${mojoExecution.goal}", required = true, readonly = true) private String goal; @@ -401,9 +405,10 @@ private FormatterConfig getFormatterConfig() { P2Provisioner p2Provisioner = P2Provisioner.createDefault(); List formatterStepFactories = getFormatterStepFactories(); FileLocator fileLocator = getFileLocator(); + final Optional userRatchetFrom = Optional.ofNullable((String) mavenSession.getUserProperties().get("ratchetFrom")); final Optional optionalRatchetFrom = Optional.ofNullable(this.ratchetFrom) .filter(ratchet -> !RATCHETFROM_NONE.equals(ratchet)); - return new FormatterConfig(baseDir, encoding, lineEndings, optionalRatchetFrom, provisioner, p2Provisioner, fileLocator, formatterStepFactories, Optional.ofNullable(setLicenseHeaderYearsFromGitHistory), lintSuppressions); + return new FormatterConfig(baseDir, encoding, lineEndings, userRatchetFrom, optionalRatchetFrom, provisioner, p2Provisioner, fileLocator, formatterStepFactories, Optional.ofNullable(setLicenseHeaderYearsFromGitHistory), lintSuppressions); } private FileLocator getFileLocator() { diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterConfig.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterConfig.java index 66fa572a25..0f4006ebf9 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterConfig.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterConfig.java @@ -30,6 +30,7 @@ public class FormatterConfig { private final String encoding; private final LineEnding lineEndings; + private final Optional userRatchetFrom; private final Optional ratchetFrom; private final Provisioner provisioner; private final P2Provisioner p2Provisioner; @@ -38,10 +39,11 @@ public class FormatterConfig { private final Optional spotlessSetLicenseHeaderYearsFromGitHistory; private final List lintSuppressions; - public FormatterConfig(File baseDir, String encoding, LineEnding lineEndings, Optional ratchetFrom, Provisioner provisioner, + public FormatterConfig(File baseDir, String encoding, LineEnding lineEndings, Optional userRatchetFrom, Optional ratchetFrom, Provisioner provisioner, P2Provisioner p2Provisioner, FileLocator fileLocator, List globalStepFactories, Optional spotlessSetLicenseHeaderYearsFromGitHistory, List lintSuppressions) { this.encoding = encoding; this.lineEndings = lineEndings; + this.userRatchetFrom = userRatchetFrom; this.ratchetFrom = ratchetFrom; this.provisioner = provisioner; this.p2Provisioner = p2Provisioner; @@ -59,6 +61,10 @@ public LineEnding getLineEndings() { return lineEndings; } + public Optional getUserRatchetFrom() { + return userRatchetFrom; + } + public Optional getRatchetFrom() { return ratchetFrom; } diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterFactory.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterFactory.java index 05c207d6d4..b205ede788 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterFactory.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/FormatterFactory.java @@ -175,13 +175,15 @@ private LineEnding lineEndings(FormatterConfig config) { } Optional ratchetFrom(FormatterConfig config) { - if (RATCHETFROM_NOT_SET_AT_FORMAT_LEVEL.equals(ratchetFrom)) { - return config.getRatchetFrom(); - } else if (RATCHETFROM_NONE.equals(ratchetFrom)) { - return Optional.empty(); - } else { - return Optional.ofNullable(ratchetFrom); - } + return config.getUserRatchetFrom() + .or(this::optionalRatchetFrom) + .or(config::getRatchetFrom) + .filter(ratchet -> !RATCHETFROM_NONE.equals(ratchet)); + } + + private Optional optionalRatchetFrom() { + return Optional.ofNullable(ratchetFrom) + .filter(ratchet -> !RATCHETFROM_NOT_SET_AT_FORMAT_LEVEL.equals(ratchet)); } private FormatterStepConfig stepConfig(Charset encoding, FormatterConfig config) {