Index: lutinutil/src/java/org/codelutin/option/OptionKey.java diff -u lutinutil/src/java/org/codelutin/option/OptionKey.java:1.2 lutinutil/src/java/org/codelutin/option/OptionKey.java:1.3 --- lutinutil/src/java/org/codelutin/option/OptionKey.java:1.2 Mon Dec 31 05:26:36 2007 +++ lutinutil/src/java/org/codelutin/option/OptionKey.java Thu Jan 3 06:00:53 2008 @@ -62,12 +62,15 @@ /** la liste des options instanciées lors du dernier parsing */ final protected List options; - /** le constructeur d'option à utilisé */ + /** le constructeur d'option à utiliser */ protected Constructor optionConstructor; /** la classe concrete de l'action de l'option liée (calculé au runtime) */ protected Class actionClass; + /** le constructeur d'action à utiliser */ + protected Constructor actionConstructor; + /** l'unique instance de l'action liée */ protected A action; @@ -152,7 +155,18 @@ throw new IllegalStateException("no concrete action found for " + abstractActionClass); } try { - action = actionClass.getConstructor(parser.getClass()).newInstance(parser); + if(actionConstructor==null) { + try { + actionConstructor = actionClass.getConstructor(); + } catch (NoSuchMethodException e) { + actionConstructor = actionClass.getConstructor(parser.getClass()); + } + } + if (actionConstructor.getParameterTypes().length == 0) { + action = actionConstructor.newInstance(); + } else { + action = actionConstructor.newInstance(parser); + } } catch (Exception e) { throw new RuntimeException(e); } @@ -179,4 +193,9 @@ throw new RuntimeException(e); } } + + @Override + public String toString() { + return super.toString()+'<'+optionKey+'>'; + } }