[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