From ac4b7848a55610d18862148fae3612504547a719 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Fri, 5 Jun 2026 17:28:36 +0800 Subject: [PATCH] downgrade to gradle 8.14.5 --- .../dependency/export/ExportDependencies.java | 2 + .../finalguard-javac-plugin/build.gradle | 6 -- .../woggioni/finalguard/FinalGuardPlugin.java | 22 +++-- .../net/woggioni/finalguard/RecordUtils.java | 95 +++++++++++++++++++ .../net/woggioni/finalguard/PluginTest.java | 6 ++ .../woggioni/finalguard/test/TestCase17.java | 4 - .../woggioni/finalguard/test/TestCase18.java | 7 ++ .../woggioni/finalguard/test/TestCase19.java | 49 ++++++++++ .../gradle/finalguard/FinalGuardPlugin.java | 1 - .../woggioni/gradle/graalvm/JlinkTask.java | 5 + .../graalvm/NativeImageConfigurationTask.java | 2 + gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../net/woggioni/gradle/jdeps/JdepsTask.java | 6 +- .../gradle/jpms/check/JPMSCheckTask.groovy | 3 + .../net/woggioni/gradle/lombok/Delombok.java | 6 ++ .../gradle/osgi/app/BundleFileTask.java | 2 + .../osgi/app/FrameworkPropertyFileTask.java | 2 + .../osgi/app/FrameworkRuntimeCheck.java | 6 +- .../gradle/osgi/app/JavaAgentFileTask.java | 2 + .../gradle/osgi/app/PropertyFileTask.java | 2 + .../osgi/app/SystemPackageExtraFileTask.java | 5 + .../osgi/app/SystemPropertyFileTask.java | 2 + .../woggioni/gradle/sambal/SignJarTask.java | 4 +- .../gradle/wildfly/Deploy2WildflyTask.java | 5 + 25 files changed, 225 insertions(+), 25 deletions(-) create mode 100644 finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/RecordUtils.java create mode 100644 finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase18.java create mode 100644 finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase19.java diff --git a/dependency-export/src/main/java/net/woggioni/gradle/dependency/export/ExportDependencies.java b/dependency-export/src/main/java/net/woggioni/gradle/dependency/export/ExportDependencies.java index 66d30ec..ed972af 100644 --- a/dependency-export/src/main/java/net/woggioni/gradle/dependency/export/ExportDependencies.java +++ b/dependency-export/src/main/java/net/woggioni/gradle/dependency/export/ExportDependencies.java @@ -26,6 +26,7 @@ import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.plugins.ReportingBasePlugin; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; @@ -54,6 +55,7 @@ import java.util.stream.Stream; import static net.woggioni.gradle.dependency.export.DependencyExportPlugin.DEPENDENCY_EXPORT_GROUP; +@CacheableTask public class ExportDependencies extends DefaultTask { @Getter(onMethod_ = { @Input }) diff --git a/finalguard/finalguard-javac-plugin/build.gradle b/finalguard/finalguard-javac-plugin/build.gradle index 7793624..bff913c 100644 --- a/finalguard/finalguard-javac-plugin/build.gradle +++ b/finalguard/finalguard-javac-plugin/build.gradle @@ -4,12 +4,6 @@ plugins { group = "net.woggioni.finalguard" -java { - toolchain { - languageVersion = JavaLanguageVersion.of(25) - } -} - java { sourceCompatibility(JavaVersion.VERSION_1_8.toString()) targetCompatibility(JavaVersion.VERSION_1_8.toString()) diff --git a/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/FinalGuardPlugin.java b/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/FinalGuardPlugin.java index 77ee349..4c05fad 100644 --- a/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/FinalGuardPlugin.java +++ b/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/FinalGuardPlugin.java @@ -21,12 +21,12 @@ 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 com.sun.tools.javac.tree.JCTree; -import com.sun.tools.javac.tree.TreeInfo; import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.Elements; import javax.tools.Diagnostic; import java.nio.file.Path; import java.nio.file.Paths; @@ -44,8 +44,6 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import static com.sun.tools.javac.code.Flags.RECORD; - public class FinalGuardPlugin implements Plugin { public static final String DEFAULT_LEVEL_KEY = "default.level"; public static final String EXCLUDE_KEY = "exclude"; @@ -185,6 +183,7 @@ public class FinalGuardPlugin implements Plugin { private final Configuration configuration; private final CompilationUnitTree compilationUnit; private final Trees trees; + private final Elements elements; private final Map variableInfoMap = new LinkedHashMap<>(); private final Set reassignedVariables = new HashSet<>(); @@ -192,6 +191,7 @@ public class FinalGuardPlugin implements Plugin { this.configuration = configuration; this.compilationUnit = compilationUnit; this.trees = Trees.instance(task); + this.elements = task.getElements(); } @Override @@ -203,6 +203,8 @@ public class FinalGuardPlugin implements Plugin { return null; // skip implicit constructor of anonymous class } } + variableInfoMap.clear(); + reassignedVariables.clear(); super.visitMethod(node, p); // Check for variables that could be final checkForFinalCandidates(); @@ -232,9 +234,13 @@ public class FinalGuardPlugin implements Plugin { type = VariableType.ABSTRACT_METHOD_PARAM; } else { type = VariableType.METHOD_PARAM; - if (isJava17OrHigher && ((MethodTree) parent).getName().contentEquals("")) { - if(TreeInfo.isCanonicalConstructor((JCTree) parent)) { - return super.visitVariable(node, p); + final MethodTree methodTree = (MethodTree) parent; + if (isJava17OrHigher && (methodTree.getName().contentEquals(""))) { + final TreePath grandParentPath = parentPath.getParentPath(); + if(grandParentPath.getLeaf().getKind() == Tree.Kind.RECORD) { + if(RecordUtils.isCanonicalConstructor(trees, elements, (TypeElement) trees.getElement(grandParentPath), parentPath)) { + return super.visitVariable(node, p); + } } } } @@ -317,5 +323,7 @@ public class FinalGuardPlugin implements Plugin { final Set modifiers = variableTree.getModifiers().getFlags(); return modifiers.contains(Modifier.FINAL); } + + } } \ No newline at end of file diff --git a/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/RecordUtils.java b/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/RecordUtils.java new file mode 100644 index 0000000..afee4f3 --- /dev/null +++ b/finalguard/finalguard-javac-plugin/src/main/java/net/woggioni/finalguard/RecordUtils.java @@ -0,0 +1,95 @@ +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("")) { + throw new IllegalArgumentException("Not a constructor: " + method.getName()); + } + + List params = method.getParameters(); + List 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; + } + } +} diff --git a/finalguard/finalguard-javac-plugin/src/test/java/net/woggioni/finalguard/PluginTest.java b/finalguard/finalguard-javac-plugin/src/test/java/net/woggioni/finalguard/PluginTest.java index 339e9bb..94b9947 100644 --- a/finalguard/finalguard-javac-plugin/src/test/java/net/woggioni/finalguard/PluginTest.java +++ b/finalguard/finalguard-javac-plugin/src/test/java/net/woggioni/finalguard/PluginTest.java @@ -171,6 +171,12 @@ public class PluginTest { Arrays.asList( METHOD_PARAM.getMessage("a") ) + ), + Arguments.of(prefix + "TestCase18.java", + Collections.emptyList() + ), + Arguments.of(prefix + "TestCase19.java", + Collections.emptyList() ) ); } diff --git a/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase17.java b/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase17.java index 50a8fe4..76eaa93 100644 --- a/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase17.java +++ b/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase17.java @@ -1,7 +1,3 @@ -import java.io.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - public record TestCase17(String s) { TestCase17(double a) { this(""); diff --git a/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase18.java b/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase18.java new file mode 100644 index 0000000..52ff0d3 --- /dev/null +++ b/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase18.java @@ -0,0 +1,7 @@ +import java.util.Set; + +public class TestCase18 { + private String name; + private String password; + private Set roles; +} \ No newline at end of file diff --git a/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase19.java b/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase19.java new file mode 100644 index 0000000..ccf86e7 --- /dev/null +++ b/finalguard/finalguard-javac-plugin/src/test/resources/net/woggioni/finalguard/test/TestCase19.java @@ -0,0 +1,49 @@ +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() + ")"; + } +} diff --git a/finalguard/src/main/java/net/woggioni/gradle/finalguard/FinalGuardPlugin.java b/finalguard/src/main/java/net/woggioni/gradle/finalguard/FinalGuardPlugin.java index 69fd857..b701787 100644 --- a/finalguard/src/main/java/net/woggioni/gradle/finalguard/FinalGuardPlugin.java +++ b/finalguard/src/main/java/net/woggioni/gradle/finalguard/FinalGuardPlugin.java @@ -76,7 +76,6 @@ public class FinalGuardPlugin implements Plugin { appendOption(xpluginArg, EXCLUDE_KEY, excludedPrefix); } options.getCompilerArgs().add(xpluginArg.toString()); - options.getAllCompilerArgs().add("-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED"); }); }); } diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java index ff7dbd1..06db5e1 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java @@ -17,12 +17,15 @@ import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.Optional; 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.jvm.toolchain.JavaInstallationMetadata; import org.gradle.jvm.toolchain.JavaLauncher; @@ -44,6 +47,7 @@ import java.util.function.Consumer; import static java.util.Optional.ofNullable; import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP; +@CacheableTask public abstract class JlinkTask extends Exec { private final JavaToolchainSpec toolchain; @@ -57,6 +61,7 @@ public abstract class JlinkTask extends Exec { public abstract Property getClasspath(); @InputDirectory + @PathSensitive(PathSensitivity.ABSOLUTE) public abstract DirectoryProperty getGraalVmHome(); @Input diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java index 5cd9389..9279f80 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java @@ -11,6 +11,7 @@ import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.OutputDirectory; @@ -31,6 +32,7 @@ import java.util.Optional; import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP; import static net.woggioni.gradle.graalvm.NativeImagePlugin.NATIVE_IMAGE_CONFIGURATION_FOLDER_NAME; +@CacheableTask public abstract class NativeImageConfigurationTask extends JavaExec { @Input public abstract Property getMergeConfiguration(); diff --git a/gradle.properties b/gradle.properties index 97b0dee..ff82b93 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -lys.catalog.version=2025.12.27 -version.myGradlePlugins=2026.02.23 +lys.catalog.version=2026.05.27 +version.myGradlePlugins=2026.06.05 version.gradle=9.3.1 gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5f38436..70fe02a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/jdeps/src/main/java/net/woggioni/gradle/jdeps/JdepsTask.java b/jdeps/src/main/java/net/woggioni/gradle/jdeps/JdepsTask.java index 6ede0ce..de81402 100644 --- a/jdeps/src/main/java/net/woggioni/gradle/jdeps/JdepsTask.java +++ b/jdeps/src/main/java/net/woggioni/gradle/jdeps/JdepsTask.java @@ -9,19 +9,21 @@ import org.gradle.api.file.FileCollection; import org.gradle.api.file.ProjectLayout; import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; -import org.gradle.api.plugins.BasePluginExtension; import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.JavaApplication; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.api.reporting.ReportingExtension; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.Optional; 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.jvm.toolchain.JavaToolchainService; import org.gradle.jvm.toolchain.JavaToolchainSpec; @@ -42,6 +44,7 @@ import java.util.function.Consumer; import static java.util.Optional.ofNullable; import static net.woggioni.gradle.jdeps.Constants.JDEPS_TASK_GROUP; +@CacheableTask public abstract class JdepsTask extends Exec { private final JavaToolchainSpec toolchain; @@ -58,6 +61,7 @@ public abstract class JdepsTask extends Exec { public abstract Property getArchives(); @InputDirectory + @PathSensitive(PathSensitivity.ABSOLUTE) public abstract DirectoryProperty getJavaHome(); @Input diff --git a/jpms-check/src/main/groovy/net/woggioni/gradle/jpms/check/JPMSCheckTask.groovy b/jpms-check/src/main/groovy/net/woggioni/gradle/jpms/check/JPMSCheckTask.groovy index 0aa7511..bcc5c7f 100644 --- a/jpms-check/src/main/groovy/net/woggioni/gradle/jpms/check/JPMSCheckTask.groovy +++ b/jpms-check/src/main/groovy/net/woggioni/gradle/jpms/check/JPMSCheckTask.groovy @@ -11,9 +11,11 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.result.ResolvedArtifactResult import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.Property +import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.TaskAction +import org.gradle.work.DisableCachingByDefault import java.nio.file.Files import java.nio.file.Path @@ -22,6 +24,7 @@ import java.util.stream.Collectors import java.util.stream.Stream import java.util.zip.ZipFile +@DisableCachingByDefault abstract class JPMSCheckTask extends DefaultTask { @Input diff --git a/lombok/src/main/java/net/woggioni/gradle/lombok/Delombok.java b/lombok/src/main/java/net/woggioni/gradle/lombok/Delombok.java index 9be9925..52a6bb4 100644 --- a/lombok/src/main/java/net/woggioni/gradle/lombok/Delombok.java +++ b/lombok/src/main/java/net/woggioni/gradle/lombok/Delombok.java @@ -7,10 +7,13 @@ import org.gradle.api.file.RegularFileProperty; import org.gradle.api.file.SourceDirectorySet; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.JavaExec; 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.internal.jvm.JavaModuleDetector; @@ -20,6 +23,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +@CacheableTask @RequiredArgsConstructor(onConstructor_ = {@Inject}) public abstract class Delombok extends JavaExec { @@ -42,6 +46,7 @@ public abstract class Delombok extends JavaExec { } @InputFiles + @PathSensitive(PathSensitivity.NONE) public Provider getSourceClasspath() { return getSourceSet() .map(SourceSet::getCompileClasspath); @@ -56,6 +61,7 @@ public abstract class Delombok extends JavaExec { @OutputDirectory abstract public RegularFileProperty getOutputDir(); @InputFiles + @PathSensitive(PathSensitivity.NONE) public Provider getInputFiles() { return getSourceSet() .map(SourceSet::getAllSource) diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/BundleFileTask.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/BundleFileTask.java index 19ef933..94ca3e0 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/BundleFileTask.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/BundleFileTask.java @@ -3,6 +3,7 @@ package net.woggioni.gradle.osgi.app; import aQute.bnd.osgi.Constants; import lombok.SneakyThrows; import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -15,6 +16,7 @@ import java.util.List; import java.util.jar.Attributes; import java.util.jar.JarFile; +@CacheableTask public class BundleFileTask extends DefaultTask { private final File systemBundleFile; diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkPropertyFileTask.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkPropertyFileTask.java index ae03f1c..848d1b3 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkPropertyFileTask.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkPropertyFileTask.java @@ -5,6 +5,7 @@ import lombok.SneakyThrows; import org.gradle.api.DefaultTask; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.MapProperty; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -15,6 +16,7 @@ import java.io.Writer; import java.nio.file.Files; import java.util.Properties; +@CacheableTask public class FrameworkPropertyFileTask extends DefaultTask { @OutputFile diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkRuntimeCheck.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkRuntimeCheck.java index b44028d..ee67a5a 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkRuntimeCheck.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/FrameworkRuntimeCheck.java @@ -7,7 +7,10 @@ import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; import org.gradle.api.artifacts.Configuration; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; 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 javax.inject.Inject; @@ -16,10 +19,11 @@ import java.net.URL; import java.net.URLClassLoader; import java.util.Set; +@CacheableTask @RequiredArgsConstructor(onConstructor_ = @Inject) public class FrameworkRuntimeCheck extends DefaultTask { - @Getter(onMethod_ = @InputFiles) + @Getter(onMethod_ = {@InputFiles, @PathSensitive(PathSensitivity.NONE)}) private final Provider confProvider; @TaskAction diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/JavaAgentFileTask.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/JavaAgentFileTask.java index 8f7f93b..04dbbb1 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/JavaAgentFileTask.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/JavaAgentFileTask.java @@ -5,6 +5,7 @@ import lombok.SneakyThrows; import org.gradle.api.DefaultTask; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.ListProperty; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -16,6 +17,7 @@ import java.nio.file.Files; import java.util.Collections; import java.util.Properties; +@CacheableTask public class JavaAgentFileTask extends DefaultTask { @OutputFile diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/PropertyFileTask.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/PropertyFileTask.java index 8fd6906..04f7a7c 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/PropertyFileTask.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/PropertyFileTask.java @@ -7,6 +7,7 @@ import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -17,6 +18,7 @@ import java.io.Writer; import java.nio.file.Files; import java.util.Properties; +@CacheableTask public class PropertyFileTask extends DefaultTask { @Getter(onMethod_ = @Input) diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPackageExtraFileTask.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPackageExtraFileTask.java index 8fefc79..cd1876f 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPackageExtraFileTask.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPackageExtraFileTask.java @@ -11,9 +11,12 @@ import org.gradle.api.artifacts.result.ResolvedArtifactResult; import org.gradle.api.file.FileCollection; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.ListProperty; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; 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 javax.inject.Inject; @@ -29,6 +32,7 @@ import java.util.jar.JarFile; import static net.woggioni.gradle.osgi.app.OsgiAppUtils.isBundle; import static net.woggioni.gradle.osgi.app.OsgiAppUtils.isJar; +@CacheableTask public class SystemPackageExtraFileTask extends DefaultTask { @Getter(onMethod_ = @Input) @@ -43,6 +47,7 @@ public class SystemPackageExtraFileTask extends DefaultTask { } @InputFiles + @PathSensitive(PathSensitivity.NONE) FileCollection getInputFiles() { return getProject().getConfigurations().getByName("systemPackages"); } diff --git a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPropertyFileTask.java b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPropertyFileTask.java index 2fe0f0c..c37e6fd 100644 --- a/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPropertyFileTask.java +++ b/osgi-app/src/main/java/net/woggioni/gradle/osgi/app/SystemPropertyFileTask.java @@ -5,6 +5,7 @@ import lombok.SneakyThrows; import org.gradle.api.DefaultTask; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.MapProperty; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -15,6 +16,7 @@ import java.io.Writer; import java.nio.file.Files; import java.util.Properties; +@CacheableTask public class SystemPropertyFileTask extends DefaultTask { @OutputFile diff --git a/sambal/src/main/java/net/woggioni/gradle/sambal/SignJarTask.java b/sambal/src/main/java/net/woggioni/gradle/sambal/SignJarTask.java index 5dcf14f..c9fcaed 100644 --- a/sambal/src/main/java/net/woggioni/gradle/sambal/SignJarTask.java +++ b/sambal/src/main/java/net/woggioni/gradle/sambal/SignJarTask.java @@ -1,7 +1,5 @@ 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.file.DirectoryProperty; import org.gradle.api.file.RegularFile; @@ -11,6 +9,7 @@ import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.Optional; @@ -23,6 +22,7 @@ import java.io.File; import java.util.Map; import java.util.TreeMap; +@CacheableTask abstract class SignJarTask extends DefaultTask { @InputFile public abstract RegularFileProperty getInputJarFile(); diff --git a/wildfly/src/main/java/net/woggioni/gradle/wildfly/Deploy2WildflyTask.java b/wildfly/src/main/java/net/woggioni/gradle/wildfly/Deploy2WildflyTask.java index 660883f..4fae1b6 100644 --- a/wildfly/src/main/java/net/woggioni/gradle/wildfly/Deploy2WildflyTask.java +++ b/wildfly/src/main/java/net/woggioni/gradle/wildfly/Deploy2WildflyTask.java @@ -3,13 +3,17 @@ package net.woggioni.gradle.wildfly; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Exec; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; import javax.inject.Inject; import java.util.Arrays; +@CacheableTask public abstract class Deploy2WildflyTask extends Exec { private static final String PROPERTY_PREFIX = "net.woggioni.gradle.wildfly."; private static final String HOST_PROPERTY_KEY = PROPERTY_PREFIX + "rpcHost"; @@ -32,6 +36,7 @@ public abstract class Deploy2WildflyTask extends Exec { public abstract Property getDeploymentName(); @InputFile + @PathSensitive(PathSensitivity.NONE) public abstract RegularFileProperty getArtifact(); private String projectProperty(String key, String defaultValue) {