Skip to content

Commit 30d7b04

Browse files
committed
Allow external configuration for additional args in ToolExecBase
In case buildscripts need to define additional arguments that cannot be added to the task itself.
1 parent 724269f commit 30d7b04

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

gradleutils-shared/src/main/java/net/minecraftforge/gradleutils/shared/EnhancedProblems.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ final void reportToolExecEagerArgs(Task task) {
211211
this.getReporter().report(id(String.format("%s-eager-args", className.toLowerCase(Locale.ROOT)), String.format("%s implementation adds arguments without using addArguments()", className)), spec -> spec
212212
.details(String.format(
213213
"A ToolExecBase task is eagerly adding arguments using JavaExec#args without using ToolExecBase#addArguments.\n" +
214-
"This may cause implementations or superclasses to have their arguments ignored or missing.\n" +
214+
"This may cause unintended behavior as the arguemnts given to the tool will contain the arguments in both of these method calls.\n" +
215215
"Affected task: %s (%s)", task, task.getClass()))
216216
.severity(Severity.WARNING)
217217
.stackLocation()

gradleutils-shared/src/main/java/net/minecraftforge/gradleutils/shared/ToolExecBase.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,20 @@
99
import org.gradle.api.file.FileSystemLocation;
1010
import org.gradle.api.file.FileSystemLocationProperty;
1111
import org.gradle.api.file.ProjectLayout;
12+
import org.gradle.api.provider.ListProperty;
1213
import org.gradle.api.provider.Provider;
1314
import org.gradle.api.specs.Spec;
15+
import org.gradle.api.tasks.Input;
1416
import org.gradle.api.tasks.Internal;
1517
import org.gradle.api.tasks.JavaExec;
18+
import org.gradle.api.tasks.Optional;
1619
import org.jetbrains.annotations.MustBeInvokedByOverriders;
1720
import org.jetbrains.annotations.Nullable;
1821

1922
import javax.inject.Inject;
2023
import java.io.File;
24+
import java.util.Collections;
25+
import java.util.List;
2126
import java.util.Locale;
2227
import java.util.Objects;
2328

@@ -34,6 +39,11 @@ public abstract class ToolExecBase<P extends EnhancedProblems> extends JavaExec
3439
/// The default tool directory (usage is not required).
3540
protected final DirectoryProperty defaultToolDir;
3641

42+
/// Additional arguments to use when invoking the tool. Use in configuration instead of [#args].
43+
///
44+
/// @return The list property for the additional arguments
45+
abstract @Input @Optional ListProperty<String> getAdditionalArgs();
46+
3747
/// The project layout provided by Gradle services.
3848
///
3949
/// @return The project layout
@@ -98,17 +108,19 @@ private <T extends FileSystemLocation> Transformer<T, T> ensureFileLocationInter
98108
/// This method should be overridden by subclasses to add arguments to this task via [JavaExec#args]. To preserve
99109
/// arguments added by superclasses, this method [must be invoked by overriders][MustBeInvokedByOverriders].
100110
@MustBeInvokedByOverriders
101-
protected void addArguments() { }
111+
protected void addArguments() {
112+
this.args(this.getAdditionalArgs().getOrElse(Collections.emptyList()));
113+
}
102114

103115
/// @implNote Not invoking this method from an overriding method *will* result in the tool never being executed and
104116
/// [#addArguments()] never being run.
105117
@Override
106118
public void exec() {
107-
if (this.getArgs().isEmpty())
108-
this.addArguments();
109-
else
119+
if (!this.getArgs().isEmpty())
110120
this.getProblems().reportToolExecEagerArgs(this);
111121

122+
this.addArguments();
123+
112124
this.getLogger().info("{} {}", this.getClasspath().getAsPath(), String.join(" ", this.getArgs()));
113125

114126
super.exec();

0 commit comments

Comments
 (0)