private static BuildMetaClass getParameterizedInterface(final Map<String, MetaType> typeArgsByTypeParam, final MetaClass iface) { final MetaType[] ifaceTypeArgs = getTypeArgumentsForInterface(typeArgsByTypeParam, iface); return cloneToBuildMetaClass(iface, typeParametersOf(ifaceTypeArgs), true); }
private static BuildMetaClass getParameterizedInterface(final Map<String, MetaType> typeArgsByTypeParam, final MetaClass iface) { final MetaType[] ifaceTypeArgs = getTypeArgumentsForInterface(typeArgsByTypeParam, iface); return cloneToBuildMetaClass(iface, typeParametersOf(ifaceTypeArgs), true); }
private Statement initializeProxyHelper(final Injectable injectable) { return newObject( parameterizedAs(ProxyHelperImpl.class, typeParametersOf(injectable.getInjectedType())), injectable.getFactoryName()); }
private void registerFactoryWithContext(final Injectable injectable, final MetaClass factoryClass, final Map<Class<? extends Annotation>, MetaClass> scopeContexts, @SuppressWarnings("rawtypes") final BlockBuilder registerFactoriesBody) { final Class<? extends Annotation> scope = injectable.getScope(); final MetaClass injectedType = injectable.getInjectedType(); final MetaClass scopeContextImpl = Assert.notNull("No scope context for " + scope.getSimpleName(), scopeContexts.get(scope)); final String contextVarName = getContextVarName(scopeContextImpl); registerFactoriesBody.append(loadVariable(contextVarName).invoke("registerFactory", Stmt.castTo(parameterizedAs(Factory.class, typeParametersOf(injectedType)), invokeStatic(GWT.class, "create", factoryClass)))); }
@Test public void parameterizedInterfaceIsAssignableToParameterizedSuperType() throws Exception { final MetaClass parameterized = parameterizedAs(List.class, typeParametersOf(Integer.class)); final MetaClass superParameterized = parameterizedAs(Collection.class, typeParametersOf(Integer.class)); assertTrue(GraphUtil.hasAssignableTypeParameters(parameterized, superParameterized)); }
private void declareAndInitializeProxyHelper(final Injectable injectable, final ClassStructureBuilder<?> bodyBlockBuilder) { bodyBlockBuilder .privateField("proxyHelper", parameterizedAs(ProxyHelper.class, typeParametersOf(injectable.getInjectedType()))) .modifiers(Modifier.Final) .initializesWith(initializeProxyHelper(injectable)) .finish(); }
private MetaClass addFactoryDeclaration(final String factoryName, final MetaClass typeCreatedByFactory, final IOCProcessingContext processingContext) { final ClassStructureBuilder<?> builder = processingContext.getBootstrapBuilder(); final BuildMetaClass factory = ClassBuilder .define(factoryName, parameterizedAs(Factory.class, typeParametersOf(typeCreatedByFactory))) .publicScope().abstractClass().body().getClassDefinition(); builder.declaresInnerClass(new InnerClass(factory)); return factory; }
@Test public void parameterizedInterfaceIsAssignableToSelf() throws Exception { final MetaClass parameterized = parameterizedAs(Collection.class, typeParametersOf(Integer.class)); assertTrue(GraphUtil.hasAssignableTypeParameters(parameterized, parameterized)); }
private static Statement supplierOf(final Statement value) { return newInstanceOf(parameterizedAs(Supplier.class, typeParametersOf(value.getType()))) .extend() .publicOverridesMethod("get") .append(Stmt.nestedCall(value).returnValue()) .finish() .finish(); }
private static Statement supplierOf(final Statement value) { return newInstanceOf(parameterizedAs(Supplier.class, typeParametersOf(value.getType()))) .extend() .publicOverridesMethod("get") .append(Stmt.nestedCall(value).returnValue()) .finish() .finish(); }
@Test public void interfaceWithConcreteTypeParameterSupertypeIsAssignableToParameterizedSuperType() throws Exception { final MetaClass parameterized = MetaClassFactory.get(IntCollection.class); final MetaClass superParameterized = parameterizedAs(Collection.class, typeParametersOf(Integer.class)); assertTrue(GraphUtil.hasAssignableTypeParameters(parameterized, superParameterized)); }
@Test public void parameterizedTypeIsAssignableToSameTypeWithWildcard() throws Exception { final MetaClass parameterized = parameterizedAs(Collection.class, typeParametersOf(Integer.class)); final MetaClass wildcard = MetaClassFactory.get(WildcardMethod.class).getMethod("method", new Class[0]).getReturnType(); assertTrue(GraphUtil.hasAssignableTypeParameters(parameterized, wildcard)); }
@Test public void rawInterfaceIsAssignableToParameterizedSameInterfaceWithBaseParameterType() throws Exception { final MetaClass parameterized = parameterizedAs(ThrowableList.class, typeParametersOf(Throwable.class)); final MetaClass raw = MetaClassFactory.get(ThrowableList.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawClassIsAssignableToParameterizedSameClassWithBaseParameterType() throws Exception { final MetaClass parameterized = parameterizedAs(ThrowableArrayList.class, typeParametersOf(Throwable.class)); final MetaClass raw = MetaClassFactory.get(ThrowableArrayList.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawInterfaceIsAssignableToParameterizedSameInterface() throws Exception { final MetaClass parameterized = parameterizedAs(Collection.class, typeParametersOf(Integer.class)); final MetaClass raw = MetaClassFactory.get(Collection.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawClassIsAssignableToParameterizedSameClass() throws Exception { final MetaClass parameterized = parameterizedAs(ArrayList.class, typeParametersOf(Integer.class)); final MetaClass raw = MetaClassFactory.get(ArrayList.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawClassIsAssignableToParameterizedInterfaceWithBaseParameterType() throws Exception { final MetaClass parameterized = parameterizedAs(ThrowableList.class, typeParametersOf(Throwable.class)); final MetaClass raw = MetaClassFactory.get(ThrowableArrayList.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawInterfaceIsAssignableToParameterizedSuperInterface() throws Exception { final MetaClass parameterized = parameterizedAs(Collection.class, typeParametersOf(Integer.class)); final MetaClass raw = MetaClassFactory.get(List.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawClassIsAssignableToParameterizedInterface() throws Exception { final MetaClass parameterized = parameterizedAs(List.class, typeParametersOf(Integer.class)); final MetaClass raw = MetaClassFactory.get(ArrayList.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }
@Test public void rawInterfaceIsAssignableToParameterizedSuperInterfaceWithBaseParameterType() throws Exception { final MetaClass parameterized = parameterizedAs(ThrowableCollection.class, typeParametersOf(Throwable.class)); final MetaClass raw = MetaClassFactory.get(ThrowableList.class); assertNull(raw.getParameterizedType()); assertTrue(GraphUtil.hasAssignableTypeParameters(raw, parameterized)); }