cbeust / jcommander

Command line parsing framework for Java
Apache License 2.0
1.94k stars 332 forks source link

@ParametersDelegate fails if delegate class implements BiPredicate #582

Open lindenb opened 3 months ago

lindenb commented 3 months ago

Hi,

I've got the following code:

@ParametersDelegate
private StructuralVariantComparator svComparator = new StructuralVariantComparator();

with:

public class StructuralVariantComparator implements BiPredicate<VariantContext,VariantContext> {
(....)

when I run my code (java 17/ jc 1.82), I got the following stacktrace:

Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make private boolean java.util.function.BiPredicate.lambda$or$2(java.util.function.BiPredicate,java.lang.Object,java.lang.Object) accessible: module java.base does not "opens java.util.function" to unnamed module @2a48d10f
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    at com.beust.jcommander.Parameterized.parseArg(Parameterized.java:123)
    at com.beust.jcommander.parser.DefaultParameterizedParser.parseArg(DefaultParameterizedParser.java:23)
    at com.beust.jcommander.JCommander.addDescription(JCommander.java:608)
    at com.beust.jcommander.JCommander.addDescription(JCommander.java:652)
    at com.beust.jcommander.JCommander.createDescriptions(JCommander.java:601)
    at com.beust.jcommander.JCommander.parse(JCommander.java:361)
    at com.beust.jcommander.JCommander.parse(JCommander.java:342)
    at com.github.lindenb.jvarkit.util.jcommander.Launcher.parseArgs(Launcher.java:541)
    at com.github.lindenb.jvarkit.util.jcommander.Launcher.instanceMain(Launcher.java:796)
    at com.github.lindenb.jvarkit.util.jcommander.Launcher.instanceMainWithExit(Launcher.java:982)
    at com.github.lindenb.jvarkit.tools.structvar.SVCasesControls.main(SVCasesControls.java:232)

But there is no error if I comment out the interface:

public class StructuralVariantComparator /* implements BiPredicate<VariantContext,VariantContext> */{
mkarg commented 1 month ago

Thank you for filing this bug request! Do you feel confident providing a PR with a test (and possibly a proposed solution)?