-
Notifications
You must be signed in to change notification settings - Fork 440
Closed
Labels
status: in-progress 👷♂️theme: annotation-procAn issue or change related to the annotation processorAn issue or change related to the annotation processortheme: arg-groupAn issue or change related to argument groupsAn issue or change related to argument groupstype: bug 🐛
Milestone
Description
The following example uses a Mixin to add an ArgGroup which contains two boolean flags.
import picocli.CommandLine;
import picocli.CommandLine.ArgGroup;
import picocli.CommandLine.Command;
import picocli.CommandLine.Mixin;
import picocli.CommandLine.Option;
@Command(name = "Demo CLI Tool", description = "Short demo to showcase problem negatable option",
mixinStandardHelpOptions = true)
public class Application implements Runnable {
@Mixin
private WrapperClass wrapper;
@Override
public void run() {
System.out.println(wrapper.getCustom().flag1);
System.out.println(wrapper.getCustom().flag2);
}
public static void main(String[] args) {
int exitCode = new CommandLine(new Application()).execute(args);
System.exit(exitCode);
}
}
@Command //I've seen this annotation on the Mixin in issue #2309, but doesn't change the error
class WrapperClass {
@ArgGroup(exclusive = false)
MyArgGroup custom = new MyArgGroup();
public MyArgGroup getCustom() {
return custom;
}
static class MyArgGroup {
@Option(names = "--flag1", description = "first cool flag", negatable = false, defaultValue = "true") boolean flag1;
@Option(names = "--flag2", description = "second cool flag", negatable = true, defaultValue = "true") boolean flag2;
}
}
Setting "negatable = true" on them breaks compilation with the following:
DuplicateOptionAnnotationsException
(default-compile) on project net.snobo.democli: Compilation failure
FATAL ERROR: picocli.CommandLine$DuplicateOptionAnnotationsException: Option name '--no-flag2' is used by both field boolean net.snobo.demo.WrapperClass.MyArgGroup.flag2 and field boolean net.snobo.demo.WrapperClass.MyArgGroup.flag2
at picocli.CommandLine$DuplicateOptionAnnotationsException.create(CommandLine.java:18698)
at picocli.CommandLine$DuplicateOptionAnnotationsException.access$2900(CommandLine.java:18692)
at picocli.CommandLine$Model$CommandSpec.addOptionNegative(CommandLine.java:6828)
at picocli.CommandLine$Model$CommandSpec.addOption(CommandLine.java:6797)
at picocli.CommandLine$Model$CommandSpec.addMixin(CommandLine.java:7036)
at picocli.CommandLine$Model$CommandSpec.addMixin(CommandLine.java:7007)
at picocli.codegen.annotation.processing.AbstractCommandSpecProcessor$Context.connectModel(AbstractCommandSpecProcessor.java:938)
at picocli.codegen.annotation.processing.AbstractCommandSpecProcessor$Context.access$000(AbstractCommandSpecProcessor.java:829)
at picocli.codegen.annotation.processing.AbstractCommandSpecProcessor.tryProcess(AbstractCommandSpecProcessor.java:209)
at picocli.codegen.annotation.processing.AbstractCommandSpecProcessor.process(AbstractCommandSpecProcessor.java:168)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1021)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:937)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1265)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1380)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1272)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126)
at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174)
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1134)
at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:187)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:370)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:351)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:171)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:163)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:298)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:960)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:293)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:196)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
JDK: Azul Zulu 21.0.4
Maven: 3.8.7
OS: Windows
If I can provide any more useful info, please let me know!
Metadata
Metadata
Assignees
Labels
status: in-progress 👷♂️theme: annotation-procAn issue or change related to the annotation processorAn issue or change related to the annotation processortheme: arg-groupAn issue or change related to argument groupsAn issue or change related to argument groupstype: bug 🐛