@SuppressWarnings("unchecked") @Override public <P> Collection<P> getParts(Class<? extends P> partInterface) { return (Collection<P>) parts.get(partInterface); }
@SuppressWarnings("unchecked") @Override public <L, P> Collection<P> getParts(@Nonnull Class<L> lookupClass, @Nonnull Class<? extends P> partType) { return (Collection<P>) parts.get(lookupClass); }
@SuppressWarnings("unchecked") @Override public <P> P getPart(Class<P> clazz) { Collection<?> items = parts.get(clazz); if (items.isEmpty()) { return null; } if (items.size() > 1) { Injector.LOG.WARN("Retrieving a Part for %s from multiple implementations (%s) - picking a random one!" + " Use @Replace to clarify! Context: %s", clazz.getName(), items, ExecutionPoint.snapshot().toString()); } return (P) items.iterator().next(); }
@SuppressWarnings("unchecked") private static Collection<Class<?>> getMixins(Class<? extends Mixable> forClass) { if (allMixins == null) { MultiMap<Class<? extends Mixable>, Class<?>> mixinMap = MultiMap.create(); for (Class<?> mixinClass : Injector.context().getParts(Mixin.class, Class.class)) { Class<?> target = mixinClass.getAnnotation(Mixin.class).value(); if (Mixable.class.isAssignableFrom(target)) { mixinMap.put((Class<? extends Mixable>) target, mixinClass); } else { Mixing.LOG.WARN("Mixing class '%s' has a non mixable target class (%s). Skipping mixin.", mixinClass.getName(), target.getName()); } } allMixins = mixinMap; } return allMixins.get(forClass); }
private Collection<Transformer<?, ?>> getFactories(Class<?> sourceType, Class<?> targetType) { if (factories == null) { MultiMap<Tuple<Class<?>, Class<?>>, Transformer<?, ?>> result = MultiMap.createOrdered(); for (Transformer<?, ?> factory : factoryList) { result.put(Tuple.create(factory.getSourceClass(), factory.getTargetClass()), factory); } factories = result; } return factories.get(Tuple.create(sourceType, targetType)); }