From e0449b2db6c910ffcc933fb5754db01280480a9a Mon Sep 17 00:00:00 2001 From: Glen Husman Date: Wed, 14 May 2014 16:40:22 -0700 Subject: [PATCH] Add ClassSource.attemptLoadFrom method This method is an alternative to chaining retry calls --- .../protocol/utility/ClassSource.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/utility/ClassSource.java b/ProtocolLib/src/main/java/com/comphenix/protocol/utility/ClassSource.java index 8b76b5af..25b7d95c 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/utility/ClassSource.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/utility/ClassSource.java @@ -14,7 +14,7 @@ public abstract class ClassSource { public static ClassSource fromClassLoader() { return fromClassLoader(ClassSource.class.getClassLoader()); } - + /** * Construct a class source from the default class loader and package. * @param packageName - the package that is prepended to every lookup. @@ -23,7 +23,7 @@ public abstract class ClassSource { public static ClassSource fromPackage(String packageName) { return fromClassLoader().usingPackage(packageName); } - + /** * Construct a class source from the given class loader. * @param loader - the class loader. @@ -57,7 +57,20 @@ public abstract class ClassSource { } }; } - + + /** + * Retrieve a class source that will attempt lookups in each of the given sources in the order they are in the array, and return the first value that is found. + * @param sources - the class sources. + * @return A new class source. + */ + public static ClassSource attemptLoadFrom(final ClassSource... sources) { + ClassSource source = sources[0]; + for(int i = 1; i < sources.length; i++){ + source = source.retry(sources[i]); + } + return source; + } + /** * Retrieve a class source that will retry failed lookups in the given source. * @param other - the other class source. @@ -75,7 +88,7 @@ public abstract class ClassSource { } }; } - + /** * Retrieve a class source that prepends a specific package name to every lookup. * @param packageName - the package name to prepend. @@ -99,7 +112,7 @@ public abstract class ClassSource { protected static String append(String a, String b) { boolean left = a.endsWith("."); boolean right = b.endsWith("."); - + // Only add a dot if necessary if (left && right) return a.substring(0, a.length() - 1) + b; @@ -108,7 +121,7 @@ public abstract class ClassSource { else return a + "." + b; } - + /** * Retrieve a class by name. * @param canonicalName - the full canonical name of the class.