private void throwCompositionException(final Class<?> impl, final AccessibleObjectParameterSet eachParam) { throw new PicoCompositionException("Cannot locate field or method '" + eachParam.getName() + "' in type " + impl + ". \n\tParameter in error: " + eachParam); }
public boolean isResolved() { return parameter != null && parameter.getParams() != null; }
/** * @param targetInjectionMember * @param assignedParameters * @return null if no parameter set for the given accessible object has been defined. */ protected final AccessibleObjectParameterSet getParameterToUseForObject(final AccessibleObject targetInjectionMember, final AccessibleObjectParameterSet... assignedParameters) { if (assignedParameters == null || assignedParameters.length == 0) { Parameter[] paramsToUse = this.createDefaultParameters(targetInjectionMember); paramsToUse = this.interceptParametersToUse(paramsToUse, targetInjectionMember); return this.constructAccessibleObjectParameterSet(targetInjectionMember, paramsToUse); } for (AccessibleObjectParameterSet eachParameterSet : assignedParameters) { //if a target type is defined then we have to match against it. //This allows injection into private members of base classes of the same name //as the subclasses. Class<?> targetType = eachParameterSet.getTargetType(); if (targetType != null && !targetType.equals(getAccessibleObjectDefiningType(targetInjectionMember))) { continue; } if (eachParameterSet.getName().equals(getAccessibleObjectName(targetInjectionMember))) { //Allow parmeter substitution Parameter[] paramsToUse = this.interceptParametersToUse(eachParameterSet.getParams(), targetInjectionMember); return constructAccessibleObjectParameterSet(targetInjectionMember, paramsToUse); } } Parameter[] paramsToUse = this.createDefaultParameters(targetInjectionMember); paramsToUse = this.interceptParametersToUse(paramsToUse, targetInjectionMember); return this.constructAccessibleObjectParameterSet(targetInjectionMember, paramsToUse); }
/** * @param targetInjectionMember * @param assignedParameters * @return null if no parameter set for the given accessible object has been defined. */ protected final AccessibleObjectParameterSet getParameterToUseForObject(final AccessibleObject targetInjectionMember, final AccessibleObjectParameterSet... assignedParameters) { if (assignedParameters == null || assignedParameters.length == 0) { Parameter[] paramsToUse = this.createDefaultParameters(targetInjectionMember); paramsToUse = this.interceptParametersToUse(paramsToUse, targetInjectionMember); return this.constructAccessibleObjectParameterSet(targetInjectionMember, paramsToUse); } for (AccessibleObjectParameterSet eachParameterSet : assignedParameters) { //if a target type is defined then we have to match against it. //This allows injection into private members of base classes of the same name //as the subclasses. Class<?> targetType = eachParameterSet.getTargetType(); if (targetType != null && !targetType.equals(getAccessibleObjectDefiningType(targetInjectionMember))) { continue; } if (eachParameterSet.getName().equals(getAccessibleObjectName(targetInjectionMember))) { //Allow parmeter substitution Parameter[] paramsToUse = this.interceptParametersToUse(eachParameterSet.getParams(), targetInjectionMember); return constructAccessibleObjectParameterSet(targetInjectionMember, paramsToUse); } } Parameter[] paramsToUse = this.createDefaultParameters(targetInjectionMember); paramsToUse = this.interceptParametersToUse(paramsToUse, targetInjectionMember); return this.constructAccessibleObjectParameterSet(targetInjectionMember, paramsToUse); }
public boolean isResolved() { return parameter != null && parameter.getParams() != null; }
private void throwCompositionException(final Class<?> impl, final AccessibleObjectParameterSet eachParam) { throw new PicoCompositionException("Cannot locate field or method '" + eachParam.getName() + "' in type " + impl + ". \n\tParameter in error: " + eachParam); }
@Override public void accept(final PicoVisitor visitor) { super.accept(visitor); if (parameters != null) { for (AccessibleObjectParameterSet parameter : parameters) { if (parameter.getParams() != null) { for (Parameter eachContainedParameter : parameter.getParams()) { eachContainedParameter.accept(visitor); } } } } }
@Override public void accept(final PicoVisitor visitor) { super.accept(visitor); if (parameters != null) { for (AccessibleObjectParameterSet parameter : parameters) { if (parameter.getParams() != null) { for (Parameter eachContainedParameter : parameter.getParams()) { eachContainedParameter.accept(visitor); } } } } }
private List<Constructor<T>> getSortedMatchingConstructors() { List<Constructor<T>> matchingConstructors = new ArrayList<Constructor<T>>(); Constructor<T>[] allConstructors = getConstructors(); // filter out all constructors that will definitely not match final Parameter[] paramsToUse = (parameters != null && parameters.length > 0) ? parameters[0].getParams() : null; for (Constructor<T> constructor : allConstructors) { if ((paramsToUse == null || constructor.getParameterTypes().length == paramsToUse.length) && hasApplicableConstructorModifiers(constructor.getModifiers())) { matchingConstructors.add(constructor); } } // optimize list of constructors moving the longest at the beginning if (paramsToUse == null) { Collections.sort(matchingConstructors, new Comparator<Constructor>() { public int compare(final Constructor arg0, final Constructor arg1) { return arg1.getParameterTypes().length - arg0.getParameterTypes().length; } }); } return matchingConstructors; }
private List<Constructor<T>> getSortedMatchingConstructors() { List<Constructor<T>> matchingConstructors = new ArrayList<Constructor<T>>(); Constructor<T>[] allConstructors = getConstructors(); // filter out all constructors that will definitely not match final Parameter[] paramsToUse = (parameters != null && parameters.length > 0) ? parameters[0].getParams() : null; for (Constructor<T> constructor : allConstructors) { if ((paramsToUse == null || constructor.getParameterTypes().length == paramsToUse.length) && hasApplicableConstructorModifiers(constructor.getModifiers())) { matchingConstructors.add(constructor); } } // optimize list of constructors moving the longest at the beginning if (paramsToUse == null) { Collections.sort(matchingConstructors, new Comparator<Constructor>() { public int compare(final Constructor arg0, final Constructor arg1) { return arg1.getParameterTypes().length - arg0.getParameterTypes().length; } }); } return matchingConstructors; }
protected Object[] getMemberArguments(final PicoContainer container, final AccessibleObject member, final Type[] parameterTypes, final Annotation[] bindings, final Type into) { boxParameters(parameterTypes); //Object[] result = new Object[parameterTypes.length]; List<Object> result = new ArrayList<Object>(parameterTypes.length); AccessibleObjectParameterSet objectParameterSet = this.getParameterToUseForObject(member, parameters); Parameter[] currentParameters = objectParameterSet.getParams(); for (int i = 0; i < currentParameters.length; i++) { try { Object parameterResult = getParameter(container, member, i, parameterTypes[i], bindings[i], currentParameters[i], null, into); if (parameterResult != Parameter.NULL_RESULT) { result.add(parameterResult); } } catch (AmbiguousComponentResolutionException e) { e.setComponent(getComponentImplementation()); e.setMember(member); e.setParameterNumber(i); throw e; } } return result.toArray(); }
protected Object[] getMemberArguments(final PicoContainer container, final AccessibleObject member, final Type[] parameterTypes, final Annotation[] bindings, final Type into) { boxParameters(parameterTypes); //Object[] result = new Object[parameterTypes.length]; List<Object> result = new ArrayList<Object>(parameterTypes.length); AccessibleObjectParameterSet objectParameterSet = this.getParameterToUseForObject(member, parameters); Parameter[] currentParameters = objectParameterSet.getParams(); for (int i = 0; i < currentParameters.length; i++) { try { Object parameterResult = getParameter(container, member, i, parameterTypes[i], bindings[i], currentParameters[i], null, into); if (parameterResult != Parameter.NULL_RESULT) { result.add(parameterResult); } } catch (AmbiguousComponentResolutionException e) { e.setComponent(getComponentImplementation()); e.setMember(member); e.setParameterNumber(i); throw e; } } return result.toArray(); }
@Override public Void run(final Object inst) { final List<Method> methods = getInjectorMethods(); for (Method method : methods) { final Class[] parameterTypes = method.getParameterTypes(); AccessibleObjectParameterSet paramsForMethod = getParameterToUseForObject(method, parameters); final Parameter[] currentParameters = paramsForMethod != null ? paramsForMethod.getParams() : createDefaultParameters(parameterTypes.length); for (int i = 0; i < currentParameters.length; i++) { currentParameters[i].verify(container, MethodInjector.this, parameterTypes[i], new ParameterNameBinding(getParanamer(), method, i), useNames(), getBindings(method.getParameterAnnotations())[i]); } } return null; } };
@Override public Void run(final Object inst) { final List<Method> methods = getInjectorMethods(); for (Method method : methods) { final Class[] parameterTypes = method.getParameterTypes(); AccessibleObjectParameterSet paramsForMethod = getParameterToUseForObject(method, parameters); final Parameter[] currentParameters = paramsForMethod != null ? paramsForMethod.getParams() : createDefaultParameters(parameterTypes.length); for (int i = 0; i < currentParameters.length; i++) { currentParameters[i].verify(container, MethodInjector.this, parameterTypes[i], new ParameterNameBinding(getParanamer(), method, i), useNames(), getBindings(method.getParameterAnnotations())[i]); } } return null; } };
private boolean matchParameter(final PicoContainer container, final List<Object> matchingParameterList, final AccessibleObjectParameterSet parameter) { for (int j = 0; j < injectionTypes.length; j++) { Object o = matchingParameterList.get(j); AccessibleObject targetInjectionMember = getTargetInjectionMember(injectionMembers, j, parameter.getParams()[0]); if (targetInjectionMember == null) { return false; } AccessibleObjectParameterSet paramToUse = getParameterToUseForObject(targetInjectionMember, parameter); if (paramToUse == null) { paramToUse = constructAccessibleObjectParameterSet(targetInjectionMember); } try { if (o == null && paramToUse.getParams()[0].resolve(container, this, null, injectionTypes[j], makeParameterNameImpl(targetInjectionMember), useNames(), bindings[j]).isResolved()) { matchingParameterList.set(j, new ParameterToAccessibleObjectPair(targetInjectionMember, paramToUse)); return true; } } catch (AmbiguousComponentResolutionException e) { e.setComponent(getComponentImplementation()); e.setMember(injectionMembers.get(j)); throw e; } } return false; }
private boolean matchParameter(final PicoContainer container, final List<Object> matchingParameterList, final AccessibleObjectParameterSet parameter) { for (int j = 0; j < injectionTypes.length; j++) { Object o = matchingParameterList.get(j); AccessibleObject targetInjectionMember = getTargetInjectionMember(injectionMembers, j, parameter.getParams()[0]); if (targetInjectionMember == null) { return false; } AccessibleObjectParameterSet paramToUse = getParameterToUseForObject(targetInjectionMember, parameter); if (paramToUse == null) { paramToUse = constructAccessibleObjectParameterSet(targetInjectionMember); } try { if (o == null && paramToUse.getParams()[0].resolve(container, this, null, injectionTypes[j], makeParameterNameImpl(targetInjectionMember), useNames(), bindings[j]).isResolved()) { matchingParameterList.set(j, new ParameterToAccessibleObjectPair(targetInjectionMember, paramToUse)); return true; } } catch (AmbiguousComponentResolutionException e) { e.setComponent(getComponentImplementation()); e.setMember(injectionMembers.get(j)); throw e; } } return false; }
@Override public T run(final Object inst) { final ParameterToAccessibleObjectPair[] currentParameters = getMatchingParameterListForMembers(guardedContainer); for (int i = 0; i < currentParameters.length; i++) { currentParameters[i].getAccessibleObjectParameters().getParams()[0].verify(container, IterativeInjector.this, injectionTypes[i], makeParameterNameImpl(currentParameters[i].getAccessibleObject()), useNames(), bindings[i]); } return null; } };
@Override public T run(final Object inst) { final ParameterToAccessibleObjectPair[] currentParameters = getMatchingParameterListForMembers(guardedContainer); for (int i = 0; i < currentParameters.length; i++) { currentParameters[i].getAccessibleObjectParameters().getParams()[0].verify(container, IterativeInjector.this, injectionTypes[i], makeParameterNameImpl(currentParameters[i].getAccessibleObject()), useNames(), bindings[i]); } return null; } };