public void visitField(Context annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { Type type = field.getGenericType(); FieldInjectionSite site = new FieldInjectionSite(field); visit(type, componentType, site, field.getDeclaringClass(), field, context); }
private Field getField(FieldInjectionSite site, String implementationClass, ClassLoader classLoader) throws NoSuchFieldException, ClassNotFoundException { Class<?> clazz = classLoader.loadClass(implementationClass); String name = site.getName(); while (clazz != null) { try { return clazz.getDeclaredField(name); } catch (NoSuchFieldException e) { clazz = clazz.getSuperclass(); } } throw new NoSuchFieldException(name); }
injector = createInjector(siteName, supplier, (WebContextInjectionSite) site); } else if (site instanceof FieldInjectionSite) { injector = reflectionFactory.createInjector(((FieldInjectionSite) site).getField(), supplier); } else if (site instanceof MethodInjectionSite) { injector = reflectionFactory.createInjector(((MethodInjectionSite) site).getMethod(), supplier);
public void visitField(Context annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { Type type = field.getGenericType(); FieldInjectionSite site = new FieldInjectionSite(field); visit(type, componentType, site, field.getDeclaringClass(), field, context); }
public String getMessage() { if (site instanceof FieldInjectionSite) { FieldInjectionSite field = (FieldInjectionSite) site; return "Unknown injection type " + type + " on field " + field.getName() + " in class " + clazz; } else if (site instanceof MethodInjectionSite) { MethodInjectionSite method = (MethodInjectionSite) site; return "Unknown injection type " + type + " on method " + method + " in class " + clazz; } else if (site instanceof ConstructorInjectionSite) { ConstructorInjectionSite ctor = (ConstructorInjectionSite) site; return "Unknown injection type " + type + " on constructor " + ctor.getConstructor() + " in class " + clazz; } else { return "Unknown injection type " + type + " found in class " + clazz; } } }
private void handleReference(Reference<?> reference, InjectionSite site, Class<?> implClass, Map<AccessibleObject, Supplier<Object>> injectors) { if (reference.getBindings().isEmpty()) { return; } Class<?> interfaze = reference.getServiceContract().getInterfaceClass(); Binding binding = reference.getBindings().get(0); AccessibleObject accessibleObject; if (site instanceof FieldInjectionSite) { accessibleObject = ((FieldInjectionSite) site).getField(); } else if (site instanceof MethodInjectionSite) { accessibleObject = ((MethodInjectionSite) site).getMethod(); } else { // ignore return; } // create supplier to resolve the proxy injectors.put(accessibleObject, () -> serviceResolver.resolve(interfaze, binding, implClass)); } }
public void visitField(Channel annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { FieldInjectionSite site = new FieldInjectionSite(field); String name = helper.getSiteName(field, null); Class<?> type = field.getType(); createReference(name, annotation, type, componentType, site, implClass, context); }
/** * Obtain the fields and methods for injection sites associated with the instance * * @param mappings the mappings of injection sites */ private void initializeInjectionSites(Map<InjectionSite, Injectable> mappings) { this.sites = new HashMap<>(); for (Map.Entry<InjectionSite, Injectable> entry : mappings.entrySet()) { InjectionSite site = entry.getKey(); if (site instanceof FieldInjectionSite) { try { Field field = getField(((FieldInjectionSite) site).getName()); sites.put(field, entry.getValue()); } catch (NoSuchFieldException e) { // programming error throw new AssertionError(e); } } else if (site instanceof MethodInjectionSite) { MethodInjectionSite methodInjectionSite = (MethodInjectionSite) site; Method method = methodInjectionSite.getMethod(); sites.put(method, entry.getValue()); } else { // ignore other injection sites } } }
private void handleReference(Reference<?> reference, InjectionSite site, Class<?> implClass, Map<AccessibleObject, Supplier<Object>> injectors) { if (reference.getBindings().isEmpty()) { return; } Class<?> interfaze = reference.getServiceContract().getInterfaceClass(); Binding binding = reference.getBindings().get(0); AccessibleObject accessibleObject; if (site instanceof FieldInjectionSite) { accessibleObject = ((FieldInjectionSite) site).getField(); } else if (site instanceof MethodInjectionSite) { accessibleObject = ((MethodInjectionSite) site).getMethod(); } else { // ignore return; } // create supplier to resolve the proxy injectors.put(accessibleObject, () -> serviceResolver.resolve(interfaze, binding, implClass)); } }
public void visitField(Channel annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { FieldInjectionSite site = new FieldInjectionSite(field); String name = helper.getSiteName(field, null); Class<?> type = field.getType(); createReference(name, annotation, type, componentType, site, implClass, context); }
public Class<?> getMemberType(Injectable injectable) { InjectionSite site = findInjectionSite(injectable); if (site == null) { throw new AssertionError("No injection site for " + injectable + " in " + implementationClass); } if (site instanceof FieldInjectionSite) { try { FieldInjectionSite fieldSite = (FieldInjectionSite) site; Field field = getField(fieldSite.getName()); return field.getType(); } catch (NoSuchFieldException e) { throw new AssertionError(e); } } else if (site instanceof MethodInjectionSite) { MethodInjectionSite methodSite = (MethodInjectionSite) site; Method method = methodSite.getMethod(); return method.getParameterTypes()[methodSite.getParam()]; } else if (site instanceof ConstructorInjectionSite) { ConstructorInjectionSite methodSite = (ConstructorInjectionSite) site; Constructor<?> method = methodSite.getConstructor(); return method.getParameterTypes()[methodSite.getParam()]; } else { throw new AssertionError("Invalid injection site type: " + site.getClass()); } }
if (site instanceof FieldInjectionSite) { FieldInjectionSite fieldSite = (FieldInjectionSite) site; Field field = fieldSite.getField(); processBindingAnnotations(field, reference, implClass, context); } else if (site instanceof MethodInjectionSite) {
public void visitField(PersistenceUnit annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { FieldInjectionSite site = new FieldInjectionSite(field); PersistenceUnitResourceReference definition = createDefinition(annotation); componentType.add(definition, site); }
public Type getGenericType(Injectable injectable) { InjectionSite site = findInjectionSite(injectable); if (site == null) { throw new AssertionError("No injection site for " + injectable + " in " + implementationClass); } if (site instanceof FieldInjectionSite) { try { FieldInjectionSite fieldSite = (FieldInjectionSite) site; Field field = getField(fieldSite.getName()); return field.getGenericType(); } catch (NoSuchFieldException e) { throw new AssertionError(e); } } else if (site instanceof MethodInjectionSite) { MethodInjectionSite methodSite = (MethodInjectionSite) site; Method method = methodSite.getMethod(); return method.getGenericParameterTypes()[methodSite.getParam()]; } else if (site instanceof ConstructorInjectionSite) { ConstructorInjectionSite methodSite = (ConstructorInjectionSite) site; Constructor<?> method = methodSite.getConstructor(); return method.getGenericParameterTypes()[methodSite.getParam()]; } else { throw new AssertionError("Invalid injection site type " + site.getClass()); } }
public void visitField(PersistenceUnit annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { FieldInjectionSite site = new FieldInjectionSite(field); PersistenceUnitResourceReference definition = createDefinition(annotation); componentType.add(definition, site); }
public Class<?> getMemberType(Injectable injectable) { InjectionSite site = findInjectionSite(injectable); if (site == null) { throw new AssertionError("No injection site for " + injectable + " in " + implementationClass); } if (site instanceof FieldInjectionSite) { try { FieldInjectionSite fieldSite = (FieldInjectionSite) site; Field field = getField(fieldSite.getName()); return field.getType(); } catch (NoSuchFieldException e) { throw new AssertionError(e); } } else if (site instanceof MethodInjectionSite) { MethodInjectionSite methodSite = (MethodInjectionSite) site; Method method = methodSite.getMethod(); return method.getParameterTypes()[methodSite.getParam()]; } else if (site instanceof ConstructorInjectionSite) { ConstructorInjectionSite methodSite = (ConstructorInjectionSite) site; Constructor<?> method = methodSite.getConstructor(); return method.getParameterTypes()[methodSite.getParam()]; } else { throw new AssertionError("Invalid injection site type: " + site.getClass()); } }
public void visitField(Cache annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { String name = helper.getSiteName(field, null); FieldInjectionSite site = new FieldInjectionSite(field); Class<?> type = field.getType(); ResourceReferenceDefinition definition = create(name, annotation, type, field, componentType, context); componentType.add(definition, site); }
public Type getGenericType(Injectable injectable) { InjectionSite site = findInjectionSite(injectable); if (site == null) { throw new AssertionError("No injection site for " + injectable + " in " + implementationClass); } if (site instanceof FieldInjectionSite) { try { FieldInjectionSite fieldSite = (FieldInjectionSite) site; Field field = getField(fieldSite.getName()); return field.getGenericType(); } catch (NoSuchFieldException e) { throw new AssertionError(e); } } else if (site instanceof MethodInjectionSite) { MethodInjectionSite methodSite = (MethodInjectionSite) site; Method method = methodSite.getMethod(); return method.getGenericParameterTypes()[methodSite.getParam()]; } else if (site instanceof ConstructorInjectionSite) { ConstructorInjectionSite methodSite = (ConstructorInjectionSite) site; Constructor<?> method = methodSite.getConstructor(); return method.getGenericParameterTypes()[methodSite.getParam()]; } else { throw new AssertionError("Invalid injection site type " + site.getClass()); } }
public void visitField(PersistenceUnit annotation, Field field, Class<?> implClass, InjectingComponentType componentType, IntrospectionContext context) { FieldInjectionSite site = new FieldInjectionSite(field); PersistenceUnitResourceReference definition = createDefinition(annotation); componentType.add(definition, site); // record that the implementation requires JPA componentType.addRequiredCapability("jpa"); }
Field field = getField(fieldSite.getName()); Injector<?> injector = reflectionFactory.createInjector(field, supplier); injectors.put(attribute, injector);