/** * Create default parameters for the given types. * * @param length parameter list length * @return the array with the default parameters. */ protected Parameter[] createDefaultParameters(final int length) { Parameter[] componentParameters = new Parameter[length]; for (int i = 0; i < length; i++) { componentParameters[i] = constructDefaultComponentParameter(); } return componentParameters; }
@SuppressWarnings("rawtypes") protected Parameter[] createDefaultParamsBasedOnTypeOfAccessibleObject(final AccessibleObject object) { if (object instanceof Constructor) { return createDefaultParameters( ((Constructor)object).getParameterTypes().length ); } if (object instanceof Field) { return createDefaultParameters(1); } if (object instanceof Method) { return createDefaultParameters( ((Method)object).getParameterTypes().length ); } throwUnknownAccessibleObjectType(object); //Never gets here return null; }
private void checkConcrete() throws NotConcreteRegistrationException { // Assert that the component class is concrete. boolean isAbstract = (getComponentImplementation().getModifiers() & Modifier.ABSTRACT) == Modifier.ABSTRACT; if (getComponentImplementation().isInterface() || isAbstract) { throw new NotConcreteRegistrationException(getComponentImplementation()); } }
/** * @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); }
@Override public ComponentMonitor changeMonitor(final ComponentMonitor monitor) { ComponentMonitor result = super.changeMonitor(monitor); for (Injector<?> eachInjector : injectors) { if (eachInjector instanceof ComponentMonitorStrategy) { ((ComponentMonitorStrategy)eachInjector).changeMonitor(monitor); } } return result; }
@Override public final void accept(final PicoVisitor visitor) { super.accept(visitor); for (Injector<T> injector : injectors) { injector.accept(visitor); } }
protected T caughtIllegalAccessException(final ComponentMonitor monitor, final Member member, final Object componentInstance, final IllegalAccessException e) { monitor.invocationFailed(member, componentInstance, e); throw new PicoCompositionException("Illegal Access Exception for Injector " + this.getDescriptor() + " and target member " + member != null ? member.toString() : " null",e); }
super(key, impl, monitor); this.useNames = useNames; checkConcrete(); if (parameters != null) { for (int i = 0; i < parameters.length; i++) {
/** * @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); }
@Override public ComponentMonitor changeMonitor(final ComponentMonitor monitor) { ComponentMonitor result = super.changeMonitor(monitor); for (Injector<?> eachInjector : injectors) { if (eachInjector instanceof ComponentMonitorStrategy) { ((ComponentMonitorStrategy)eachInjector).changeMonitor(monitor); } } return result; }
@Override public final void accept(final PicoVisitor visitor) { super.accept(visitor); for (Injector<T> injector : injectors) { injector.accept(visitor); } }
protected T caughtIllegalAccessException(final ComponentMonitor monitor, final Member member, final Object componentInstance, final IllegalAccessException e) { monitor.invocationFailed(member, componentInstance, e); throw new PicoCompositionException("Illegal Access Exception for Injector " + this.getDescriptor() + " and target member " + member != null ? member.toString() : " null",e); }
super(key, impl, monitor); this.useNames = useNames; checkConcrete(); if (parameters != null) { for (int i = 0; i < parameters.length; i++) {
@SuppressWarnings("rawtypes") protected Parameter[] createDefaultParamsBasedOnTypeOfAccessibleObject(final AccessibleObject object) { if (object instanceof Constructor) { return createDefaultParameters( ((Constructor)object).getParameterTypes().length ); } if (object instanceof Field) { return createDefaultParameters(1); } if (object instanceof Method) { return createDefaultParameters( ((Method)object).getParameterTypes().length ); } throwUnknownAccessibleObjectType(object); //Never gets here return null; }
private void checkConcrete() throws NotConcreteRegistrationException { // Assert that the component class is concrete. boolean isAbstract = (getComponentImplementation().getModifiers() & Modifier.ABSTRACT) == Modifier.ABSTRACT; if (getComponentImplementation().isInterface() || isAbstract) { throw new NotConcreteRegistrationException(getComponentImplementation()); } }
/** * Create default parameters for the given types. * * @param length parameter list length * @return the array with the default parameters. */ protected Parameter[] createDefaultParameters(final int length) { Parameter[] componentParameters = new Parameter[length]; for (int i = 0; i < length; i++) { componentParameters[i] = constructDefaultComponentParameter(); } return componentParameters; }
protected Parameter[] createDefaultParameters(final AccessibleObject member) { int length = 0; if (member instanceof Constructor) { length = ((Constructor<?>)member).getParameterTypes().length; } else if (member instanceof Field) { length = 1; } else if (member instanceof Method) { length = ((Method)member).getParameterTypes().length; } else { throwUnknownAccessibleObjectType(member); } return createDefaultParameters(length); }
protected Parameter[] createDefaultParameters(final AccessibleObject member) { int length = 0; if (member instanceof Constructor) { length = ((Constructor<?>)member).getParameterTypes().length; } else if (member instanceof Field) { length = 1; } else if (member instanceof Method) { length = ((Method)member).getParameterTypes().length; } else { throwUnknownAccessibleObjectType(member); } return createDefaultParameters(length); }