Add recipe to remove unused constructor and method parameters
What’s changed?
I’ve added a new recipe class, RemoveUnusedParams, that automatically removes parameters from Java methods when they’re declared but never referenced in the method body. It still respects:
- @Override methods (both explicit and those detected across the codebase)
- Native methods
- Parameters with their own annotations (e.g.
@Deprecated) - Constructors, varargs, interfaces, and other edge cases
Alongside the main recipe, I’ve expanded the unit tests to cover:
- Basic removal of unused parameters
- Preservation of used, overridden, and annotated parameters
- Constructors with unused arguments
- Varargs methods
- Native declarations
- Interface methods (no change expected)
What’s your motivation?
Over time, code tends to accumulate unused parameters—leftovers from refactoring, changing requirements, or evolving APIs. They add noise, make signatures harder to read, and can confuse future maintainers. This recipe:
- Keeps signatures lean, showing exactly what each method actually needs
- Automates cleanup, reducing manual PR churn
- Helps enforce consistency across a large codebase
Anything in particular you'd like reviewers to focus on?
- Override detection: Does the scan/visitor logic reliably catch all overridden methods?
- Edge-case coverage: Any real-world patterns (e.g. multi-parameter annotations, complex varargs, inner-class overrides) that might slip through?
-
Performance: The recipe now uses a single
JavaIsoVisitorpass—does it still scale on large projects?
Anyone you would like to review specifically?
- @Pankraz76
Have you considered any alternatives or workarounds?
- Keeping the original “shadow-stack” approach to detect name shadowing more precisely—but in practice it added complexity without significant benefit.
- Using a dedicated
MethodMatcheror type-based override detection; this felt like overkill for a simple annotation check.
Any additional context
- This work is driven by feedback on Issue #559.
- All existing tests pass, and I’ve verified the new cases locally with
mvn test. - I’ve also run the IntelliJ auto-formatter to keep the style consistent.
Checklist
- [x] I’ve added unit tests to cover both positive and negative cases
- [x] I’ve read and applied the recipe conventions and best practices
- [x] I’ve used the IntelliJ IDEA auto-formatter on affected files
This one done:
- https://pmd.github.io/pmd/pmd_rules_java_bestpractices.html#unusedformalparameter
Do we cover generic assignment as well? Might be dedicated recipe, to give options.
- https://pmd.github.io/pmd/pmd_rules_java_bestpractices.html#unusedassignment
This one done:
- https://pmd.github.io/pmd/pmd_rules_java_bestpractices.html#unusedformalparameter
Do we cover
genericassignment as well? Might be dedicated recipe, to give options.
- https://pmd.github.io/pmd/pmd_rules_java_bestpractices.html#unusedassignment
RemoveUnusedParams only handles unused parameters. Unused assignments would need their own recipe
this could be follow up:
- https://pmd.github.io/pmd/pmd_rules_java_bestpractices.html#unusedassignment
- https://github.com/apache/maven/pull/2350
this could be follow up:
- https://pmd.github.io/pmd/pmd_rules_java_bestpractices.html#unusedassignment
- UnusedAssignment apache/maven#2350
@Pankraz76 Thanks! I’ve opened Issue #564 to track adding the UnusedAssignment recipe. Please feel free to drop any additional examples or feedback over there!
Thanks both! I'm not likely to get to a review this week with travel ahead, but perhaps @MBoegers can have a look while I'm out.
items:
ReplaceStackWithDequeTest > replaceStack() FAILED
org.opentest4j.AssertionFailedError: [Unexpected result in "Test.java":
diff --git a/Test.java b/Test.java
index 40b7137..a72df50 100644
--- a/Test.java
+++ b/Test.java
@@ -4,7 +4,7 @@
class Test {
void test() {
- Deque<Integer> stack = new ArrayDeque<>();
+ Deque<Integer> arrayDeque = new ArrayDeque<>();
stack.add(1);
stack.add(2);
}
]
expected:
"import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;
class Test {
void test() {
Deque<Integer> stack = new ArrayDeque<>();
stack.add(1);
stack.add(2);
}
}"
but was:
"import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;
class Test {
void test() {
Deque<Integer> arrayDeque = new ArrayDeque<>();
stack.add(1);
stack.add(2);
}
}"
at app//org.openrewrite.test.RewriteTest.assertContentEquals(RewriteTest.java:622)
at app//org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:511)
at app//org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:130)
at app//org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:125)
at app//org.openrewrite.staticanalysis.ReplaceStackWithDequeTest.replaceStack(ReplaceStackWithDequeTest.java:36)
UnnecessaryExplicitTypeArgumentsTest > doesNotRemoveNecessaryTypeArguments() SKIPPED
UnnecessaryExplicitTypeArgumentsTest > withinLambda() SKIPPED
UnnecessaryExplicitTypeArgumentsTest STANDARD_ERROR
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: using JVM IR backend
logging: using JVM IR backend
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
UnnecessaryExplicitTypeArgumentsTest > kotlinTest > changeIfHasTypeInference() SKIPPED
NeedBracesTest > addBracesForIfBranch() SKIPPED
NeedBracesTest STANDARD_ERROR
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
StringLiteralEqualityTest > doNotChangeForKotlin() STANDARD_ERROR
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
UnnecessaryThrowsTest > necessaryThrowsFromConstructorWithUnused() SKIPPED
Gradle Test Executor 5 finished executing tests.
> Task :test
UseCollectionInterfacesTest > explicitImplementationClassInApi() SKIPPED
RenameLocalVariablesToCamelCaseTest > renameBothVariableAndUsage() SKIPPED
RenameLocalVariablesToCamelCaseTest > doNotChangeIfHasInternalModifier() STANDARD_ERROR
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
ReplaceLambdaWithMethodReferenceTest > toUnqualifiedMethodReference() STANDARD_ERROR
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64
logging: using JVM IR backend
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le]
Gradle Test Executor 2 finished executing tests.
Gradle Test Executor 3 finished executing tests.
1513 tests completed, 1 failed, 31 skipped
> Task :test FAILED
items:
ReplaceStackWithDequeTest > replaceStack() FAILED org.opentest4j.AssertionFailedError: [Unexpected result in "Test.java": diff --git a/Test.java b/Test.java index 40b7137..a72df50 100644 --- a/Test.java +++ b/Test.java @@ -4,7 +4,7 @@ class Test { void test() { - Deque<Integer> stack = new ArrayDeque<>(); + Deque<Integer> arrayDeque = new ArrayDeque<>(); stack.add(1); stack.add(2); } ] expected: "import java.util.ArrayDeque; import java.util.Deque; import java.util.Stack; class Test { void test() { Deque<Integer> stack = new ArrayDeque<>(); stack.add(1); stack.add(2); } }" but was: "import java.util.ArrayDeque; import java.util.Deque; import java.util.Stack; class Test { void test() { Deque<Integer> arrayDeque = new ArrayDeque<>(); stack.add(1); stack.add(2); } }" at app//org.openrewrite.test.RewriteTest.assertContentEquals(RewriteTest.java:622) at app//org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:511) at app//org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:130) at app//org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:125) at app//org.openrewrite.staticanalysis.ReplaceStackWithDequeTest.replaceStack(ReplaceStackWithDequeTest.java:36) UnnecessaryExplicitTypeArgumentsTest > doesNotRemoveNecessaryTypeArguments() SKIPPED UnnecessaryExplicitTypeArgumentsTest > withinLambda() SKIPPED UnnecessaryExplicitTypeArgumentsTest STANDARD_ERROR logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: using JVM IR backend logging: using JVM IR backend logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] UnnecessaryExplicitTypeArgumentsTest > kotlinTest > changeIfHasTypeInference() SKIPPED NeedBracesTest > addBracesForIfBranch() SKIPPED NeedBracesTest STANDARD_ERROR logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] StringLiteralEqualityTest > doNotChangeForKotlin() STANDARD_ERROR logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] UnnecessaryThrowsTest > necessaryThrowsFromConstructorWithUnused() SKIPPED Gradle Test Executor 5 finished executing tests. > Task :test UseCollectionInterfacesTest > explicitImplementationClassInApi() SKIPPED RenameLocalVariablesToCamelCaseTest > renameBothVariableAndUsage() SKIPPED RenameLocalVariablesToCamelCaseTest > doNotChangeIfHasInternalModifier() STANDARD_ERROR logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] ReplaceLambdaWithMethodReferenceTest > toUnqualifiedMethodReference() STANDARD_ERROR logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: using JDK home inferred from java.home: /usr/lib/jvm/temurin-21-jdk-amd64 logging: using JVM IR backend logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] logging: loading modules: [java.se, jdk.accessibility, jdk.attach, jdk.compiler, jdk.dynalink, jdk.httpserver, jdk.incubator.vector, jdk.jartool, jdk.javadoc, jdk.jconsole, jdk.jdi, jdk.jfr, jdk.jshell, jdk.jsobject, jdk.management, jdk.management.jfr, jdk.net, jdk.nio.mapmode, jdk.sctp, jdk.security.auth, jdk.security.jgss, jdk.unsupported, jdk.unsupported.desktop, jdk.xml.dom, java.base, java.compiler, java.datatransfer, java.desktop, java.xml, java.instrument, java.logging, java.management, java.management.rmi, java.rmi, java.naming, java.net.http, java.prefs, java.scripting, java.security.jgss, java.security.sasl, java.sql, java.transaction.xa, java.sql.rowset, java.xml.crypto, jdk.internal.jvmstat, jdk.internal.opt, jdk.zipfs, jdk.management.agent, jdk.jdwp.agent, jdk.internal.ed, jdk.internal.le] Gradle Test Executor 2 finished executing tests. Gradle Test Executor 3 finished executing tests. 1513 tests completed, 1 failed, 31 skipped > Task :test FAILED
This test is passed successfully on my local. I even tried ./gradle test on my local and all tests are passed. Do you know why it's failing ? @Pankraz76
no.
seems strange as hard error, not some circle count timeout which can happen as edge case.
would try to update git, integrate with main.
if remains, kill working dir, make new checkout with backup copy, of current project dir.
if remains then its some magic @timtebeek need to handle.
thanks
well done, lets merge.
Thanks both! Marked as ready for review for the wider team to have a look, as I'll be out for most of next week.
Thanks already! Couple fixes applied just now, and a few more hints added where more work is needed. Let me know if you'd like to continue this yourself.
Thank you for the updates and guidance! I’m tied up with some other work as well, but I’ll tackle the remaining items as soon as I have some free time. Please feel free to continue in the meantime.
Hey @timtebeek, thanks for flagging those edge cases—avoidDirectConflict, avoidInheritedConflict, and cascadeRemoveUnusedArguments. I’ll revisit the pruning logic with those in mind. In the meantime, if you have any suggestions on how to handle them, Let me know your thoughts! @Pankraz76
you are really talented, keep pushing @iddeepak.
This PR is stale because it has been open for 90 days with no activity. Remove stale label or comment or this will be closed in two weeks. PRs may be reopened when there is renewed interest.