private <T> WebBuilder view(ViewRender<T> view, Key key) { _views.add(new ViewRefRender(view, (Class) key.type(), 0)); return this; }
/** * Returns raw class of associated type * * @return raw class */ public Class<T> rawClass() { Type type = type(); if (type instanceof Class) { return (Class) type; } else if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; return (Class) pType.getRawType(); } else { throw new UnsupportedOperationException(type + " " + type.getClass().getName()); } }
sb.append("["); Type type = type(); if (type instanceof Class<?>) { sb.append(((Class<?>) type).getSimpleName());
static <T> InjectionPoint<T> of(Key<T> key) { return new InjectionPointImpl<>(key, key.type(), key.rawClass().getSimpleName(), key.annotations(), key.rawClass()); }
/** * Creates a new instance for a given key. */ @Override public <T> T instance(Key<T> key) { Objects.requireNonNull(key); Class<T> type = (Class) key.rawClass(); if (type.equals(Provider.class)) { TypeRef typeRef = TypeRef.of(key.type()); TypeRef param = typeRef.param(0); return (T) provider(Key.of(param.type())); } Provider<T> provider = provider(key); if (provider != null) { return provider.get(); } else { return null; } }
@Override public <T> Provider<T> provider(Injector injector, InjectionPoint<T> ip) { Var var = ip.annotation(Var.class); if (var == null) { return null; } String name = var.value(); if (name.isEmpty()) { name = ip.name(); } String defaultValue = var.defaultValue(); return new ProviderVar<T>((InjectorAmp) injector, (Class<T>) ip.key().type(), name, defaultValue); }
private void buildViews(InjectorAmp inject) { for (Binding<ViewRender> binding : inject.bindings(ViewRender.class)) { try { ViewRender<?> view = (ViewRender<?>) binding.provider().get(); Key<ViewRender<?>> key = (Key) binding.key(); TypeRef typeRef = TypeRef.of(key.type()); TypeRef renderRef = typeRef.to(ViewRender.class).param(0); Class<?> type = renderRef != null ? renderRef.rawClass() : Object.class; _views.add(new ViewRefRender(view, type, binding.priority())); } catch (Exception e) { log.log(Level.FINE, e.toString(), e); } } for (Binding<ViewResolver> binding : inject.bindings(ViewResolver.class)) { try { ViewResolver<?> view = (ViewResolver<?>) binding.provider().get(); Key<ViewResolver<?>> key = (Key) binding.key(); TypeRef typeRef = TypeRef.of(key.type()); TypeRef resolverRef = typeRef.to(ViewResolver.class).param(0); Class<?> type = resolverRef != null ? resolverRef.rawClass() : Object.class; _views.add(new ViewRefResolver(view, type, binding.priority())); } catch (Exception e) { log.log(Level.FINE, e.toString(), e); } } }
/** * default provider */ private <T> Provider<T> createProvider(Key<T> key) { Class<T> type = (Class<T>) key.rawClass(); if (Provider.class.equals(type)) { TypeRef subType = TypeRef.of(key.type()).to(Provider.class).param(0); Key<Object> subkey = Key.of(subType.type(), key.annotationTypes()); return (Provider) new ProviderProvider(key, -10, provider(subkey)); } else if (Optional.class.equals(type)) { TypeRef subType = TypeRef.of(key.type()).to(Optional.class).param(0); Key<Object> subkey = Key.of(subType.type(), key.annotationTypes()); return (Provider) new ProviderOptional(key, -10, provider(subkey)); } else if (type.isInterface() || Modifier.isAbstract(type.getModifiers())) { return new ProviderNull(key, -10000, new InjectScopeSingleton()); } int priority = -10; // auto-provider is factory InjectScope<T> scope = findScope(type); BindingAmp<T> binding = new ProviderConstructor<>(this, key, priority, scope, type); binding.bind(); return binding.provider(); }
private void init() { for (ConvertFrom<?> convertManager : ConvertManagerImpl.convertManagers()) { add(convertManager); } for (Binding<ConvertFrom<?>> binding : _injector.bindings(new Key<ConvertFrom<?>>() {})) { add(binding.provider().get()); } for (Binding<Convert<?,?>> binding : _injector.bindings(new Key<Convert<?,?>>() {})) { TypeRef convertRef = TypeRef.of(binding.key().type()) .to(Convert.class); Class<?> sourceType = convertRef.param(0).rawClass(); Class<?> targetType = convertRef.param(1).rawClass(); add(sourceType, targetType, (Convert) binding.provider().get()); } }