+1
-1
@@ -7,7 +7,7 @@ subprojects { subproject ->
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(25)
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -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 })
|
||||
|
||||
@@ -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())
|
||||
|
||||
+15
-7
@@ -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<String, VariableInfo> variableInfoMap = new LinkedHashMap<>();
|
||||
private final Set<String> 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("<init>")) {
|
||||
if(TreeInfo.isCanonicalConstructor((JCTree) parent)) {
|
||||
return super.visitVariable(node, p);
|
||||
final MethodTree methodTree = (MethodTree) parent;
|
||||
if (isJava17OrHigher && (methodTree.getName().contentEquals("<init>"))) {
|
||||
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<Modifier> modifiers = variableTree.getModifiers().getFlags();
|
||||
return modifiers.contains(Modifier.FINAL);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
+95
@@ -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("<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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
@@ -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()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
-4
@@ -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("");
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import java.util.Set;
|
||||
|
||||
public class TestCase18 {
|
||||
private String name;
|
||||
private String password;
|
||||
private Set<Integer> roles;
|
||||
}
|
||||
+49
@@ -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() + ")";
|
||||
}
|
||||
}
|
||||
@@ -76,7 +76,6 @@ public class FinalGuardPlugin implements Plugin<Project> {
|
||||
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");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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<FileCollection> getClasspath();
|
||||
|
||||
@InputDirectory
|
||||
@PathSensitive(PathSensitivity.ABSOLUTE)
|
||||
public abstract DirectoryProperty getGraalVmHome();
|
||||
|
||||
@Input
|
||||
|
||||
@@ -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<Boolean> getMergeConfiguration();
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
lys.catalog.version=2025.12.27
|
||||
version.myGradlePlugins=2026.02.23
|
||||
version.gradle=9.3.1
|
||||
lys.catalog.version=2026.05.27
|
||||
version.myGradlePlugins=2026.06.07
|
||||
version.gradle=8.14.5
|
||||
|
||||
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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<FileCollection> getArchives();
|
||||
|
||||
@InputDirectory
|
||||
@PathSensitive(PathSensitivity.ABSOLUTE)
|
||||
public abstract DirectoryProperty getJavaHome();
|
||||
|
||||
@Input
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<FileCollection> 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<FileCollection> getInputFiles() {
|
||||
return getSourceSet()
|
||||
.map(SourceSet::getAllSource)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<Configuration> confProvider;
|
||||
|
||||
@TaskAction
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<String> getDeploymentName();
|
||||
|
||||
@InputFile
|
||||
@PathSensitive(PathSensitivity.NONE)
|
||||
public abstract RegularFileProperty getArtifact();
|
||||
|
||||
private String projectProperty(String key, String defaultValue) {
|
||||
|
||||
Reference in New Issue
Block a user