Compare commits
1
Commits
master
..
727e6ad896
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
727e6ad896
|
@@ -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
@@ -7,7 +7,7 @@ subprojects { subproject ->
|
|||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain {
|
toolchain {
|
||||||
languageVersion = JavaLanguageVersion.of(21)
|
languageVersion = JavaLanguageVersion.of(25)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-2
@@ -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')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+7
-58
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-95
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-24
@@ -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()
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-24
@@ -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);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
-18
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-5
@@ -1,5 +0,0 @@
|
|||||||
public record TestCase17(String s) {
|
|
||||||
TestCase17(double a) {
|
|
||||||
this("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class TestCase18 {
|
|
||||||
private String name;
|
|
||||||
private String password;
|
|
||||||
private Set<Integer> roles;
|
|
||||||
}
|
|
||||||
-49
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user