You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2014/02/14 13:44:12 UTC

[02/15] git commit: [KARAF-2756] Fix @Completer to correctly handle multi-valued arguments

[KARAF-2756] Fix @Completer to correctly handle multi-valued arguments


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/ef7ba257
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/ef7ba257
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/ef7ba257

Branch: refs/heads/master
Commit: ef7ba257f8517fafdd84fd61486df76bf1dee6d0
Parents: 83042cf
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Feb 14 11:41:07 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Feb 14 13:43:57 2014 +0100

----------------------------------------------------------------------
 .../shell/console/completer/ArgumentCompleter.java  | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/ef7ba257/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java b/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
index ea6a5d4..26090b0 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
@@ -67,7 +67,6 @@ public class ArgumentCompleter implements Completer {
     final Map<Option, Field> fields = new HashMap<Option, Field>();
     final Map<String, Option> options = new HashMap<String, Option>();
     final Map<Integer, Field> arguments = new HashMap<Integer, Field>();
-    final Map<Field, org.apache.karaf.shell.commands.Completer> completerAnnotations = new HashMap<Field, org.apache.karaf.shell.commands.Completer>();
     boolean strict = true;
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -98,12 +97,6 @@ public class ArgumentCompleter implements Completer {
                         arguments.put(key, field);
                     }
                 }
-                if (option != null || argument != null) {
-                    org.apache.karaf.shell.commands.Completer completer = field.getAnnotation(org.apache.karaf.shell.commands.Completer.class);
-                    if (completer != null) {
-                        completerAnnotations.put(field, completer);
-                    }
-                }
             }
         }
         options.put(HelpOption.HELP.name(), HelpOption.HELP);
@@ -115,11 +108,14 @@ public class ArgumentCompleter implements Completer {
             Map<String, Completer> focl = ((CompletableFunction) function).getOptionalCompleters();
             List<Completer> fcl = ((CompletableFunction) function).getCompleters();
             if (focl == null && fcl == null) {
+                boolean multi = false;
                 for (int key = 0; key < arguments.size(); key++) {
                     Completer completer = null;
                     Field field = arguments.get(key);
                     if (field != null) {
-                        org.apache.karaf.shell.commands.Completer ann = completerAnnotations.get(field);
+                        Argument argument = field.getAnnotation(Argument.class);
+                        multi = (argument != null && argument.multiValued());
+                        org.apache.karaf.shell.commands.Completer ann = field.getAnnotation(org.apache.karaf.shell.commands.Completer.class);
                         if (ann != null) {
                             Class clazz = ann.value();
                             String[] values = ann.values();
@@ -138,7 +134,7 @@ public class ArgumentCompleter implements Completer {
                     }
                     argsCompleters.add(completer);
                 }
-                if (argsCompleters.isEmpty()) {
+                if (argsCompleters.isEmpty() || !multi) {
                     argsCompleters.add(NullCompleter.INSTANCE);
                 }
                 optionalCompleters = new HashMap<String, Completer>();
@@ -146,7 +142,7 @@ public class ArgumentCompleter implements Completer {
                     Completer completer = null;
                     Field field = fields.get(option);
                     if (field != null) {
-                        org.apache.karaf.shell.commands.Completer ann = completerAnnotations.get(field);
+                        org.apache.karaf.shell.commands.Completer ann = field.getAnnotation(org.apache.karaf.shell.commands.Completer.class);
                         if (ann != null) {
                             Class clazz = ann.value();
                             String[] values = ann.values();