@Override public void injectMembers(I injectee) { KeyProvider<A> keyProvider = provider.get(); // inject fields for (Field field : fields) { Object value = injectorProvider.get().getProvider(keyProvider.getKey(injectableType, field, field.getAnnotation(annotationType))).get(); if (!field.isAccessible()) field.setAccessible(true); try { field.set(injectee, value); } catch (IllegalAccessException e) { throw new IllegalStateException("Failed to inject field " + field + ". Reason: " + e.getMessage(), e); } } // inject methods for (MethodInvoker invokable : methods) { List<Key<?>> parameterKeys = keyProvider.getParameterKeys(injectableType, invokable.method, invokable.getAnnotation(annotationType)); Object[] parameters = new Object[parameterKeys.size()]; for (int i = 0; i < parameters.length; i++) parameters[i] = injectorProvider.get().getProvider(parameterKeys.get(i)).get(); try { invokable.invoke(injectee, parameters); } catch (Exception e) { throw MycilaGuiceException.toRuntime(e); } } } });
@Override public MethodInvoker apply(Method method) { return MethodInvoker.on(method); } });
@Override public MethodInvoker load(final Method method) throws Exception { int modifiers = method.getModifiers(); if (!Modifier.isPrivate(modifiers) && !Modifier.isProtected(modifiers)) { try { final $FastMethod fastMethod = BytecodeGen.newFastClassForMember(method.getDeclaringClass(), method).getMethod(method); return new MethodInvoker(method) { @Override public Object invoke(Object target, Object... parameters) { try { return fastMethod.invoke(target, parameters); } catch (InvocationTargetException e) { throw MycilaGuiceException.toRuntime(e); } } }; } catch ($CodeGenerationException e) {/* fall-through */} } if (!Modifier.isPublic(modifiers) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) { method.setAccessible(true); } return new MethodInvoker(method); } });
@Override public void injectMembers(I injectee) { KeyProvider<A> keyProvider = provider.get(); // inject fields for (Field field : fields) { Object value = injectorProvider.get().getProvider(keyProvider.getKey(injectableType, field, field.getAnnotation(annotationType))).get(); if (!field.isAccessible()) field.setAccessible(true); try { field.set(injectee, value); } catch (IllegalAccessException e) { throw new IllegalStateException("Failed to inject field " + field + ". Reason: " + e.getMessage(), e); } } // inject methods for (MethodInvoker invokable : methods) { List<Key<?>> parameterKeys = keyProvider.getParameterKeys(injectableType, invokable.method, invokable.getAnnotation(annotationType)); Object[] parameters = new Object[parameterKeys.size()]; for (int i = 0; i < parameters.length; i++) parameters[i] = injectorProvider.get().getProvider(parameterKeys.get(i)).get(); try { invokable.invoke(injectee, parameters); } catch (Exception e) { throw MycilaGuiceException.toRuntime(e); } } } });
@Override public MethodInvoker apply(Method method) { return MethodInvoker.on(method); } });
@Override public MethodInvoker load(final Method method) throws Exception { int modifiers = method.getModifiers(); if (!Modifier.isPrivate(modifiers) && !Modifier.isProtected(modifiers)) { try { final $FastMethod fastMethod = BytecodeGen.newFastClassForMember(method.getDeclaringClass(), method).getMethod(method); return new MethodInvoker(method) { @Override public Object invoke(Object target, Object... parameters) { try { return fastMethod.invoke(target, parameters); } catch (InvocationTargetException e) { throw MycilaGuiceException.toRuntime(e); } } }; } catch ($CodeGenerationException e) {/* fall-through */} } if (!Modifier.isPublic(modifiers) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) { method.setAccessible(true); } return new MethodInvoker(method); } });
@Override public void injectMembers(I injectee) { KeyProvider<A> keyProvider = provider.get(); // inject fields for (Field field : fields) { Object value = injectorProvider.get().getProvider(keyProvider.getKey(injectableType, field, field.getAnnotation(annotationType))).get(); if (!field.isAccessible()) field.setAccessible(true); try { field.set(injectee, value); } catch (IllegalAccessException e) { throw new IllegalStateException("Failed to inject field " + field + ". Reason: " + e.getMessage(), e); } } // inject methods for (MethodInvoker invokable : methods) { List<Key<?>> parameterKeys = keyProvider.getParameterKeys(injectableType, invokable.method, invokable.getAnnotation(annotationType)); Object[] parameters = new Object[parameterKeys.size()]; for (int i = 0; i < parameters.length; i++) parameters[i] = injectorProvider.get().getProvider(parameterKeys.get(i)).get(); try { invokable.invoke(injectee, parameters); } catch (Exception e) { throw MycilaGuiceException.toRuntime(e); } } } });
@Override public MethodInvoker apply(Method method) { return MethodInvoker.on(method); } });
@Override public MethodInvoker load(final Method method) throws Exception { int modifiers = method.getModifiers(); if (!Modifier.isPrivate(modifiers) && !Modifier.isProtected(modifiers)) { try { final $FastMethod fastMethod = BytecodeGen.newFastClassForMember(method.getDeclaringClass(), method).getMethod(method); return new MethodInvoker(method) { @Override public Object invoke(Object target, Object... parameters) { try { return fastMethod.invoke(target, parameters); } catch (InvocationTargetException e) { throw MycilaGuiceException.toRuntime(e); } } }; } catch ($CodeGenerationException e) {/* fall-through */} } if (!Modifier.isPublic(modifiers) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) { method.setAccessible(true); } return new MethodInvoker(method); } });
@Override public void handle(TypeLiteral<?> type, Object instance, Method method, PostConstruct annotation) { if (!Modifier.isStatic(method.getModifiers())) { List<Key<?>> parameterKeys = Reflect.getParameterKeys(type, method); Object[] parameters = new Object[parameterKeys.size()]; for (int i = 0; i < parameters.length; i++) parameters[i] = injector.get().getProvider(parameterKeys.get(i)).get(); MethodInvoker.on(method).invoke(instance, parameters); } }
@Override public void handle(TypeLiteral<?> type, Object instance, Method method, PostConstruct annotation) { if (!Modifier.isStatic(method.getModifiers())) { List<Key<?>> parameterKeys = Reflect.getParameterKeys(type, method); Object[] parameters = new Object[parameterKeys.size()]; for (int i = 0; i < parameters.length; i++) parameters[i] = injector.get().getProvider(parameterKeys.get(i)).get(); MethodInvoker.on(method).invoke(instance, parameters); } }
@Override public T get(Injector injector) { Object factory = Modifier.isStatic(method.getModifiers()) ? null : injector.getInstance(factoryKey); try { return providedType.cast(MethodInvoker.on(method).invoke(factory, getParameterValues(injector))); } catch (Exception e) { throw MycilaGuiceException.toRuntime(e); } } }
@Override public T get(Injector injector) { Object factory = Modifier.isStatic(method.getModifiers()) ? null : injector.getInstance(factoryKey); try { return providedType.cast(MethodInvoker.on(method).invoke(factory, getParameterValues(injector))); } catch (Exception e) { throw MycilaGuiceException.toRuntime(e); } } }