void readNextResourceFile() throws IOException { if ( getResources().hasMoreElements() ) { final URL nextElement = getResources().nextElement(); currentResourceLines = readLines( nextElement ); } }
public LazyClassReader( final String serviceClassCanonicalName, final ClassLoader loader ) { this.serviceClassCanonicalName = serviceClassCanonicalName; this.loader = loader; this.resources = readAllServiceResources(); }
public static <T> List<Class<T>> loadImplementationsFor( Class<T> clazz ) { final ClassLoader cl = Thread.currentThread().getContextClassLoader(); final Iterator<Class<T>> reader = new LazyClassReader<T>( clazz, cl ); return readAndConvertToList( reader ); }
String readNextLine( final BufferedReader reader ) throws IOException { final String ln = reader.readLine(); if ( ln != null && !isValidClassName( ln ) ) throw new IOException( "Invalid class name: " + ln ); return ln; }
@Override public boolean hasNext() { try { if ( currentResourceLines == null || !currentResourceLines.hasNext() ) readNextResourceFile(); return currentResourceLines != null && currentResourceLines.hasNext(); } catch ( final FileNotFoundException cause ) { return false; } catch ( final IOException cause ) { throw new IllegalStateException( cause ); } }
Iterator<String> readLines( final URL url ) throws IOException { @Cleanup final InputStream inputStream = url.openStream(); @Cleanup final BufferedReader reader = new BufferedReader( new InputStreamReader( inputStream, "utf-8" ) ); final List<String> lines = new ArrayList<String>(); String line = null; while ( ( line = readNextLine( reader ) ) != null ) lines.add( line ); return lines.iterator(); }
public static <T> List<Class<T>> loadImplementationsFor( String clazz ) { final ClassLoader cl = Thread.currentThread().getContextClassLoader(); final Iterator<Class<T>> reader = new LazyClassReader<T>( clazz, cl ); return readAndConvertToList( reader ); }