You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2016/06/24 05:25:24 UTC

karaf git commit: [KARAF-4519] If an action does not have a @Command annotation, fallback to calling a description() method via reflection to get an Action's description

Repository: karaf
Updated Branches:
  refs/heads/karaf-4.0.x 4ebe53009 -> 2027b3de2


[KARAF-4519] If an action does not have a @Command annotation, fallback to calling a description() method via reflection to get an Action's description


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

Branch: refs/heads/karaf-4.0.x
Commit: 2027b3de286390bb48b344a78bc28a5458c7cf25
Parents: 4ebe530
Author: lburgazzoli <lb...@gmail.com>
Authored: Thu May 5 17:24:58 2016 +0200
Committer: Jean-Baptiste Onofr� <jb...@apache.org>
Committed: Fri Jun 24 07:01:24 2016 +0200

----------------------------------------------------------------------
 .../karaf/shell/compat/CommandTracker.java      | 31 +++++++++++++++-----
 1 file changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/2027b3de/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java b/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
index 072857f..8891135 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
@@ -18,6 +18,7 @@
  */
 package org.apache.karaf.shell.compat;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -25,13 +26,13 @@ import org.apache.felix.gogo.runtime.CommandProxy;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.api.console.Parser;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.CommandWithAction;
 import org.apache.karaf.shell.api.console.CommandLine;
 import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Parser;
 import org.apache.karaf.shell.api.console.Session;
 import org.apache.karaf.shell.api.console.SessionFactory;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.CommandWithAction;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
@@ -39,7 +40,6 @@ import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 public class CommandTracker implements ServiceTrackerCustomizer<Object, Object> {
-
     SessionFactory sessionFactory;
     BundleContext context;
     ServiceTracker<?, ?> tracker;
@@ -66,6 +66,7 @@ public class CommandTracker implements ServiceTrackerCustomizer<Object, Object>
     @Override
     public Object addingService(final ServiceReference reference) {
         Object service = context.getService(reference);
+
         if (service instanceof CommandWithAction) {
             final CommandWithAction oldCommand = (CommandWithAction) service;
             final org.apache.karaf.shell.api.console.Command command = new org.apache.karaf.shell.api.console.Command() {
@@ -84,9 +85,16 @@ public class CommandTracker implements ServiceTrackerCustomizer<Object, Object>
                     final Command cmd = oldCommand.getActionClass().getAnnotation(Command.class);
                     if (cmd != null) {
                         return cmd.description();
-                    } else {
-                        return getName();
                     }
+
+                    try {
+                        Method method = oldCommand.getActionClass().getMethod("description");
+                        method.setAccessible(true);
+                        return (String) method.invoke(oldCommand.createNewAction());
+                    } catch (Throwable ignore) {
+                    }
+
+                    return getName();
                 }
 
                 @Override
@@ -132,9 +140,16 @@ public class CommandTracker implements ServiceTrackerCustomizer<Object, Object>
                     final org.apache.felix.gogo.commands.Command cmd = oldCommand.getActionClass().getAnnotation(org.apache.felix.gogo.commands.Command.class);
                     if (cmd != null) {
                         return cmd.description();
-                    } else {
-                        return getName();
                     }
+
+                    try {
+                        Method method = oldCommand.getActionClass().getMethod("description");
+                        method.setAccessible(true);
+                        return (String) method.invoke(oldCommand.createNewAction());
+                    } catch (Throwable ignore) {
+                    }
+
+                    return getName();
                 }
 
                 @Override