home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.URL;
-
- public final class ServiceLoader<S> implements Iterable<S> {
- private static final String PREFIX = "META-INF/services/";
- private Class<S> service;
- private ClassLoader loader;
- private LinkedHashMap<String, S> providers = new LinkedHashMap();
- private ServiceLoader<S>.LazyIterator lookupIterator;
-
- public void reload() {
- this.providers.clear();
- this.lookupIterator = new LazyIterator(this, this.service, this.loader, (1)null);
- }
-
- private ServiceLoader(Class<S> var1, ClassLoader var2) {
- this.service = var1;
- this.loader = var2;
- this.reload();
- }
-
- private static void fail(Class var0, String var1, Throwable var2) throws ServiceConfigurationError {
- throw new ServiceConfigurationError(var0.getName() + ": " + var1, var2);
- }
-
- private static void fail(Class var0, String var1) throws ServiceConfigurationError {
- throw new ServiceConfigurationError(var0.getName() + ": " + var1);
- }
-
- private static void fail(Class var0, URL var1, int var2, String var3) throws ServiceConfigurationError {
- fail(var0, var1 + ":" + var2 + ": " + var3);
- }
-
- private int parseLine(Class var1, URL var2, BufferedReader var3, int var4, List<String> var5) throws IOException, ServiceConfigurationError {
- String var6 = var3.readLine();
- if (var6 == null) {
- return -1;
- } else {
- int var7 = var6.indexOf(35);
- if (var7 >= 0) {
- var6 = var6.substring(0, var7);
- }
-
- var6 = var6.trim();
- int var8 = var6.length();
- if (var8 != 0) {
- if (var6.indexOf(32) >= 0 || var6.indexOf(9) >= 0) {
- fail(var1, var2, var4, "Illegal configuration-file syntax");
- }
-
- int var9 = var6.codePointAt(0);
- if (!Character.isJavaIdentifierStart(var9)) {
- fail(var1, var2, var4, "Illegal provider-class name: " + var6);
- }
-
- for(int var10 = Character.charCount(var9); var10 < var8; var10 += Character.charCount(var9)) {
- var9 = var6.codePointAt(var10);
- if (!Character.isJavaIdentifierPart(var9) && var9 != 46) {
- fail(var1, var2, var4, "Illegal provider-class name: " + var6);
- }
- }
-
- if (!this.providers.containsKey(var6) && !var5.contains(var6)) {
- var5.add(var6);
- }
- }
-
- return var4 + 1;
- }
- }
-
- private Iterator<String> parse(Class var1, URL var2) throws ServiceConfigurationError {
- InputStream var3 = null;
- BufferedReader var4 = null;
- ArrayList var5 = new ArrayList();
-
- try {
- var3 = var2.openStream();
- var4 = new BufferedReader(new InputStreamReader(var3, "utf-8"));
- int var6 = 1;
-
- while((var6 = this.parseLine(var1, var2, var4, var6, var5)) >= 0) {
- }
- } catch (IOException var15) {
- fail(var1, "Error reading configuration file", var15);
- } finally {
- try {
- if (var4 != null) {
- var4.close();
- }
-
- if (var3 != null) {
- var3.close();
- }
- } catch (IOException var14) {
- fail(var1, "Error closing configuration file", var14);
- }
-
- }
-
- return var5.iterator();
- }
-
- public Iterator<S> iterator() {
- return new 1(this);
- }
-
- public static <S> ServiceLoader<S> load(Class<S> var0, ClassLoader var1) {
- return new ServiceLoader<S>(var0, var1);
- }
-
- public static <S> ServiceLoader<S> load(Class<S> var0) {
- ClassLoader var1 = Thread.currentThread().getContextClassLoader();
- return load(var0, var1);
- }
-
- public static <S> ServiceLoader<S> loadInstalled(Class<S> var0) {
- ClassLoader var1 = ClassLoader.getSystemClassLoader();
-
- ClassLoader var2;
- for(var2 = null; var1 != null; var1 = var1.getParent()) {
- var2 = var1;
- }
-
- return load(var0, var2);
- }
-
- public String toString() {
- return "java.util.ServiceLoader[" + this.service.getName() + "]";
- }
-
- // $FF: synthetic method
- static void access$100(Class var0, String var1, Throwable var2) throws ServiceConfigurationError {
- fail(var0, var1, var2);
- }
-
- // $FF: synthetic method
- static Iterator access$200(ServiceLoader var0, Class var1, URL var2) throws ServiceConfigurationError {
- return var0.parse(var1, var2);
- }
-
- // $FF: synthetic method
- static LinkedHashMap access$300(ServiceLoader var0) {
- return var0.providers;
- }
-
- // $FF: synthetic method
- static void access$400(Class var0, String var1) throws ServiceConfigurationError {
- fail(var0, var1);
- }
-
- // $FF: synthetic method
- static LazyIterator access$500(ServiceLoader var0) {
- return var0.lookupIterator;
- }
- }
-