@Override public T run(final Object instance) { final ParameterToAccessibleObjectPair[] matchingParameters = getMatchingParameterListForMembers(guardedContainer); //Funky call where the instance we're decorating //happens to be null for static injection. return decorateComponentInstance(matchingParameters, currentMonitor(), null, container, guardedContainer, into, null); } };
/** * Usual constructor invoked during runtime. * @param key * @param impl * @param monitor * @param requireConsumptionOfAllParameters * @param parameters * @param fieldsToInject */ public SpecificFieldInjector(final Object key, final Class<T> impl, final ComponentMonitor monitor, final boolean useNames, final boolean requireConsumptionOfAllParameters, final FieldParameters[] parameters, final Field... fieldsToInject) { /* todo: can't use fields with paranamer */ super(key, impl, monitor, false, requireConsumptionOfAllParameters, parameters); this.fieldsToInject = fieldsToInject; this.isStaticInjection = isStaticInjection(fieldsToInject); }
@Override protected Object injectIntoMember(final AccessibleObject member, final Object componentInstance, final Object toInject) throws IllegalAccessException, InvocationTargetException { final Field field = (Field) member; if (initializedReferenceSet != null) { //Were doing static initialization. Need locking on //the class level. synchronized(field.getDeclaringClass()) { if (!this.initializedReferenceSet.isMemberAlreadyInitialized((Member)member)) { doInjection(member, componentInstance, toInject, field); initializedReferenceSet.markMemberInitialized((Member)member); } } } else { doInjection(member, componentInstance, toInject, field); } return null; }
@Override protected void initializeInjectionMembersAndTypeLists() { injectionMembers = new ArrayList<AccessibleObject>(); List<Annotation> bindingIds = new ArrayList<Annotation>(); final List<Type> typeList = new ArrayList<Type>(); for (Field eachFieldToInject : fieldsToInject) { injectionMembers.add(eachFieldToInject); } //Sort for injection. Collections.sort(injectionMembers, new JSR330AccessibleObjectOrderComparator()); for (AccessibleObject eachMember : injectionMembers) { Field field = (Field)eachMember; typeList.add(box(field.getGenericType())); bindingIds.add(AnnotatedFieldInjection.AnnotatedFieldInjector.getBinding(field)); } injectionTypes = typeList.toArray(new Type[0]); bindings = bindingIds.toArray(new Annotation[0]); }
public void injectStatics(final PicoContainer container, final Type into, final StaticsInitializedReferenceSet initializedReferenceSet) { this.initializedReferenceSet = initializedReferenceSet; if (!isStaticInjection) { throw new PicoCompositionException(Arrays.deepToString(fieldsToInject) + " are non static fields, injectStatics should not be called."); } boolean iInstantiated = false; try { if (instantiationGuard == null) { iInstantiated = true; instantiationGuard = new ThreadLocalCyclicDependencyGuard<T>() { @Override public T run(final Object instance) { final ParameterToAccessibleObjectPair[] matchingParameters = getMatchingParameterListForMembers(guardedContainer); //Funky call where the instance we're decorating //happens to be null for static injection. return decorateComponentInstance(matchingParameters, currentMonitor(), null, container, guardedContainer, into, null); } }; } instantiationGuard.setGuardedContainer(container); instantiationGuard.observe(getComponentImplementation(), null); } finally { if (iInstantiated) { instantiationGuard.remove(); instantiationGuard = null; } this.initializedReferenceSet = null; } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private StaticInjector<?> constructStaticFieldInjections(final Class<? extends Annotation> injectionAnnotation, final Class<?> currentClass) { List<Field> fieldsToInject = null; for(Field eachField : currentClass.getDeclaredFields()) { if (!Modifier.isStatic(eachField.getModifiers())) { continue; } if (this.getReferenceSet().isMemberAlreadyInitialized(eachField)) { continue; } if (eachField.isAnnotationPresent(injectionAnnotation)) { if (fieldsToInject == null) { fieldsToInject = new ArrayList<Field>(); } fieldsToInject.add(eachField); } } if (fieldsToInject == null || fieldsToInject.size() == 0) { return null; } return new SpecificFieldInjector(this.getComponentKey(), this.getComponentImplementation(), currentMonitor(), this.useNames, this.consumeAllParameters, this.fieldParams, fieldsToInject.toArray(new Field[fieldsToInject.size()])); }
@Override protected Object injectIntoMember(final AccessibleObject member, final Object componentInstance, final Object toInject) throws IllegalAccessException, InvocationTargetException { final Field field = (Field) member; if (initializedReferenceSet != null) { //Were doing static initialization. Need locking on //the class level. synchronized(field.getDeclaringClass()) { if (!this.initializedReferenceSet.isMemberAlreadyInitialized((Member)member)) { doInjection(member, componentInstance, toInject, field); initializedReferenceSet.markMemberInitialized((Member)member); } } } else { doInjection(member, componentInstance, toInject, field); } return null; }
@Override protected void initializeInjectionMembersAndTypeLists() { injectionMembers = new ArrayList<AccessibleObject>(); List<Annotation> bindingIds = new ArrayList<Annotation>(); final List<Type> typeList = new ArrayList<Type>(); for (Field eachFieldToInject : fieldsToInject) { injectionMembers.add(eachFieldToInject); } //Sort for injection. Collections.sort(injectionMembers, new JSR330AccessibleObjectOrderComparator()); for (AccessibleObject eachMember : injectionMembers) { Field field = (Field)eachMember; typeList.add(box(field.getGenericType())); bindingIds.add(AnnotatedFieldInjection.AnnotatedFieldInjector.getBinding(field)); } injectionTypes = typeList.toArray(new Type[0]); bindings = bindingIds.toArray(new Annotation[0]); }
public void injectStatics(final PicoContainer container, final Type into, final StaticsInitializedReferenceSet initializedReferenceSet) { this.initializedReferenceSet = initializedReferenceSet; if (!isStaticInjection) { throw new PicoCompositionException(Arrays.deepToString(fieldsToInject) + " are non static fields, injectStatics should not be called."); } boolean iInstantiated = false; try { if (instantiationGuard == null) { iInstantiated = true; instantiationGuard = new ThreadLocalCyclicDependencyGuard<T>() { @Override public T run(final Object instance) { final ParameterToAccessibleObjectPair[] matchingParameters = getMatchingParameterListForMembers(guardedContainer); //Funky call where the instance we're decorating //happens to be null for static injection. return decorateComponentInstance(matchingParameters, currentMonitor(), null, container, guardedContainer, into, null); } }; } instantiationGuard.setGuardedContainer(container); instantiationGuard.observe(getComponentImplementation(), null); } finally { if (iInstantiated) { instantiationGuard.remove(); instantiationGuard = null; } this.initializedReferenceSet = null; } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private StaticInjector<?> constructStaticFieldInjections(final Class<? extends Annotation> injectionAnnotation, final Class<?> currentClass) { List<Field> fieldsToInject = null; for(Field eachField : currentClass.getDeclaredFields()) { if (!Modifier.isStatic(eachField.getModifiers())) { continue; } if (this.getReferenceSet().isMemberAlreadyInitialized(eachField)) { continue; } if (eachField.isAnnotationPresent(injectionAnnotation)) { if (fieldsToInject == null) { fieldsToInject = new ArrayList<Field>(); } fieldsToInject.add(eachField); } } if (fieldsToInject == null || fieldsToInject.size() == 0) { return null; } return new SpecificFieldInjector(this.getComponentKey(), this.getComponentImplementation(), currentMonitor(), this.useNames, this.consumeAllParameters, this.fieldParams, fieldsToInject.toArray(new Field[fieldsToInject.size()])); }
@Override public T run(final Object instance) { final ParameterToAccessibleObjectPair[] matchingParameters = getMatchingParameterListForMembers(guardedContainer); //Funky call where the instance we're decorating //happens to be null for static injection. return decorateComponentInstance(matchingParameters, currentMonitor(), null, container, guardedContainer, into, null); } };
/** * Usual constructor invoked during runtime. * @param key * @param impl * @param monitor * @param requireConsumptionOfAllParameters * @param parameters * @param fieldsToInject */ public SpecificFieldInjector(final Object key, final Class<T> impl, final ComponentMonitor monitor, final boolean useNames, final boolean requireConsumptionOfAllParameters, final FieldParameters[] parameters, final Field... fieldsToInject) { /* todo: can't use fields with paranamer */ super(key, impl, monitor, false, requireConsumptionOfAllParameters, parameters); this.fieldsToInject = fieldsToInject; this.isStaticInjection = isStaticInjection(fieldsToInject); }