protected void orderParameters(List<ParameterMetaData> parameters) { ParameterMetaData[] pmds = new ParameterMetaData[parameters.size()]; for(ParameterMetaData pmd : parameters) { int index = pmd.getIndex(); // lets first try to set those with explicit index if (pmd instanceof AbstractConstructorArg && ((AbstractConstructorArg)pmd).isExplicitIndex()) { if (pmds[index] != null) throw new IllegalArgumentException("Argument with index: " + index + " already set!"); pmds[index] = pmd; } } int index = 0; for(ParameterMetaData pmd : parameters) { // then just put the others in the free places if ((pmd instanceof AbstractConstructorArg && ((AbstractConstructorArg)pmd).isExplicitIndex() == false)) { while(pmds[index] != null) index++; pmds[index] = pmd; } index++; } // todo clone md parameters.clear(); parameters.addAll(Arrays.asList(pmds)); }
/** * Get the parameters types * * @param trace whether trace is enabled * @param parameters the parameter metadata * @return an array of parameter types * @throws Throwable for any error */ public static String[] getParameterTypes(boolean trace, List<ParameterMetaData> parameters) throws Throwable { if (parameters == null) return null; String[] paramTypes = new String[parameters.size()]; int x = 0; for (Iterator<ParameterMetaData> i = parameters.iterator(); i.hasNext();) { ParameterMetaData pmd = i.next(); paramTypes[x++] = pmd.getType(); } return paramTypes; }
/** * Get the parameters * * @param trace whether trace is enabled * @param cl the classloader * @param pinfos the parameter infos * @param parameters the parameter metadata * @return an array of parameters * @throws Throwable for any error */ public static Object[] getParameters(boolean trace, ClassLoader cl, TypeInfo[] pinfos, List<ParameterMetaData> parameters) throws Throwable { if (parameters == null) return null; Object[] params = new Object[parameters.size()]; int x = 0; for (Iterator<ParameterMetaData> i = parameters.iterator(); i.hasNext();) { ParameterMetaData pdata = i.next(); ValueMetaData vmd = pdata.getValue(); params[x] = vmd.getValue(pinfos[x], cl); x++; } return params; }
ParameterMetaData sndParameter = sndParameters.get(i); if (notEqual(fstParameter.getType(), sndParameter.getType())) return true; ValueMetaData fstValue = fstParameter.getValue(); ValueMetaData sndValue = sndParameter.getValue(); Class<?> fstClass = fstValue != null ? fstValue.getClass() : null; Class<?> sndClass = sndValue != null ? sndValue.getClass() : null;
@Override public void initialVisit(MetaDataVisitor visitor) { if (parameters != null) { for (int i = 0; i < parameters.size(); ++i) parameters.get(i).setIndex(i); } visitor.setContextState(state); super.initialVisit(visitor); }
@Override public void initialVisit(MetaDataVisitor visitor) { ValueMetaData factory = getFactory(); if (factory != null || getFactoryClass() != null) { if (getFactoryMethod() == null) throw new IllegalArgumentException("Constructor needs a factoryMethod attribute when there is a factoryClass attribute or factory element."); } if (factory != null) { if (factory.getUnderlyingValue() == null) throw new IllegalArgumentException("Factory should have a bean attribute or nested element."); } if (parameters != null) { for (int i = 0; i < parameters.size(); ++i) parameters.get(i).setIndex(i); } super.initialVisit(visitor); }
public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable { if (previous instanceof ParameterMetaData == false) throw new IllegalArgumentException("Previous node is not ParameterMetaData as expected: " + previous); ParameterMetaData parameter = (ParameterMetaData) previous; KernelControllerContext context = visitor.getControllerContext(); String method = (methodName != null ? methodName : type); String[] parameterTypes = Configurator.getParameterTypes(false, parameters); MethodInfo methodInfo = Configurator.findMethodInfo(getClassInfo(context), method, parameterTypes); return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()]); }
parameters.get(i).setIndex(i);
/** * Resolve a constructor * * @param trace whether trace is enabled * @param info the bean info * @param metaData the constructor metadata * @return the constructor info */ public static ConstructorInfo resolveConstructor(boolean trace, BeanInfo info, ConstructorMetaData metaData) { if (info == null) throw new IllegalArgumentException("Null bean info"); List<ParameterMetaData> params = Collections.emptyList(); if (metaData != null && metaData.getParameters() != null) params = metaData.getParameters(); String[] paramTypes = new String[params.size()]; if (params.isEmpty() == false) { int x = 0; for (Iterator<ParameterMetaData> i = params.iterator(); i.hasNext();) { ParameterMetaData pdata = i.next(); paramTypes[x++] = pdata.getType(); } } return findConstructorInfo(info.getClassInfo(), paramTypes); }
parameters[i] = pmd.getValue().getValue(typeInfo, classLoader);
String[] parameterTypes = Configurator.getParameterTypes(false, parameters); MethodInfo methodInfo = Configurator.findMethodInfo(classInfo, factoryMethod, parameterTypes, factoryClassName != null, true); return applyCollectionOrMapCheck(methodInfo.getParameterTypes()[parameter.getIndex()]); String[] paramTypes = Configurator.getParameterTypes(false, parameters); ConstructorInfo ci = Configurator.findConstructorInfo(beanInfo.getClassInfo(), paramTypes); return applyCollectionOrMapCheck(ci.getParameterTypes()[parameter.getIndex()]);
for(int i = 0; i < n; i++) typeNames[i] = parameters.get(i).getType(); typeInfos[i] = parameterInfos[i].getParameterType();