[jboss-cvs] JBossAS SVN: r59628 - projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Jan 14 15:59:45 EST 2007


Author: alesj
Date: 2007-01-14 15:59:42 -0500 (Sun, 14 Jan 2007)
New Revision: 59628

Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java
Log:
parameters lookup re-write

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java	2007-01-14 19:08:55 UTC (rev 59627)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java	2007-01-14 20:59:42 UTC (rev 59628)
@@ -23,11 +23,8 @@
 
 import java.security.*;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
-import org.jboss.beans.info.spi.BeanInfo;
 import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.ParameterMetaData;
@@ -263,61 +260,51 @@
 
    protected Object invoke(KernelConfigurator configurator, DispatchContext context, String name, List<ParameterMetaData> params) throws Throwable
    {
-      int size = (params != null) ? params.size() : 0;
-      Object[] parameters = new Object[size];
-      String[] signature = new String[size];
-      if (size > 0)
+      String[] signature;
+      Object[] parameters;
+      if (params == null || params.isEmpty())
       {
-         // lazy cl lookup
-         ClassLoader classLoader = context.getClassLoader();
-         for (int i = 0; i < size; i++)
+         signature = new String[0];
+         parameters = new Object[0];
+      }
+      else
+      {
+         int size = params.size();
+         signature = Configurator.getParameterTypes(log.isTraceEnabled(), params);
+         Object target = context.getTarget();
+         // TODO - is this ok for non-POJO targets?
+         if (target != null)
          {
-            ParameterMetaData pmd = params.get(i);
-            signature[i] = pmd.getType();
-            TypeInfo typeInfo;
-            if (signature[i] != null)
+            MethodInfo methodInfo = Configurator.findMethodInfo(configurator.getClassInfo(target.getClass()), name, signature);
+            parameters = Configurator.getParameters(log.isTraceEnabled(), context.getClassLoader(), methodInfo.getParameterTypes(), params);
+            // add some more info, if not yet set
+            for(int i = 0; i < size; i++)
             {
-               typeInfo = configurator.getClassInfo(signature[i], classLoader);
+               if (signature[i] == null)
+               {
+                  signature[i] = methodInfo.getParameterTypes()[i].getName();
+               }
             }
-            else
+         }
+         else
+         {
+            parameters = new Object[size];
+            ClassLoader classLoader = context.getClassLoader();
+            for (int i = 0; i < size; i++)
             {
-               typeInfo = findTypeInfo(configurator, context.getTarget(), name, i);
-               if (typeInfo != null)
+               ParameterMetaData pmd = params.get(i);
+               TypeInfo typeInfo = null;
+               if (signature[i] != null)
                {
-                  signature[i] = typeInfo.getName();
+                  typeInfo = configurator.getClassInfo(signature[i], classLoader);
                }
+               // typeInfo might be null, but we can still get value in some cases
+               parameters[i] = pmd.getValue().getValue(typeInfo, classLoader);
             }
-            parameters[i] = pmd.getValue().getValue(typeInfo, classLoader);
+
          }
       }
       return context.invoke(name, parameters, signature);
    }
 
-   private TypeInfo findTypeInfo(KernelConfigurator configurator, Object target, String name, int index) throws Throwable
-   {
-      if (target == null)
-      {
-         return null;
-      }
-      BeanInfo beanInfo = configurator.getBeanInfo(target.getClass());
-      Set<MethodInfo> methods = beanInfo.getMethods();
-      Set<MethodInfo> possibleMethods = new HashSet<MethodInfo>();
-      for (MethodInfo mi : methods)
-      {
-         if (name.equals(mi.getName()) && mi.getParameterTypes() != null && mi.getParameterTypes().length > index)
-         {
-            possibleMethods.add(mi);
-         }
-      }
-      if (possibleMethods.isEmpty() || possibleMethods.size() > 1)
-      {
-         log.warn("Unable to determine parameter TypeInfo, method name: " + name + ", index: " + index + ", target: " + target);
-         return null;
-      }
-      else
-      {
-         return possibleMethods.iterator().next().getParameterTypes()[index];
-      }
-   }
-
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list