FELIX-5201: Improved getClassName() method: check if the factory instance is a class name or is an object which provides a toString() method.


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1732784 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java b/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
index 15cafdb..a90fe14 100644
--- a/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
+++ b/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
@@ -719,7 +719,7 @@
             // The component does not provide a service, use the component definition as the name.
             Object componentDefinition = m_componentDefinition;
             if (componentDefinition != null) {
-                getName(componentDefinition, sb);
+                sb.append(toString(componentDefinition));
             } else { 
                 // No component definition means we are using a factory. If the component instance is available use it as the component name,
                 // alse use teh factory object as the component name.
@@ -730,7 +730,7 @@
                     // Check if a factory is set.
                     Object instanceFactory = m_instanceFactory;
                     if (instanceFactory != null) {
-                        getName(instanceFactory, sb);
+                        sb.append(toString(instanceFactory));
                     } else {
                         sb.append(super.toString());
                     }
@@ -740,22 +740,22 @@
         return sb.toString();
     }
     
-    private void getName(Object implementation, StringBuffer sb) {
+    private String toString(Object implementation) {
         if (implementation instanceof Class) {
-            sb.append(((Class<?>) implementation).getName());
+            return (((Class<?>) implementation).getName());
         } else {
             // If the implementation instance does not override "toString", just display
             // the class name, else display the component using its toString method
             try {
             Method m = implementation.getClass().getMethod("toString", new Class[0]);
                 if (m.getDeclaringClass().equals(Object.class)) {
-                    sb.append(implementation.getClass().getName());
+                    return implementation.getClass().getName();
                 } else {
-                    sb.append(implementation.toString());
+                    return implementation.toString();
                 }
             }  catch (java.lang.NoSuchMethodException e) {
                 // Just display the class name
-                sb.append(implementation.getClass().getName());
+                return implementation.getClass().getName();
             }
         }
     }
@@ -790,7 +790,7 @@
         
         Object instanceFactory = m_instanceFactory;
         if (instanceFactory != null) {
-            return instanceFactory.getClass().getName();
+            return toString(instanceFactory);
         } else {
             // unexpected.
             return ComponentImpl.class.getName();