@Override public Object getInstance() { return provider.getInstance(); }
@Override public String toString() { return "[JsTypeBeanDef: factoryName=" + provider.getFactoryName() + ", name=" + provider.getName() + "]"; } }
@Override public String getName() { return provider.getName(); }
@Override public Set getQualifiers() { final Set<DynamicAnnotation> qualifiers = new HashSet<>(); for (final String serializedQualifier : JsArray.iterable(provider.getQualifiers())) { qualifiers.add(DynamicAnnotation.create(serializedQualifier)); } return qualifiers; }
@Override public Object getBean(final String name) { logger.debug("Looking up bean {}", name); final List<JsTypeProvider<?>> providers = beanProviders.get(name); if (providers.isEmpty()) { throw new IOCResolutionException("no matching bean instances for: " + name); } else if (providers.size() > 1) { throw new IOCResolutionException("multiple matching bean instances for: " + name); } else { return providers.get(0).getInstance(); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) public Collection<SyncBeanDef> lookupBeans(final String name, final boolean keepJsDups) { Assert.notNull(name); logger.debug("Looking up beans for {}", name); final Collection<FactoryHandle> handles = handlesByName.get(name); final Collection<SyncBeanDef<?>> runtimeBeanDefs = runtimeBeanDefsByName.get(name); final JsArray<JsTypeProvider<?>> jsProviders = getJsProviders(name); final Set<String> beanDefFactoryNames = new HashSet<>(); final Collection beanDefs = new ArrayList<SyncBeanDef<Object>>(handles.size()+runtimeBeanDefs.size()+jsProviders.length()); beanDefs.addAll(runtimeBeanDefs); for (final FactoryHandle handle : handles) { if (handle.isAvailableByLookup()) { beanDefs.add(new IOCBeanDefImplementation<>(handle, this.<Object>getType(name, handle, handle.getActualType()))); beanDefFactoryNames.add(handle.getFactoryName()); } } for (final JsTypeProvider<?> provider : JsArray.iterable(jsProviders)) { logger.debug("Found JS provider for name {} from factory {}", provider.getName(), provider.getFactoryName()); if (keepJsDups || provider.getFactoryName() == null || !beanDefFactoryNames.contains(provider.getFactoryName())) { logger.debug("Keeping JS provider for name {} from factory {}", provider.getName(), provider.getFactoryName()); beanDefs.add(new JsTypeBeanDefImplementation(provider, name)); } else { logger.debug("Rejecting duplicate JS provider for name {} from factory {}", provider.getName(), provider.getFactoryName()); } } logger.debug("Looked up {} beans: {}", beanDefs.size(), beanDefs); return beanDefs; }
public void testNoDuplicatesWithSuperTypeAliases() throws Exception { final JsArray<JsTypeProvider<?>> providers = WindowInjectionContextStorage.createOrGet() .getProviders(DuplicateInterface.class.getName()); assertEquals(2, providers.length()); assertEquals( new HashSet<>(Arrays.asList( JsSubTypeWithDuplicateInterface.class.getName(), JsSuperTypeWithDuplicateInterface.class.getName())), new HashSet<>(Arrays.asList( providers.get(0).getInstance().getClass().getName(), providers.get(1).getInstance().getClass().getName()))); }