/** * Helper method for the above. Defined as a separated method because of generic type. */ private <T> boolean setOrUnsetOrdering(final Class<T> category, final boolean set, final Filter service1, final Filter service2) { boolean done = false; final List<T> precedences = new ArrayList<>(); // The plugins of the service which have precedence. for (final Iterator<? extends T> it=getServiceProviders(category, true); it.hasNext();) { final T factory = it.next(); if (service1.filter(factory)) { precedences.add(factory); } } for (final Iterator<? extends T> it=getServiceProviders(category, false); it.hasNext();) { final T factory = it.next(); if (service2.filter(factory)) { for (final T precedence : precedences) { if (precedence != factory) { if (set) done |= setOrdering(category, precedence, factory); else done |= unsetOrdering(category, precedence, factory); } } } } return done; }
for (final Iterator it=getServiceProviders(category, false); it.hasNext();) { final Object factory = it.next(); if (service1.filter(factory)) impl1 = factory; if (service2.filter(factory)) impl2 = factory; if (impl1!=null && impl2!=null && impl1!=impl2) { if (set) done |= setOrdering(category, impl1, impl2);
/** * Helper method for the above. */ private <T> boolean setOrUnsetOrdering(final Class<T> category, final boolean set, final Filter service1, final Filter service2) { boolean done = false; T impl1 = null; T impl2 = null; for (final Iterator<? extends T> it=getServiceProviders(category, false); it.hasNext();) { final T factory = it.next(); if (service1.filter(factory)) impl1 = factory; if (service2.filter(factory)) impl2 = factory; if (impl1!=null && impl2!=null && impl1!=impl2) { if (set) done |= setOrdering(category, impl1, impl2); else done |= unsetOrdering(category, impl1, impl2); } } return done; } }
continue; if (filter!=null && !filter.filter(factory)) { continue;
if (filter!=null && !filter.filter(candidate)) { return false;
continue; if (filter!=null && !filter.filter(factory)) { continue;
continue; if (filter!=null && !filter.filter(factory)) { continue;
final Hints hints, final Filter filter) if (filter!=null && !filter.filter(candidate)) { return false;
final Filter filter) if (filter!=null && !filter.filter(candidate)) { return false;