Class SPIClassIterator<S>

java.lang.Object
org.elasticsearch.plugins.spi.SPIClassIterator<S>
All Implemented Interfaces:
Iterator<Class<? extends S>>

public final class SPIClassIterator<S> extends Object implements Iterator<Class<? extends S>>
Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found.
  • Method Details

    • get

      public static <S> SPIClassIterator<S> get(Class<S> clazz)
      Creates a new SPI iterator to lookup services of type clazz using the same ClassLoader as the argument.
    • get

      public static <S> SPIClassIterator<S> get(Class<S> clazz, ClassLoader loader)
      Creates a new SPI iterator to lookup services of type clazz using the given classloader.
    • isParentClassLoader

      public static boolean isParentClassLoader(ClassLoader parent, ClassLoader child)
      Utility method to check if some class loader is a (grand-)parent of or the same as another one. This means the child will be able to load all classes from the parent, too.

      If caller's codesource doesn't have enough permissions to do the check, false is returned (this is fine, because if we get a SecurityException it is for sure no parent).

    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface Iterator<S>
    • next

      public Class<? extends S> next()
      Specified by:
      next in interface Iterator<S>
    • remove

      public void remove()
      Specified by:
      remove in interface Iterator<S>