/** * Get argument value for the given index in the constructor argument list. * @param index the index in the constructor argument list * @param requiredType the type to match (can be {@code null} to match * untyped values only) * @param requiredName the type to match (can be {@code null} to match * unnamed values only, or empty String to match any name) * @return the ValueHolder for the argument, or {@code null} if none set */ @Nullable public ValueHolder getIndexedArgumentValue(int index, @Nullable Class<?> requiredType, @Nullable String requiredName) { Assert.isTrue(index >= 0, "Index must not be negative"); ValueHolder valueHolder = this.indexedArgumentValues.get(index); if (valueHolder != null && (valueHolder.getType() == null || (requiredType != null && ClassUtils.matchesTypeName(requiredType, valueHolder.getType()))) && (valueHolder.getName() == null || "".equals(requiredName) || (requiredName != null && requiredName.equals(valueHolder.getName())))) { return valueHolder; } return null; }
/** * Get argument value for the given index in the constructor argument list. * @param index the index in the constructor argument list * @param requiredType the type to match (can be {@code null} to match * untyped values only) * @param requiredName the type to match (can be {@code null} to match * unnamed values only, or empty String to match any name) * @return the ValueHolder for the argument, or {@code null} if none set */ @Nullable public ValueHolder getIndexedArgumentValue(int index, @Nullable Class<?> requiredType, @Nullable String requiredName) { Assert.isTrue(index >= 0, "Index must not be negative"); ValueHolder valueHolder = this.indexedArgumentValues.get(index); if (valueHolder != null && (valueHolder.getType() == null || (requiredType != null && ClassUtils.matchesTypeName(requiredType, valueHolder.getType()))) && (valueHolder.getName() == null || "".equals(requiredName) || (requiredName != null && requiredName.equals(valueHolder.getName())))) { return valueHolder; } return null; }
continue; if (valueHolder.getType() != null && (requiredType == null || !ClassUtils.matchesTypeName(requiredType, valueHolder.getType()))) { continue; if (requiredType != null && valueHolder.getType() == null && valueHolder.getName() == null && !ClassUtils.isAssignableValue(requiredType, valueHolder.getValue())) { continue;
/** * Generates declaration of constructor-arg elemnet. */ private void generateConstructorArgument(final int i, final ConstructorArgumentValues.ValueHolder holder, final ElementBuilder builder) { builder.addChild(CONSTRUCTOR_ARG_ELEMENT); if (i >= 0) { builder.addAttribute(INDEX_ATTRIBUTE, Integer.toString(i)); } String type = holder.getType(); if (type != null) { builder.addAttribute(TYPE_ATTRIBUTE, type); } Object value = holder.getValue(); processValue(value, builder, false, false); builder.up(); }
/** * Generates declaration of constructor-arg elemnet. */ private void generateConstructorArgument(final int i, final ConstructorArgumentValues.ValueHolder holder, final ElementBuilder builder) { builder.addChild(CONSTRUCTOR_ARG_ELEMENT); if (i >= 0) { builder.addAttribute(INDEX_ATTRIBUTE, Integer.toString(i)); } String type = holder.getType(); if (type != null) { builder.addAttribute(TYPE_ATTRIBUTE, type); } Object value = holder.getValue(); processValue(value, builder, false, false); builder.up(); }
/** * Get argument value for the given index in the constructor argument list. * @param index the index in the constructor argument list * @return the ValueHolder for the argument, or <code>null</code> if none set */ public ValueHolder getIndexedArgumentValue(int index, Class requiredType) { ValueHolder valueHolder = (ValueHolder) this.indexedArgumentValues.get(new Integer(index)); if (valueHolder != null) { if (valueHolder.getType() == null || requiredType.getName().equals(valueHolder.getType())) { return valueHolder; } } return null; }
private static Class<?>[] getParamTypes(Class<?> factory, AbstractBeanDefinition definition) { if (definition instanceof RootBeanDefinition) { RootBeanDefinition root = (RootBeanDefinition) definition; for (Method method : getCandidateMethods(factory, root)) { if (root.isFactoryMethod(method)) { return method.getParameterTypes(); } } } List<Class<?>> params = new ArrayList<>(); for (ConstructorArgumentValues.ValueHolder holder : definition.getConstructorArgumentValues() .getIndexedArgumentValues().values()) { params.add(ClassUtils.resolveClassName(holder.getType(), null)); } return params.toArray(new Class<?>[0]); }
/** * Constructs a new <code>SimpleBeanArgument</code> instance. * * @param index * @param typeName * @param value */ public SimpleBeanArgument(int index, ValueHolder valueHolder) { this.index = index; this.typeName = valueHolder.getType(); this.value = ValueFactory.buildValue(MetadataUtils.getValue(valueHolder)); }
valueResolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue()); ConstructorArgumentValues.ValueHolder resolvedValueHolder = new ConstructorArgumentValues.ValueHolder(resolvedValue, valueHolder.getType(), valueHolder.getName()); resolvedValueHolder.setSource(valueHolder); resolvedValues.addIndexedArgumentValue(index, resolvedValueHolder); valueResolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue()); ConstructorArgumentValues.ValueHolder resolvedValueHolder = new ConstructorArgumentValues.ValueHolder(resolvedValue, valueHolder.getType(), valueHolder.getName()); resolvedValueHolder.setSource(valueHolder); resolvedValues.addGenericArgumentValue(resolvedValueHolder);
continue; if (valueHolder.getType() != null && (requiredType == null || !ClassUtils.matchesTypeName(requiredType, valueHolder.getType()))) { continue; if (requiredType != null && valueHolder.getType() == null && valueHolder.getName() == null && !ClassUtils.isAssignableValue(requiredType, valueHolder.getValue())) { continue;
/** * Get argument value for the given index in the constructor argument list. * @param index the index in the constructor argument list * @param requiredType the type to match (can be <code>null</code> to match * untyped values only) * @param requiredName the type to match (can be <code>null</code> to match * unnamed values only) * @return the ValueHolder for the argument, or <code>null</code> if none set */ public ValueHolder getIndexedArgumentValue(int index, Class requiredType, String requiredName) { Assert.isTrue(index >= 0, "Index must not be negative"); ValueHolder valueHolder = this.indexedArgumentValues.get(index); if (valueHolder != null && (valueHolder.getType() == null || (requiredType != null && ClassUtils.matchesTypeName(requiredType, valueHolder.getType()))) && (valueHolder.getName() == null || (requiredName != null && requiredName.equals(valueHolder.getName())))) { return valueHolder; } return null; }
valueResolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue()); ConstructorArgumentValues.ValueHolder resolvedValueHolder = new ConstructorArgumentValues.ValueHolder(resolvedValue, valueHolder.getType(), valueHolder.getName()); resolvedValueHolder.setSource(valueHolder); resolvedValues.addIndexedArgumentValue(index, resolvedValueHolder); valueResolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue()); ConstructorArgumentValues.ValueHolder resolvedValueHolder = new ConstructorArgumentValues.ValueHolder( resolvedValue, valueHolder.getType(), valueHolder.getName()); resolvedValueHolder.setSource(valueHolder); resolvedValues.addGenericArgumentValue(resolvedValueHolder);
continue; if (valueHolder.getType() != null && (requiredType == null || !ClassUtils.matchesTypeName(requiredType, valueHolder.getType()))) { continue; if (requiredType != null && valueHolder.getType() == null && valueHolder.getName() == null && !ClassUtils.isAssignableValue(requiredType, valueHolder.getValue())) { continue;
valueResolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue()); ConstructorArgumentValues.ValueHolder resolvedValueHolder = new ConstructorArgumentValues.ValueHolder(resolvedValue, valueHolder.getType(), valueHolder.getName()); resolvedValueHolder.setSource(valueHolder); resolvedValues.addIndexedArgumentValue(index, resolvedValueHolder); valueResolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue()); ConstructorArgumentValues.ValueHolder resolvedValueHolder = new ConstructorArgumentValues.ValueHolder( resolvedValue, valueHolder.getType(), valueHolder.getName()); resolvedValueHolder.setSource(valueHolder); resolvedValues.addGenericArgumentValue(resolvedValueHolder);