Compare commits

..
1 Commits
Author SHA1 Message Date
woggioni 727e6ad896 Excluded generated sources from finalguard plugin
CI / build (push) Has been cancelled
Also added optional list of exclusion paths
2026-02-19 19:41:05 +08:00
33 changed files with 36 additions and 403 deletions
+4 -27
View File
@@ -2,38 +2,15 @@ name: CI
on: on:
push: push:
branches: [ master ] branches: [ master ]
env:
JAVA_VERSION: '21'
GRADLE_VERSION: '8.14.5'
jobs: jobs:
build: build:
name: Compile, test and publish
runs-on: hostinger runs-on: hostinger
timeout-minutes: 30
container:
image: gitea.woggioni.net/woggioni/gitea-runner/debian:latest
steps: steps:
- name: Checkout repository - name: Checkout sources
uses: actions/checkout@v6 uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'oracle'
java-version: ${{ env.JAVA_VERSION }}
- name: Setup Gradle - name: Setup Gradle
uses: gradle/actions/setup-gradle@v6 uses: gradle/actions/setup-gradle@v3
with: - name: Execute Gradle build
gradle-version: ${{ env.GRADLE_VERSION }}
# Only the main branch writes to the cache; PRs/feature branches read-only
cache-read-only: false
- name: Run Gradle build
run: ./gradlew build --no-daemon
- name: Publish to Gitea
env: env:
PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }} PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }}
run: ./gradlew build publish run: ./gradlew build publish
+1 -1
View File
@@ -7,7 +7,7 @@ subprojects { subproject ->
java { java {
toolchain { toolchain {
languageVersion = JavaLanguageVersion.of(21) languageVersion = JavaLanguageVersion.of(25)
} }
} }
@@ -26,7 +26,6 @@ import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.plugins.ReportingBasePlugin; import org.gradle.api.plugins.ReportingBasePlugin;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.InputFiles;
@@ -55,7 +54,6 @@ import java.util.stream.Stream;
import static net.woggioni.gradle.dependency.export.DependencyExportPlugin.DEPENDENCY_EXPORT_GROUP; import static net.woggioni.gradle.dependency.export.DependencyExportPlugin.DEPENDENCY_EXPORT_GROUP;
@CacheableTask
public class ExportDependencies extends DefaultTask { public class ExportDependencies extends DefaultTask {
@Getter(onMethod_ = { @Input }) @Getter(onMethod_ = { @Input })
@@ -4,6 +4,12 @@ plugins {
group = "net.woggioni.finalguard" group = "net.woggioni.finalguard"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
java { java {
sourceCompatibility(JavaVersion.VERSION_1_8.toString()) sourceCompatibility(JavaVersion.VERSION_1_8.toString())
targetCompatibility(JavaVersion.VERSION_1_8.toString()) targetCompatibility(JavaVersion.VERSION_1_8.toString())
@@ -33,7 +39,6 @@ test {
sourceSets["test"].resources.srcDirs sourceSets["test"].resources.srcDirs
systemProperty("test.compilation.classpath", systemProperty("test.compilation.classpath",
String.join(File.pathSeparator, testCompilationClassPath.collect { it.toString() })) String.join(File.pathSeparator, testCompilationClassPath.collect { it.toString() }))
jvmArgs('--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED')
} }
@@ -1,53 +1,19 @@
package net.woggioni.finalguard; package net.woggioni.finalguard;
import com.sun.source.tree.AssignmentTree; import com.sun.source.tree.*;
import com.sun.source.tree.BlockTree; import com.sun.source.util.*;
import com.sun.source.tree.CatchTree;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.CompoundAssignmentTree;
import com.sun.source.tree.EnhancedForLoopTree;
import com.sun.source.tree.ForLoopTree;
import com.sun.source.tree.IdentifierTree;
import com.sun.source.tree.LambdaExpressionTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.TryTree;
import com.sun.source.tree.UnaryTree;
import com.sun.source.tree.VariableTree;
import com.sun.source.util.JavacTask;
import com.sun.source.util.Plugin;
import com.sun.source.util.TaskEvent;
import com.sun.source.util.TaskListener;
import com.sun.source.util.TreePath;
import com.sun.source.util.TreePathScanner;
import com.sun.source.util.Trees;
import javax.lang.model.element.Element; import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier; import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.tools.Diagnostic; import javax.tools.Diagnostic;
import java.nio.file.Path; import java.util.*;
import java.nio.file.Paths;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class FinalGuardPlugin implements Plugin { public class FinalGuardPlugin implements Plugin {
public static final String DEFAULT_LEVEL_KEY = "default.level"; public static final String DEFAULT_LEVEL_KEY = "default.level";
public static final String EXCLUDE_KEY = "exclude"; public static final String EXCLUDE_KEY = "exclude";
public static final String IGNORE_ABSTRACT_METHOD_PARAMS_KEY = "net.woggioni.finalguard.ignore.abstract.method.params";
enum VariableType { enum VariableType {
LOCAL_VAR("local.variable.level"), LOCAL_VAR("local.variable.level"),
METHOD_PARAM("method.param.level"), METHOD_PARAM("method.param.level"),
@@ -109,8 +75,7 @@ public class FinalGuardPlugin implements Plugin {
final String[] parts = arg.split("=", 2); final String[] parts = arg.split("=", 2);
if (parts.length == 2) { if (parts.length == 2) {
if (EXCLUDE_KEY.equals(parts[0])) { if (EXCLUDE_KEY.equals(parts[0])) {
final Path path = Paths.get(parts[1]); excluded.add(parts[1]);
excluded.add(path.toAbsolutePath().toString());
} else { } else {
props.put(parts[0], parts[1]); props.put(parts[0], parts[1]);
} }
@@ -183,7 +148,6 @@ public class FinalGuardPlugin implements Plugin {
private final Configuration configuration; private final Configuration configuration;
private final CompilationUnitTree compilationUnit; private final CompilationUnitTree compilationUnit;
private final Trees trees; private final Trees trees;
private final Elements elements;
private final Map<String, VariableInfo> variableInfoMap = new LinkedHashMap<>(); private final Map<String, VariableInfo> variableInfoMap = new LinkedHashMap<>();
private final Set<String> reassignedVariables = new HashSet<>(); private final Set<String> reassignedVariables = new HashSet<>();
@@ -191,25 +155,15 @@ public class FinalGuardPlugin implements Plugin {
this.configuration = configuration; this.configuration = configuration;
this.compilationUnit = compilationUnit; this.compilationUnit = compilationUnit;
this.trees = Trees.instance(task); this.trees = Trees.instance(task);
this.elements = task.getElements();
} }
@Override @Override
public Void visitMethod(MethodTree node, Void p) { public Void visitMethod(MethodTree node, Void p) {
if (node.getName().contentEquals("<init>")) {
TreePath classPath = getCurrentPath().getParentPath();
if (classPath != null && classPath.getParentPath() != null
&& classPath.getParentPath().getLeaf().getKind() == Tree.Kind.NEW_CLASS) {
return null; // skip implicit constructor of anonymous class
}
}
variableInfoMap.clear(); variableInfoMap.clear();
reassignedVariables.clear(); reassignedVariables.clear();
super.visitMethod(node, p); super.visitMethod(node, p);
// Check for variables that could be final // Check for variables that could be final
checkForFinalCandidates(); checkForFinalCandidates();
variableInfoMap.clear();
reassignedVariables.clear();
return null; return null;
} }
@@ -234,16 +188,13 @@ public class FinalGuardPlugin implements Plugin {
type = VariableType.ABSTRACT_METHOD_PARAM; type = VariableType.ABSTRACT_METHOD_PARAM;
} else { } else {
type = VariableType.METHOD_PARAM; type = VariableType.METHOD_PARAM;
final MethodTree methodTree = (MethodTree) parent; if (isJava17OrHigher && ((MethodTree) parent).getName().contentEquals("<init>")) {
if (isJava17OrHigher && (methodTree.getName().contentEquals("<init>"))) {
final TreePath grandParentPath = parentPath.getParentPath(); final TreePath grandParentPath = parentPath.getParentPath();
if (grandParentPath.getLeaf().getKind() == Tree.Kind.RECORD) { if (grandParentPath.getLeaf().getKind() == Tree.Kind.RECORD) {
if(RecordUtils.isCanonicalConstructor(trees, elements, (TypeElement) trees.getElement(grandParentPath), parentPath)) {
return super.visitVariable(node, p); return super.visitVariable(node, p);
} }
} }
} }
}
} else if (parent instanceof BlockTree) { } else if (parent instanceof BlockTree) {
type = VariableType.LOCAL_VAR; type = VariableType.LOCAL_VAR;
} else { } else {
@@ -323,7 +274,5 @@ public class FinalGuardPlugin implements Plugin {
final Set<Modifier> modifiers = variableTree.getModifiers().getFlags(); final Set<Modifier> modifiers = variableTree.getModifiers().getFlags();
return modifiers.contains(Modifier.FINAL); return modifiers.contains(Modifier.FINAL);
} }
} }
} }
@@ -1,95 +0,0 @@
package net.woggioni.finalguard;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.VariableTree;
import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import java.util.List;
public class RecordUtils {
private static class RecordConstructorDetector {
private final Trees trees;
public RecordConstructorDetector(Trees trees) {
this.trees = trees;
}
public enum ConstructorKind {
CANONICAL_FULL, // Record(int x, String y) { ... }
CANONICAL_COMPACT, // Record { ... }
SECONDARY // Record(String s) { this(0, s); }
}
public ConstructorKind detect(TreePath parent, MethodTree method, TypeElement recordType) {
// 1. Verify it's a constructor
if (method.getReturnType() != null || !method.getName().contentEquals("<init>")) {
throw new IllegalArgumentException("Not a constructor: " + method.getName());
}
List<? extends VariableTree> params = method.getParameters();
List<? extends javax.lang.model.element.RecordComponentElement> components =
recordType.getRecordComponents();
// 2. Compact constructor: no explicit parameters
if (params.isEmpty()) {
return ConstructorKind.CANONICAL_COMPACT;
}
// 3. Check if parameters match record components exactly
if (params.size() == components.size()) {
boolean allMatch = true;
for (int i = 0; i < components.size(); i++) {
TypeMirror paramType = trees.getTypeMirror(new TreePath(parent, params.get(i)));
TypeMirror componentType = components.get(i).asType();
if (paramType == null || !paramType.toString().equals(componentType.toString())) {
allMatch = false;
break;
}
}
if (allMatch) {
return ConstructorKind.CANONICAL_FULL;
}
}
// 4. Otherwise it's a secondary constructor
return ConstructorKind.SECONDARY;
}
}
public static boolean isCanonicalConstructor(Trees trees, Elements elements, TypeElement recordType, TreePath method) {
final RecordConstructorDetector.ConstructorKind ctorKind = new RecordConstructorDetector(trees).detect(method, (MethodTree) method.getLeaf(), recordType);
return ctorKind == RecordConstructorDetector.ConstructorKind.CANONICAL_COMPACT || ctorKind == RecordConstructorDetector.ConstructorKind.CANONICAL_FULL;
}
public static boolean isCompactConstructor(Trees trees, Elements elements, TypeElement recordType, TreePath method) {
final RecordConstructorDetector.ConstructorKind ctorKind = new RecordConstructorDetector(trees).detect(method, (MethodTree) method.getLeaf(), recordType);
return ctorKind == RecordConstructorDetector.ConstructorKind.CANONICAL_COMPACT;
}
public static boolean isCanonicalConstructor(Trees trees, Elements elements, TreePath method) {
Element element = trees.getElement(method);
if(element instanceof ExecutableElement) {
return elements.isCanonicalConstructor((ExecutableElement) element);
} else {
return false;
}
}
public static boolean isCompactConstructor(Trees trees, Elements elements, TreePath method) {
Element element = trees.getElement(method);
if(element instanceof ExecutableElement) {
return elements.isCompactConstructor((ExecutableElement) element);
} else {
return false;
}
}
}
@@ -154,30 +154,7 @@ public class PluginTest {
)), )),
Arguments.of(prefix + "TestCase12.java", Collections.emptyList()), Arguments.of(prefix + "TestCase12.java", Collections.emptyList()),
Arguments.of(prefix + "TestCase13.java", Arrays.asList(ABSTRACT_METHOD_PARAM.getMessage("x"), ABSTRACT_METHOD_PARAM.getMessage("y"))), Arguments.of(prefix + "TestCase13.java", Arrays.asList(ABSTRACT_METHOD_PARAM.getMessage("x"), ABSTRACT_METHOD_PARAM.getMessage("y"))),
Arguments.of(prefix + "TestCase14.java", Arrays.asList(ABSTRACT_METHOD_PARAM.getMessage("x"), ABSTRACT_METHOD_PARAM.getMessage("y"))), Arguments.of(prefix + "TestCase14.java", Arrays.asList(ABSTRACT_METHOD_PARAM.getMessage("x"), ABSTRACT_METHOD_PARAM.getMessage("y")))
Arguments.of(prefix + "TestCase15.java",
Arrays.asList(
LOCAL_VAR.getMessage("a"),
METHOD_PARAM.getMessage("source"))),
Arguments.of(prefix + "TestCase16.java",
Arrays.asList(
METHOD_PARAM.getMessage("c"),
LOCAL_VAR.getMessage("d"),
METHOD_PARAM.getMessage("e"),
LOCAL_VAR.getMessage("f")
)
),
Arguments.of(prefix + "TestCase17.java",
Arrays.asList(
METHOD_PARAM.getMessage("a")
)
),
Arguments.of(prefix + "TestCase18.java",
Collections.emptyList()
),
Arguments.of(prefix + "TestCase19.java",
Collections.emptyList()
)
); );
} }
} }
@@ -1,24 +0,0 @@
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
public class TestCase15 {
public static void foo() {
final InputStream source = null;
final InputStream is = new FilterInputStream(source) {
@Override
public int read() throws IOException {
int a = 5;
return a;
}
};
}
static class Bar extends FilterInputStream {
public Bar(InputStream source) {
super(source);
}
};
}
@@ -1,18 +0,0 @@
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
public record TestCase16(double a, double b) {
TestCase16(double c) {
this(c, 2.0);
int d = 42;
System.out.println(d);
}
double foo(double e) {
int f = 42;
System.out.println(f);
return a;
}
}
@@ -1,5 +0,0 @@
public record TestCase17(String s) {
TestCase17(double a) {
this("");
}
}
@@ -1,7 +0,0 @@
import java.util.Set;
public class TestCase18 {
private String name;
private String password;
private Set<Integer> roles;
}
@@ -1,49 +0,0 @@
public class TestCase19 {
private long id;
@java.lang.SuppressWarnings("all")
public TestCase19() {
}
@java.lang.SuppressWarnings("all")
public long getId() {
return this.id;
}
@java.lang.SuppressWarnings("all")
public void setId(final long id) {
this.id = id;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public boolean equals(final java.lang.Object o) {
if (o == this) return true;
if (!(o instanceof TestCase19)) return false;
final TestCase19 other = (TestCase19) o;
if (!other.canEqual((java.lang.Object) this)) return false;
if (this.getId() != other.getId()) return false;
return true;
}
@java.lang.SuppressWarnings("all")
protected boolean canEqual(final java.lang.Object other) {
return other instanceof TestCase19;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public int hashCode() {
final int PRIME = 59;
int result = 1;
final long $id = this.getId();
result = result * PRIME + (int) ($id >>> 32 ^ $id);
return result;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public java.lang.String toString() {
return "TestCase19(id=" + this.getId() + ")";
}
}
@@ -16,7 +16,6 @@ import org.gradle.api.tasks.compile.JavaCompile;
import javax.tools.Diagnostic; import javax.tools.Diagnostic;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
import java.util.Optional;
import java.util.jar.Attributes; import java.util.jar.Attributes;
import java.util.jar.Manifest; import java.util.jar.Manifest;
@@ -57,10 +56,7 @@ public class FinalGuardPlugin implements Plugin<Project> {
tasks.withType(JavaCompile.class, javaCompileTask -> { tasks.withType(JavaCompile.class, javaCompileTask -> {
javaCompileTask.doFirst(t -> { javaCompileTask.doFirst(t -> {
final CompileOptions options = javaCompileTask.getOptions(); final CompileOptions options = javaCompileTask.getOptions();
options.setAnnotationProcessorPath(Optional.ofNullable(options.getAnnotationProcessorPath()) options.setAnnotationProcessorPath(options.getAnnotationProcessorPath().plus(javacPluginConfiguration));
.orElseGet(project::files)
.plus(javacPluginConfiguration)
);
final StringBuilder xpluginArg = new StringBuilder("-Xplugin:").append(JAVAC_PLUGIN_NAME); final StringBuilder xpluginArg = new StringBuilder("-Xplugin:").append(JAVAC_PLUGIN_NAME);
appendOption(xpluginArg, "default.level", finalGuardExtension.getDefaultLevel()); appendOption(xpluginArg, "default.level", finalGuardExtension.getDefaultLevel());
appendOption(xpluginArg, "local.variable.level", finalGuardExtension.getLocalVariableLevel()); appendOption(xpluginArg, "local.variable.level", finalGuardExtension.getLocalVariableLevel());
@@ -71,7 +67,7 @@ public class FinalGuardPlugin implements Plugin<Project> {
appendOption(xpluginArg, "catch.param.level", finalGuardExtension.getCatchParameterLevel()); appendOption(xpluginArg, "catch.param.level", finalGuardExtension.getCatchParameterLevel());
appendOption(xpluginArg, "lambda.param.level", finalGuardExtension.getLambdaParameterLevel()); appendOption(xpluginArg, "lambda.param.level", finalGuardExtension.getLambdaParameterLevel());
if (finalGuardExtension.getSkipGeneratedSources().getOrElse(true)) { if (finalGuardExtension.getSkipGeneratedSources().getOrElse(true)) {
final File generatedSourceDir = project.getLayout().getBuildDirectory().getAsFile().get(); final File generatedSourceDir = options.getGeneratedSourceOutputDirectory().getAsFile().getOrNull();
if (generatedSourceDir != null) { if (generatedSourceDir != null) {
appendOption(xpluginArg, EXCLUDE_KEY, generatedSourceDir.getAbsolutePath()); appendOption(xpluginArg, EXCLUDE_KEY, generatedSourceDir.getAbsolutePath());
} }
@@ -17,15 +17,12 @@ import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Exec;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.internal.jvm.JavaModuleDetector; import org.gradle.internal.jvm.JavaModuleDetector;
import org.gradle.jvm.toolchain.JavaInstallationMetadata; import org.gradle.jvm.toolchain.JavaInstallationMetadata;
import org.gradle.jvm.toolchain.JavaLauncher; import org.gradle.jvm.toolchain.JavaLauncher;
@@ -47,7 +44,6 @@ import java.util.function.Consumer;
import static java.util.Optional.ofNullable; import static java.util.Optional.ofNullable;
import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP; import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP;
@CacheableTask
public abstract class JlinkTask extends Exec { public abstract class JlinkTask extends Exec {
private final JavaToolchainSpec toolchain; private final JavaToolchainSpec toolchain;
@@ -61,7 +57,6 @@ public abstract class JlinkTask extends Exec {
public abstract Property<FileCollection> getClasspath(); public abstract Property<FileCollection> getClasspath();
@InputDirectory @InputDirectory
@PathSensitive(PathSensitivity.ABSOLUTE)
public abstract DirectoryProperty getGraalVmHome(); public abstract DirectoryProperty getGraalVmHome();
@Input @Input
@@ -11,7 +11,6 @@ import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.OutputDirectory;
@@ -32,7 +31,6 @@ import java.util.Optional;
import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP; import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP;
import static net.woggioni.gradle.graalvm.NativeImagePlugin.NATIVE_IMAGE_CONFIGURATION_FOLDER_NAME; import static net.woggioni.gradle.graalvm.NativeImagePlugin.NATIVE_IMAGE_CONFIGURATION_FOLDER_NAME;
@CacheableTask
public abstract class NativeImageConfigurationTask extends JavaExec { public abstract class NativeImageConfigurationTask extends JavaExec {
@Input @Input
public abstract Property<Boolean> getMergeConfiguration(); public abstract Property<Boolean> getMergeConfiguration();
@@ -58,10 +56,9 @@ public abstract class NativeImageConfigurationTask extends JavaExec {
JavaPluginExtension javaExtension = getProject().getExtensions().getByType(JavaPluginExtension.class); JavaPluginExtension javaExtension = getProject().getExtensions().getByType(JavaPluginExtension.class);
ExtensionContainer ext = getProject().getExtensions(); ExtensionContainer ext = getProject().getExtensions();
Property<JavaLauncher> javaLauncherProperty = getJavaLauncher(); Property<JavaLauncher> javaLauncherProperty = getJavaLauncher();
javaLauncherProperty.set(getProject().provider(() -> Optional.of(toolchain).orElseGet(javaExtension::getToolchain)).flatMap(toolchainSpec -> { Optional.ofNullable(ext.findByType(JavaToolchainService.class))
final JavaToolchainService jts = ext.findByType(JavaToolchainService.class); .flatMap(ts -> Optional.of(toolchain).map(ts::launcherFor))
return jts.launcherFor(toolchainSpec); .ifPresent(javaLauncherProperty::convention);
}));
if(!Objects.isNull(javaApplication)) { if(!Objects.isNull(javaApplication)) {
getMainClass().convention(javaApplication.getMainClass()); getMainClass().convention(javaApplication.getMainClass());
getMainModule().convention(javaApplication.getMainModule()); getMainModule().convention(javaApplication.getMainModule());
@@ -2,9 +2,7 @@ package net.woggioni.gradle.graalvm;
import org.gradle.api.Action; import org.gradle.api.Action;
import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileCollection;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.Nested;
import org.gradle.jvm.toolchain.JavaToolchainSpec; import org.gradle.jvm.toolchain.JavaToolchainSpec;
@@ -17,7 +15,6 @@ public interface NativeImageExtension {
JavaToolchainSpec toolchain(Action<? super JavaToolchainSpec> action); JavaToolchainSpec toolchain(Action<? super JavaToolchainSpec> action);
ListProperty<String> getJvmArgs();
Property<Boolean> getUseMusl(); Property<Boolean> getUseMusl();
Property<Boolean> getBuildStaticImage(); Property<Boolean> getBuildStaticImage();
Property<Boolean> getEnableFallback(); Property<Boolean> getEnableFallback();
@@ -31,7 +28,5 @@ public interface NativeImageExtension {
Property<Boolean> getUseLZMA(); Property<Boolean> getUseLZMA();
Property<Boolean> getVerbose();
Property<Integer> getCompressionLevel(); Property<Integer> getCompressionLevel();
} }
@@ -15,6 +15,8 @@ import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskContainer;
import org.gradle.jvm.tasks.Jar; import org.gradle.jvm.tasks.Jar;
import org.gradle.jvm.toolchain.JavaToolchainSpec;
import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec;
@CacheableTask @CacheableTask
public class NativeImagePlugin implements Plugin<Project> { public class NativeImagePlugin implements Plugin<Project> {
@@ -65,7 +67,6 @@ public class NativeImagePlugin implements Plugin<Project> {
nativeImageExtension.getBuildStaticImage().convention(false); nativeImageExtension.getBuildStaticImage().convention(false);
nativeImageExtension.getCompressExecutable().convention(false); nativeImageExtension.getCompressExecutable().convention(false);
nativeImageExtension.getUseLZMA().convention(false); nativeImageExtension.getUseLZMA().convention(false);
nativeImageExtension.getVerbose().convention(false);
nativeImageExtension.getCompressionLevel().convention(6); nativeImageExtension.getCompressionLevel().convention(6);
ConfigurationContainer configurations = project.getConfigurations(); ConfigurationContainer configurations = project.getConfigurations();
@@ -92,11 +93,9 @@ public class NativeImagePlugin implements Plugin<Project> {
jts.getLanguageVersion().convention(nativeImageExtension.getToolchain().getLanguageVersion()); jts.getLanguageVersion().convention(nativeImageExtension.getToolchain().getLanguageVersion());
}); });
nativeImageTask.getJvmArgs().set(nativeImageExtension.getJvmArgs());
nativeImageTask.getBuildStaticImage().set(nativeImageExtension.getBuildStaticImage()); nativeImageTask.getBuildStaticImage().set(nativeImageExtension.getBuildStaticImage());
nativeImageTask.getUseMusl().set(nativeImageExtension.getUseMusl()); nativeImageTask.getUseMusl().set(nativeImageExtension.getUseMusl());
nativeImageTask.getLinkAtBuildTime().set(nativeImageExtension.getLinkAtBuildTime()); nativeImageTask.getLinkAtBuildTime().set(nativeImageExtension.getLinkAtBuildTime());
nativeImageTask.getLinkAtBuildTime().set(nativeImageExtension.getVerbose());
nativeImageTask.getMainClass().set(nativeImageExtension.getMainClass()); nativeImageTask.getMainClass().set(nativeImageExtension.getMainClass());
nativeImageTask.getMainModule().set(nativeImageExtension.getMainModule()); nativeImageTask.getMainModule().set(nativeImageExtension.getMainModule());
nativeImageTask.getEnableFallback().set(nativeImageExtension.getEnableFallback()); nativeImageTask.getEnableFallback().set(nativeImageExtension.getEnableFallback());
@@ -13,7 +13,6 @@ import org.gradle.api.model.ObjectFactory;
import org.gradle.api.plugins.BasePluginExtension; import org.gradle.api.plugins.BasePluginExtension;
import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.ExtensionContainer;
import org.gradle.api.plugins.JavaApplication; import org.gradle.api.plugins.JavaApplication;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.CacheableTask;
@@ -66,8 +65,6 @@ public abstract class NativeImageTask extends Exec {
@PathSensitive(PathSensitivity.ABSOLUTE) @PathSensitive(PathSensitivity.ABSOLUTE)
public abstract RegularFileProperty getNativeCompilerPath(); public abstract RegularFileProperty getNativeCompilerPath();
@Input
public abstract ListProperty<String> getJvmArgs();
@Input @Input
public abstract Property<Boolean> getUseMusl(); public abstract Property<Boolean> getUseMusl();
@Input @Input
@@ -76,8 +73,7 @@ public abstract class NativeImageTask extends Exec {
public abstract Property<Boolean> getEnableFallback(); public abstract Property<Boolean> getEnableFallback();
@Input @Input
public abstract Property<Boolean> getLinkAtBuildTime(); public abstract Property<Boolean> getLinkAtBuildTime();
@Input
public abstract Property<Boolean> getVerbose();
@Input @Input
public abstract Property<String> getMainClass(); public abstract Property<String> getMainClass();
@@ -103,7 +99,6 @@ public abstract class NativeImageTask extends Exec {
getBuildStaticImage().convention(false); getBuildStaticImage().convention(false);
getEnableFallback().convention(false); getEnableFallback().convention(false);
getLinkAtBuildTime().convention(false); getLinkAtBuildTime().convention(false);
getVerbose().convention(false);
Provider<File> nativeComnpilerProvider = project.provider(() -> { Provider<File> nativeComnpilerProvider = project.provider(() -> {
String envVar; String envVar;
File compilerPath = null; File compilerPath = null;
@@ -148,12 +143,6 @@ public abstract class NativeImageTask extends Exec {
@Override @Override
public Iterable<String> asArguments() { public Iterable<String> asArguments() {
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
if(getJvmArgs().isPresent()) {
final List<String> jvmArgs = getJvmArgs().get();
for(final String arg : jvmArgs) {
result.add("-J" + arg);
}
}
if(!getEnableFallback().get()) { if(!getEnableFallback().get()) {
result.add("--no-fallback"); result.add("--no-fallback");
} }
@@ -166,9 +155,6 @@ public abstract class NativeImageTask extends Exec {
if(getLinkAtBuildTime().get()) { if(getLinkAtBuildTime().get()) {
result.add("--link-at-build-time"); result.add("--link-at-build-time");
} }
if(getVerbose().get()) {
result.add("--verbose");
}
if(getNativeCompilerPath().isPresent()) { if(getNativeCompilerPath().isPresent()) {
result.add("--native-compiler-path=" + getNativeCompilerPath().getAsFile().get()); result.add("--native-compiler-path=" + getNativeCompilerPath().getAsFile().get());
} }
+3 -3
View File
@@ -1,5 +1,5 @@
lys.catalog.version=2026.06.08 lys.catalog.version=2025.12.27
version.myGradlePlugins=2026.07.13 version.myGradlePlugins=2026.02.17
version.gradle=8.14.5 version.gradle=9.3.1
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
@@ -9,21 +9,19 @@ import org.gradle.api.file.FileCollection;
import org.gradle.api.file.ProjectLayout; import org.gradle.api.file.ProjectLayout;
import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging; import org.gradle.api.logging.Logging;
import org.gradle.api.plugins.BasePluginExtension;
import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.ExtensionContainer;
import org.gradle.api.plugins.JavaApplication; import org.gradle.api.plugins.JavaApplication;
import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.reporting.ReportingExtension; import org.gradle.api.reporting.ReportingExtension;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Exec;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.internal.jvm.JavaModuleDetector; import org.gradle.internal.jvm.JavaModuleDetector;
import org.gradle.jvm.toolchain.JavaToolchainService; import org.gradle.jvm.toolchain.JavaToolchainService;
import org.gradle.jvm.toolchain.JavaToolchainSpec; import org.gradle.jvm.toolchain.JavaToolchainSpec;
@@ -44,7 +42,6 @@ import java.util.function.Consumer;
import static java.util.Optional.ofNullable; import static java.util.Optional.ofNullable;
import static net.woggioni.gradle.jdeps.Constants.JDEPS_TASK_GROUP; import static net.woggioni.gradle.jdeps.Constants.JDEPS_TASK_GROUP;
@CacheableTask
public abstract class JdepsTask extends Exec { public abstract class JdepsTask extends Exec {
private final JavaToolchainSpec toolchain; private final JavaToolchainSpec toolchain;
@@ -61,7 +58,6 @@ public abstract class JdepsTask extends Exec {
public abstract Property<FileCollection> getArchives(); public abstract Property<FileCollection> getArchives();
@InputDirectory @InputDirectory
@PathSensitive(PathSensitivity.ABSOLUTE)
public abstract DirectoryProperty getJavaHome(); public abstract DirectoryProperty getJavaHome();
@Input @Input
-6
View File
@@ -2,12 +2,6 @@ plugins {
id 'groovy-gradle-plugin' id 'groovy-gradle-plugin'
} }
java {
sourceCompatibility(JavaVersion.VERSION_1_8.toString())
targetCompatibility(JavaVersion.VERSION_1_8.toString())
modularity.inferModulePath = false
}
gradlePlugin { gradlePlugin {
plugins { plugins {
create("JPMSCheckPlugin") { create("JPMSCheckPlugin") {
@@ -11,11 +11,9 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.result.ResolvedArtifactResult import org.gradle.api.artifacts.result.ResolvedArtifactResult
import org.gradle.api.file.RegularFileProperty import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
@@ -24,7 +22,6 @@ import java.util.stream.Collectors
import java.util.stream.Stream import java.util.stream.Stream
import java.util.zip.ZipFile import java.util.zip.ZipFile
@DisableCachingByDefault
abstract class JPMSCheckTask extends DefaultTask { abstract class JPMSCheckTask extends DefaultTask {
@Input @Input
@@ -7,13 +7,10 @@ import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.file.SourceDirectorySet; import org.gradle.api.file.SourceDirectorySet;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.SourceSet;
import org.gradle.internal.jvm.JavaModuleDetector; import org.gradle.internal.jvm.JavaModuleDetector;
@@ -23,7 +20,6 @@ import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@CacheableTask
@RequiredArgsConstructor(onConstructor_ = {@Inject}) @RequiredArgsConstructor(onConstructor_ = {@Inject})
public abstract class Delombok extends JavaExec { public abstract class Delombok extends JavaExec {
@@ -46,7 +42,6 @@ public abstract class Delombok extends JavaExec {
} }
@InputFiles @InputFiles
@PathSensitive(PathSensitivity.NONE)
public Provider<FileCollection> getSourceClasspath() { public Provider<FileCollection> getSourceClasspath() {
return getSourceSet() return getSourceSet()
.map(SourceSet::getCompileClasspath); .map(SourceSet::getCompileClasspath);
@@ -61,7 +56,6 @@ public abstract class Delombok extends JavaExec {
@OutputDirectory @OutputDirectory
abstract public RegularFileProperty getOutputDir(); abstract public RegularFileProperty getOutputDir();
@InputFiles @InputFiles
@PathSensitive(PathSensitivity.NONE)
public Provider<FileCollection> getInputFiles() { public Provider<FileCollection> getInputFiles() {
return getSourceSet() return getSourceSet()
.map(SourceSet::getAllSource) .map(SourceSet::getAllSource)
@@ -3,7 +3,6 @@ package net.woggioni.gradle.osgi.app;
import aQute.bnd.osgi.Constants; import aQute.bnd.osgi.Constants;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.gradle.api.DefaultTask; import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
@@ -16,7 +15,6 @@ import java.util.List;
import java.util.jar.Attributes; import java.util.jar.Attributes;
import java.util.jar.JarFile; import java.util.jar.JarFile;
@CacheableTask
public class BundleFileTask extends DefaultTask { public class BundleFileTask extends DefaultTask {
private final File systemBundleFile; private final File systemBundleFile;
@@ -5,7 +5,6 @@ import lombok.SneakyThrows;
import org.gradle.api.DefaultTask; import org.gradle.api.DefaultTask;
import org.gradle.api.model.ObjectFactory; import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.MapProperty;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
@@ -16,7 +15,6 @@ import java.io.Writer;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Properties; import java.util.Properties;
@CacheableTask
public class FrameworkPropertyFileTask extends DefaultTask { public class FrameworkPropertyFileTask extends DefaultTask {
@OutputFile @OutputFile
@@ -7,10 +7,7 @@ import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException; import org.gradle.api.GradleException;
import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Configuration;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
import javax.inject.Inject; import javax.inject.Inject;
@@ -19,11 +16,10 @@ import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.util.Set; import java.util.Set;
@CacheableTask
@RequiredArgsConstructor(onConstructor_ = @Inject) @RequiredArgsConstructor(onConstructor_ = @Inject)
public class FrameworkRuntimeCheck extends DefaultTask { public class FrameworkRuntimeCheck extends DefaultTask {
@Getter(onMethod_ = {@InputFiles, @PathSensitive(PathSensitivity.NONE)}) @Getter(onMethod_ = @InputFiles)
private final Provider<Configuration> confProvider; private final Provider<Configuration> confProvider;
@TaskAction @TaskAction
@@ -5,7 +5,6 @@ import lombok.SneakyThrows;
import org.gradle.api.DefaultTask; import org.gradle.api.DefaultTask;
import org.gradle.api.model.ObjectFactory; import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.ListProperty;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
@@ -17,7 +16,6 @@ import java.nio.file.Files;
import java.util.Collections; import java.util.Collections;
import java.util.Properties; import java.util.Properties;
@CacheableTask
public class JavaAgentFileTask extends DefaultTask { public class JavaAgentFileTask extends DefaultTask {
@OutputFile @OutputFile
@@ -7,7 +7,6 @@ import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
@@ -18,7 +17,6 @@ import java.io.Writer;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Properties; import java.util.Properties;
@CacheableTask
public class PropertyFileTask extends DefaultTask { public class PropertyFileTask extends DefaultTask {
@Getter(onMethod_ = @Input) @Getter(onMethod_ = @Input)
@@ -11,12 +11,9 @@ import org.gradle.api.artifacts.result.ResolvedArtifactResult;
import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileCollection;
import org.gradle.api.model.ObjectFactory; import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.ListProperty;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
import javax.inject.Inject; import javax.inject.Inject;
@@ -32,7 +29,6 @@ import java.util.jar.JarFile;
import static net.woggioni.gradle.osgi.app.OsgiAppUtils.isBundle; import static net.woggioni.gradle.osgi.app.OsgiAppUtils.isBundle;
import static net.woggioni.gradle.osgi.app.OsgiAppUtils.isJar; import static net.woggioni.gradle.osgi.app.OsgiAppUtils.isJar;
@CacheableTask
public class SystemPackageExtraFileTask extends DefaultTask { public class SystemPackageExtraFileTask extends DefaultTask {
@Getter(onMethod_ = @Input) @Getter(onMethod_ = @Input)
@@ -47,7 +43,6 @@ public class SystemPackageExtraFileTask extends DefaultTask {
} }
@InputFiles @InputFiles
@PathSensitive(PathSensitivity.NONE)
FileCollection getInputFiles() { FileCollection getInputFiles() {
return getProject().getConfigurations().getByName("systemPackages"); return getProject().getConfigurations().getByName("systemPackages");
} }
@@ -5,7 +5,6 @@ import lombok.SneakyThrows;
import org.gradle.api.DefaultTask; import org.gradle.api.DefaultTask;
import org.gradle.api.model.ObjectFactory; import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.MapProperty;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
@@ -16,7 +15,6 @@ import java.io.Writer;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Properties; import java.util.Properties;
@CacheableTask
public class SystemPropertyFileTask extends DefaultTask { public class SystemPropertyFileTask extends DefaultTask {
@OutputFile @OutputFile
@@ -1,5 +1,7 @@
package net.woggioni.gradle.sambal; package net.woggioni.gradle.sambal;
import org.codehaus.groovy.ant.Groovy;
import org.codehaus.groovy.util.StringUtil;
import org.gradle.api.DefaultTask; import org.gradle.api.DefaultTask;
import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.RegularFile; import org.gradle.api.file.RegularFile;
@@ -9,7 +11,6 @@ import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.Optional;
@@ -22,7 +23,6 @@ import java.io.File;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
@CacheableTask
abstract class SignJarTask extends DefaultTask { abstract class SignJarTask extends DefaultTask {
@InputFile @InputFile
public abstract RegularFileProperty getInputJarFile(); public abstract RegularFileProperty getInputJarFile();
@@ -3,17 +3,13 @@ package net.woggioni.gradle.wildfly;
import org.gradle.api.file.RegularFileProperty; import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider; import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Exec;
import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Arrays; import java.util.Arrays;
@CacheableTask
public abstract class Deploy2WildflyTask extends Exec { public abstract class Deploy2WildflyTask extends Exec {
private static final String PROPERTY_PREFIX = "net.woggioni.gradle.wildfly."; private static final String PROPERTY_PREFIX = "net.woggioni.gradle.wildfly.";
private static final String HOST_PROPERTY_KEY = PROPERTY_PREFIX + "rpcHost"; private static final String HOST_PROPERTY_KEY = PROPERTY_PREFIX + "rpcHost";
@@ -36,7 +32,6 @@ public abstract class Deploy2WildflyTask extends Exec {
public abstract Property<String> getDeploymentName(); public abstract Property<String> getDeploymentName();
@InputFile @InputFile
@PathSensitive(PathSensitivity.NONE)
public abstract RegularFileProperty getArtifact(); public abstract RegularFileProperty getArtifact();
private String projectProperty(String key, String defaultValue) { private String projectProperty(String key, String defaultValue) {