Я недавно обновил свой проект до Picocli 4.2.0, включая удаление всех устаревших вызовов методов, и я продолжаю работу, которую я описал здесь . Я снова сталкиваюсь с той же проблемой - у меня есть поле, которое не сбрасывается. Единственное, что отличается от этого в моем другом вопросе, это то, что теперь поле является коллекцией. Код выглядит следующим образом:
@Command(name="watch", description="Alters the set of watched productions", subcommands={HelpCommand.class})
static public class Watch implements Runnable
{
@ParentCommand
ProductionC parent; // injected by picocli
@Option(names={"on", "-e", "--on", "--enable"}, description="Enables watching of given productions")
List<String> productionsToEnable;
@Option(names={"off", "-d", "--off", "--disable"}, description="Disables watching of given productions")
List<String> productionsToDisable;
@Override
public void run()
{ ... }
(полный код доступен здесь .)
В частности, productionsToEnable
не сбрасывается. Способ выполнения вызова является частью модульного теста:
@Test
public void testCanListTracedRules() throws Exception
{
loadRules();
agent.getInterpreter().eval("production watch --on b");
agent.getInterpreter().eval("production watch --on c");
final StringWriter result = new StringWriter();
agent.getPrinter().pushWriter(result);
agent.getInterpreter().eval("production watch");
agent.getPrinter().popWriter();
assertEquals("b\nc", result.toString());
}
(полный код доступен здесь .)
Строка "c"
из последнего вызов production watch
все еще присутствует в productionsToEnable
, когда команда production watch
вызывается в последнем eval
.
Обратите внимание, что приведенные выше ссылки на код находятся в ветке jsoar-command-performance
, если это полезно чтобы присмотреться.