From 21ea5eeca8448c8880a3f2d975dee3107e3175b3 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Wed, 23 Sep 2009 07:43:43 +0200 Subject: Slight tweak to SpiLoadUtil: It now returns iterables instead of iterators. --- src/lombok/core/SpiLoadUtil.java | 38 ++++++++++++++++------------- src/lombok/eclipse/HandlerLibrary.java | 44 +++++++++++++--------------------- 2 files changed, 38 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/lombok/core/SpiLoadUtil.java b/src/lombok/core/SpiLoadUtil.java index c28f8c23..9f047c22 100644 --- a/src/lombok/core/SpiLoadUtil.java +++ b/src/lombok/core/SpiLoadUtil.java @@ -61,7 +61,7 @@ public class SpiLoadUtil { * * @param target class to find implementations for. */ - public static Iterator findServices(Class target) throws IOException { + public static Iterable findServices(Class target) throws IOException { return findServices(target, Thread.currentThread().getContextClassLoader()); } @@ -75,7 +75,7 @@ public class SpiLoadUtil { * @param loader The classloader object to use to both the spi discovery files, as well as the loader to use * to make the returned instances. */ - public static Iterator findServices(final Class target, final ClassLoader loader) throws IOException { + public static Iterable findServices(final Class target, final ClassLoader loader) throws IOException { Enumeration resources = loader.getResources("META-INF/services/" + target.getName()); final Set entries = new LinkedHashSet(); while ( resources.hasMoreElements() ) { @@ -84,21 +84,25 @@ public class SpiLoadUtil { } final Iterator names = entries.iterator(); - return new Iterator() { - public boolean hasNext() { - return names.hasNext(); - } - - public C next() { - try { - return target.cast(Class.forName(names.next(), true, loader).newInstance()); - } catch ( Throwable t ) { - throw Lombok.sneakyThrow(t); - } - } - - public void remove() { - throw new UnsupportedOperationException(); + return new Iterable () { + @Override public Iterator iterator() { + return new Iterator() { + @Override public boolean hasNext() { + return names.hasNext(); + } + + @Override public C next() { + try { + return target.cast(Class.forName(names.next(), true, loader).newInstance()); + } catch ( Throwable t ) { + throw Lombok.sneakyThrow(t); + } + } + + @Override public void remove() { + throw new UnsupportedOperationException(); + } + }; } }; } diff --git a/src/lombok/eclipse/HandlerLibrary.java b/src/lombok/eclipse/HandlerLibrary.java index 1b9ed545..ed8196f7 100644 --- a/src/lombok/eclipse/HandlerLibrary.java +++ b/src/lombok/eclipse/HandlerLibrary.java @@ -23,11 +23,11 @@ package lombok.eclipse; import static lombok.eclipse.Eclipse.toQualifiedName; +import java.io.IOException; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import lombok.Lombok; @@ -96,44 +96,34 @@ public class HandlerLibrary { /** Uses SPI Discovery to find implementations of {@link EclipseAnnotationHandler}. */ @SuppressWarnings("unchecked") private static void loadAnnotationHandlers(HandlerLibrary lib) { - Iterator it; try { - it = SpiLoadUtil.findServices(EclipseAnnotationHandler.class); - } catch ( Throwable t ) { - throw Lombok.sneakyThrow(t); - } - - while ( it.hasNext() ) { - try { - EclipseAnnotationHandler handler = it.next(); - Class annotationClass = - SpiLoadUtil.findAnnotationClass(handler.getClass(), EclipseAnnotationHandler.class); - AnnotationHandlerContainer container = new AnnotationHandlerContainer(handler, annotationClass); - if ( lib.annotationHandlers.put(container.annotationClass.getName(), container) != null ) { - Eclipse.error(null, "Duplicate handlers for annotation type: " + container.annotationClass.getName()); + for (EclipseAnnotationHandler handler : SpiLoadUtil.findServices(EclipseAnnotationHandler.class)) { + try { + Class annotationClass = + SpiLoadUtil.findAnnotationClass(handler.getClass(), EclipseAnnotationHandler.class); + AnnotationHandlerContainer container = new AnnotationHandlerContainer(handler, annotationClass); + if (lib.annotationHandlers.put(container.annotationClass.getName(), container) != null) { + Eclipse.error(null, "Duplicate handlers for annotation type: " + container.annotationClass.getName()); + } + lib.typeLibrary.addType(container.annotationClass.getName()); + } catch (Throwable t) { + Eclipse.error(null, "Can't load Lombok annotation handler for Eclipse: ", t); } - lib.typeLibrary.addType(container.annotationClass.getName()); - } catch ( Throwable t ) { - Eclipse.error(null, "Can't load Lombok annotation handler for Eclipse: ", t); } + } catch ( IOException e ) { + Lombok.sneakyThrow(e); } } /** Uses SPI Discovery to find implementations of {@link EclipseASTVisitor}. */ private static void loadVisitorHandlers(HandlerLibrary lib) { - Iterator it; try { - it = SpiLoadUtil.findServices(EclipseASTVisitor.class); + for (EclipseASTVisitor visitor : SpiLoadUtil.findServices(EclipseASTVisitor.class)) { + lib.visitorHandlers.add(visitor); + } } catch ( Throwable t ) { throw Lombok.sneakyThrow(t); } - while ( it.hasNext() ) { - try { - lib.visitorHandlers.add(it.next()); - } catch ( Throwable t ) { - Eclipse.error(null, "Can't load Lombok visitor handler for Eclipse: ", t); - } - } } /** -- cgit