You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/04/02 20:46:43 UTC
svn commit: r1088081 - in
/commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools:
DefaultClassHolder.java DiscoverClass.java DiscoverSingleton.java
SPInterface.java Service.java
Author: simonetripodi
Date: Sat Apr 2 18:46:43 2011
New Revision: 1088081
URL: http://svn.apache.org/viewvc?rev=1088081&view=rev
Log:
DiscoverClass and DiscoverSingleton (and related dependencies) now use generics, no more casts needed by clients
Modified:
commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DefaultClassHolder.java
commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverClass.java
commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverSingleton.java
commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/SPInterface.java
commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/Service.java
Modified: commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DefaultClassHolder.java
URL: http://svn.apache.org/viewvc/commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DefaultClassHolder.java?rev=1088081&r1=1088080&r2=1088081&view=diff
==============================================================================
--- commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DefaultClassHolder.java (original)
+++ commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DefaultClassHolder.java Sat Apr 2 18:46:43 2011
@@ -30,11 +30,11 @@ import org.apache.commons.discovery.reso
*
* @author Richard A. Sitze
*/
-public class DefaultClassHolder {
- private Class defaultClass;
+public class DefaultClassHolder<T> {
+ private Class<? extends T> defaultClass;
private final String defaultName;
- public DefaultClassHolder(Class defaultClass) {
+ public <S extends T> DefaultClassHolder(Class<S> defaultClass) {
this.defaultClass = defaultClass;
this.defaultName = defaultClass.getName();
}
@@ -52,12 +52,12 @@ public class DefaultClassHolder {
* and verify that it implements the SPI.
* (this forces the check, no way out..).
*/
- public Class getDefaultClass(SPInterface spi, ClassLoaders loaders) {
+ public <S extends T> Class<S> getDefaultClass(SPInterface<T> spi, ClassLoaders loaders) {
if (defaultClass == null) {
- DiscoverClasses classDiscovery = new DiscoverClasses(loaders);
- ResourceClassIterator classes = classDiscovery.findResourceClasses(getDefaultName());
+ DiscoverClasses<T> classDiscovery = new DiscoverClasses<T>(loaders);
+ ResourceClassIterator<T> classes = classDiscovery.findResourceClasses(getDefaultName());
if (classes.hasNext()) {
- ResourceClass info = classes.nextResourceClass();
+ ResourceClass<T> info = classes.nextResourceClass();
try {
defaultClass = info.loadClass();
} catch (Exception e) {
@@ -70,7 +70,9 @@ public class DefaultClassHolder {
spi.verifyAncestory(defaultClass);
}
- return defaultClass;
+ @SuppressWarnings("unchecked") // the SPInterface.verifyAncestory already asserted
+ Class<S> returned = (Class<S>) defaultClass;
+ return returned;
}
public String getDefaultName() {
Modified: commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverClass.java
URL: http://svn.apache.org/viewvc/commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverClass.java?rev=1088081&r1=1088080&r2=1088081&view=diff
==============================================================================
--- commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverClass.java (original)
+++ commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverClass.java Sat Apr 2 18:46:43 2011
@@ -17,8 +17,9 @@
package org.apache.commons.discovery.tools;
import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Properties;
-import java.util.Vector;
import org.apache.commons.discovery.DiscoveryException;
import org.apache.commons.discovery.ResourceClass;
@@ -136,11 +137,6 @@ public class DiscoverClass {
/**
* Readable placeholder for a null value.
*/
- public static final DefaultClassHolder nullDefaultImpl = null;
-
- /**
- * Readable placeholder for a null value.
- */
public static final PropertiesHolder nullProperties = null;
@@ -168,7 +164,7 @@ public class DiscoverClass {
}
- public ClassLoaders getClassLoaders(Class spiClass) {
+ public ClassLoaders getClassLoaders(Class<?> spiClass) {
return classLoaders;
}
@@ -184,13 +180,13 @@ public class DiscoverClass {
* the SPI cannot be found, if the class cannot be loaded, or if
* the resulting class does not implement (or extend) the SPI.
*/
- public Class find(Class spiClass)
+ public <T, S extends T> Class<S> find(Class<T> spiClass)
throws DiscoveryException
{
return find(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
nullProperties,
- nullDefaultImpl);
+ (DefaultClassHolder<T>) null);
}
/**
@@ -206,13 +202,13 @@ public class DiscoverClass {
* the SPI cannot be found, if the class cannot be loaded, or if
* the resulting class does not implement (or extend) the SPI.
*/
- public Class find(Class spiClass, Properties properties)
+ public <T, S extends T> Class<S> find(Class<T> spiClass, Properties properties)
throws DiscoveryException
{
return find(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(properties),
- nullDefaultImpl);
+ (DefaultClassHolder<T>) null);
}
/**
@@ -228,13 +224,13 @@ public class DiscoverClass {
* the SPI cannot be found, if the class cannot be loaded, or if
* the resulting class does not implement (or extend) the SPI.
*/
- public Class find(Class spiClass, String defaultImpl)
+ public <T, S extends T> Class<S> find(Class<T> spiClass, String defaultImpl)
throws DiscoveryException
{
return find(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
nullProperties,
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -252,13 +248,13 @@ public class DiscoverClass {
* the SPI cannot be found, if the class cannot be loaded, or if
* the resulting class does not implement (or extend) the SPI.
*/
- public Class find(Class spiClass, Properties properties, String defaultImpl)
+ public <T, S extends T> Class<S> find(Class<T> spiClass, Properties properties, String defaultImpl)
throws DiscoveryException
{
return find(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(properties),
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -276,13 +272,13 @@ public class DiscoverClass {
* the SPI cannot be found, if the class cannot be loaded, or if
* the resulting class does not implement (or extend) the SPI.
*/
- public Class find(Class spiClass, String propertiesFileName, String defaultImpl)
+ public <T, S extends T> Class<S> find(Class<T> spiClass, String propertiesFileName, String defaultImpl)
throws DiscoveryException
{
return find(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(propertiesFileName),
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -300,10 +296,10 @@ public class DiscoverClass {
* the SPI cannot be found, if the class cannot be loaded, or if
* the resulting class does not implement (or extend) the SPI.
*/
- public static Class find(ClassLoaders loaders,
- SPInterface spi,
+ public static <T, S extends T> Class<S> find(ClassLoaders loaders,
+ SPInterface<T> spi,
PropertiesHolder properties,
- DefaultClassHolder defaultImpl)
+ DefaultClassHolder<T> defaultImpl)
throws DiscoveryException
{
if (loaders == null) {
@@ -319,14 +315,14 @@ public class DiscoverClass {
String[] classNames = discoverClassNames(spi, props);
if (classNames.length > 0) {
- DiscoverClasses classDiscovery = new DiscoverClasses(loaders);
+ DiscoverClasses<T> classDiscovery = new DiscoverClasses<T>(loaders);
- ResourceClassIterator classes =
+ ResourceClassIterator<T> classes =
classDiscovery.findResourceClasses(classNames[0]);
// If it's set as a property.. it had better be there!
if (classes.hasNext()) {
- ResourceClass info = classes.nextResourceClass();
+ ResourceClass<T> info = classes.nextResourceClass();
try {
return info.loadClass();
} catch (Exception e) {
@@ -337,8 +333,8 @@ public class DiscoverClass {
ResourceNameIterator classIter =
(new DiscoverServiceNames(loaders)).findResourceNames(spi.getSPName());
- ResourceClassIterator classes =
- (new DiscoverClasses(loaders)).findResourceClasses(classIter);
+ ResourceClassIterator<T> classes =
+ (new DiscoverClasses<T>(loaders)).findResourceClasses(classIter);
if (!classes.hasNext() && defaultImpl != null) {
@@ -347,7 +343,7 @@ public class DiscoverClass {
// Services we iterate through until we find one that loads..
while (classes.hasNext()) {
- ResourceClass info = classes.nextResourceClass();
+ ResourceClass<T> info = classes.nextResourceClass();
try {
return info.loadClass();
} catch (Exception e) {
@@ -372,7 +368,7 @@ public class DiscoverClass {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public Object newInstance(Class spiClass)
+ public <T> T newInstance(Class<T> spiClass)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -380,9 +376,9 @@ public class DiscoverClass {
InvocationTargetException
{
return newInstance(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
nullProperties,
- nullDefaultImpl);
+ (DefaultClassHolder<T>) null);
}
/**
@@ -401,7 +397,7 @@ public class DiscoverClass {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public Object newInstance(Class spiClass, Properties properties)
+ public <T> T newInstance(Class<T> spiClass, Properties properties)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -409,9 +405,9 @@ public class DiscoverClass {
InvocationTargetException
{
return newInstance(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(properties),
- nullDefaultImpl);
+ (DefaultClassHolder<T>) null);
}
/**
@@ -428,7 +424,7 @@ public class DiscoverClass {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public Object newInstance(Class spiClass, String defaultImpl)
+ public <T> T newInstance(Class<T> spiClass, String defaultImpl)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -436,9 +432,9 @@ public class DiscoverClass {
InvocationTargetException
{
return newInstance(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
nullProperties,
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -459,7 +455,7 @@ public class DiscoverClass {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public Object newInstance(Class spiClass, Properties properties, String defaultImpl)
+ public <T> T newInstance(Class<T> spiClass, Properties properties, String defaultImpl)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -467,9 +463,9 @@ public class DiscoverClass {
InvocationTargetException
{
return newInstance(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(properties),
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -490,7 +486,7 @@ public class DiscoverClass {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public Object newInstance(Class spiClass, String propertiesFileName, String defaultImpl)
+ public <T> T newInstance(Class<T> spiClass, String propertiesFileName, String defaultImpl)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -498,9 +494,9 @@ public class DiscoverClass {
InvocationTargetException
{
return newInstance(getClassLoaders(spiClass),
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(propertiesFileName),
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -521,10 +517,10 @@ public class DiscoverClass {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object newInstance(ClassLoaders loaders,
- SPInterface spi,
+ public static <T> T newInstance(ClassLoaders loaders,
+ SPInterface<T> spi,
PropertiesHolder properties,
- DefaultClassHolder defaultImpl)
+ DefaultClassHolder<T> defaultImpl)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -551,10 +547,10 @@ public class DiscoverClass {
* @exception DiscoveryException Thrown if the name of a class implementing
* the SPI cannot be found.
*/
- public static String[] discoverClassNames(SPInterface spi,
+ public static <T> String[] discoverClassNames(SPInterface<T> spi,
Properties properties)
{
- Vector names = new Vector();
+ List<String> names = new LinkedList<String>();
String spiName = spi.getSPName();
String propertyName = spi.getPropertyName();
@@ -563,28 +559,28 @@ public class DiscoverClass {
// Try the (managed) system property spiName
String className = getManagedProperty(spiName);
- if (className != null) names.addElement(className);
+ if (className != null) names.add(className);
if (includeAltProperty) {
// Try the (managed) system property propertyName
className = getManagedProperty(propertyName);
- if (className != null) names.addElement(className);
+ if (className != null) names.add(className);
}
if (properties != null) {
// Try the properties parameter spiName
className = properties.getProperty(spiName);
- if (className != null) names.addElement(className);
+ if (className != null) names.add(className);
if (includeAltProperty) {
// Try the properties parameter propertyName
className = properties.getProperty(propertyName);
- if (className != null) names.addElement(className);
+ if (className != null) names.add(className);
}
}
String[] results = new String[names.size()];
- names.copyInto(results);
+ names.toArray(results);
return results;
}
Modified: commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverSingleton.java
URL: http://svn.apache.org/viewvc/commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverSingleton.java?rev=1088081&r1=1088080&r2=1088081&view=diff
==============================================================================
--- commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverSingleton.java (original)
+++ commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/DiscoverSingleton.java Sat Apr 2 18:46:43 2011
@@ -17,6 +17,7 @@
package org.apache.commons.discovery.tools;
import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import org.apache.commons.discovery.DiscoveryException;
@@ -221,13 +222,13 @@ public class DiscoverSingleton {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object find(Class spiClass)
+ public static <T> T find(Class<T> spiClass)
throws DiscoveryException
{
return find(null,
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
DiscoverClass.nullProperties,
- DiscoverClass.nullDefaultImpl);
+ (DefaultClassHolder<T>) null);
}
/**
@@ -246,13 +247,13 @@ public class DiscoverSingleton {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object find(Class spiClass, Properties properties)
+ public static <T> T find(Class<T> spiClass, Properties properties)
throws DiscoveryException
{
return find(null,
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(properties),
- DiscoverClass.nullDefaultImpl);
+ (DefaultClassHolder<T>) null);
}
/**
@@ -269,13 +270,13 @@ public class DiscoverSingleton {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object find(Class spiClass, String defaultImpl)
+ public static <T> T find(Class<T> spiClass, String defaultImpl)
throws DiscoveryException
{
return find(null,
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
DiscoverClass.nullProperties,
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -296,15 +297,15 @@ public class DiscoverSingleton {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object find(Class spiClass,
+ public static <T> T find(Class<T> spiClass,
Properties properties,
String defaultImpl)
throws DiscoveryException
{
return find(null,
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(properties),
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/**
@@ -325,15 +326,15 @@ public class DiscoverSingleton {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object find(Class spiClass,
+ public static <T> T find(Class<T> spiClass,
String propertiesFileName,
String defaultImpl)
throws DiscoveryException
{
return find(null,
- new SPInterface(spiClass),
+ new SPInterface<T>(spiClass),
new PropertiesHolder(propertiesFileName),
- new DefaultClassHolder(defaultImpl));
+ new DefaultClassHolder<T>(defaultImpl));
}
/*************** FINDERS FOR USE IN FACTORY/HELPER METHODS ***************
@@ -358,15 +359,15 @@ public class DiscoverSingleton {
* instantiated, or if the resulting class does not implement
* (or extend) the SPI.
*/
- public static Object find(ClassLoaders loaders,
- SPInterface spi,
+ public static <T> T find(ClassLoaders loaders,
+ SPInterface<T> spi,
PropertiesHolder properties,
- DefaultClassHolder defaultImpl)
+ DefaultClassHolder<T> defaultImpl)
throws DiscoveryException
{
ClassLoader contextLoader = JDKHooks.getJDKHooks().getThreadContextClassLoader();
- Object obj = get(contextLoader, spi.getSPName());
+ T obj = get(contextLoader, spi.getSPName());
if (obj == null) {
try {
@@ -408,8 +409,8 @@ public class DiscoverSingleton {
* If the SPI instance implements <code>Service</code>, then call
* <code>release()</code>.
*/
- public static synchronized void release(Class spiClass) {
- HashMap spis = (HashMap)EnvironmentCache.get(JDKHooks.getJDKHooks().getThreadContextClassLoader());
+ public static synchronized void release(Class<?> spiClass) {
+ Map<String, Object> spis = EnvironmentCache.get(JDKHooks.getJDKHooks().getThreadContextClassLoader());
if (spis != null) {
spis.remove(spiClass.getName());
@@ -454,14 +455,17 @@ public class DiscoverSingleton {
/**
* Get service keyed by spi & classLoader.
*/
- private static synchronized Object get(ClassLoader classLoader,
+ private static synchronized <T> T get(ClassLoader classLoader,
String spiName)
{
- HashMap spis = (HashMap)EnvironmentCache.get(classLoader);
+ Map<String, Object> spis = EnvironmentCache.get(classLoader);
- return (spis != null)
- ? spis.get(spiName)
- : null;
+ if (spis != null) {
+ @SuppressWarnings("unchecked") // spiName is assignable from stored object class
+ T t = (T) spis.get(spiName);
+ return t;
+ }
+ return null;
}
/**
@@ -473,10 +477,10 @@ public class DiscoverSingleton {
{
if (service != null)
{
- HashMap spis = (HashMap)EnvironmentCache.get(classLoader);
+ Map<String, Object> spis = EnvironmentCache.get(classLoader);
if (spis == null) {
- spis = new HashMap(EnvironmentCache.smallHashSize);
+ spis = new HashMap<String, Object>(EnvironmentCache.smallHashSize);
EnvironmentCache.put(classLoader, spis);
}
Modified: commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/SPInterface.java
URL: http://svn.apache.org/viewvc/commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/SPInterface.java?rev=1088081&r1=1088080&r2=1088081&view=diff
==============================================================================
--- commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/SPInterface.java (original)
+++ commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/SPInterface.java Sat Apr 2 18:46:43 2011
@@ -34,13 +34,13 @@ import org.apache.commons.discovery.Disc
*
* @author Richard A. Sitze
*/
-public class SPInterface {
+public class SPInterface<T> {
/**
* The service programming interface: intended to be
* an interface or abstract class, but not limited
* to those two.
*/
- private final Class spi;
+ private final Class<T> spi;
/**
* The property name to be used for finding the name of
@@ -49,7 +49,7 @@ public class SPInterface {
private final String propertyName;
- private Class paramClasses[] = null;
+ private Class<?> paramClasses[] = null;
private Object params[] = null;
@@ -58,7 +58,7 @@ public class SPInterface {
*
* @param provider The SPI class
*/
- public SPInterface(Class provider) {
+ public SPInterface(Class<T> provider) {
this(provider, provider.getName());
}
@@ -72,7 +72,7 @@ public class SPInterface {
* (system or other) properties having either the name of the class
* (provider) or the <code>propertyName</code>.
*/
- public SPInterface(Class spi, String propertyName) {
+ public SPInterface(Class<T> spi, String propertyName) {
this.spi = spi;
this.propertyName = propertyName;
}
@@ -88,8 +88,8 @@ public class SPInterface {
* @param constructorParams objects representing the
* constructor arguments.
*/
- public SPInterface(Class provider,
- Class constructorParamClasses[],
+ public SPInterface(Class<T> provider,
+ Class<?> constructorParamClasses[],
Object constructorParams[])
{
this(provider,
@@ -114,9 +114,9 @@ public class SPInterface {
* @param constructorParams objects representing the
* constructor arguments.
*/
- public SPInterface(Class spi,
+ public SPInterface(Class<T> spi,
String propertyName,
- Class constructorParamClasses[],
+ Class<?> constructorParamClasses[],
Object constructorParams[])
{
this.spi = spi;
@@ -129,7 +129,7 @@ public class SPInterface {
return spi.getName();
}
- public Class getSPClass() {
+ public Class<T> getSPClass() {
return spi;
}
@@ -140,7 +140,7 @@ public class SPInterface {
/**
* Instantiate a new
*/
- public Object newInstance(Class impl)
+ public <S extends T> S newInstance(Class<S> impl)
throws DiscoveryException,
InstantiationException,
IllegalAccessException,
@@ -152,7 +152,7 @@ public class SPInterface {
return ClassUtils.newInstance(impl, paramClasses, params);
}
- public void verifyAncestory(Class impl) {
+ public <S extends T> void verifyAncestory(Class<S> impl) {
ClassUtils.verifyAncestory(spi, impl);
}
}
Modified: commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/Service.java
URL: http://svn.apache.org/viewvc/commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/Service.java?rev=1088081&r1=1088080&r2=1088081&view=diff
==============================================================================
--- commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/Service.java (original)
+++ commons/proper/discovery/trunk/src/java/org/apache/commons/discovery/tools/Service.java Sat Apr 2 18:46:43 2011
@@ -63,8 +63,8 @@ public class Service
*
* @return Enumeration of class instances (<code>Object</code>)
*/
- public static Enumeration providers(Class spiClass) {
- return providers(new SPInterface(spiClass), null);
+ public static <T, S extends T> Enumeration<S> providers(Class<T> spiClass) {
+ return providers(new SPInterface<T>(spiClass), null);
}
/**
@@ -74,7 +74,7 @@ public class Service
* @param loaders loaders to use in search.
* If <code>null</code> then use ClassLoaders.getAppLoaders().
*/
- public static Enumeration providers(final SPInterface spi,
+ public static <T, S extends T> Enumeration<S> providers(final SPInterface<T> spi,
ClassLoaders loaders)
{
if (loaders == null) {
@@ -86,11 +86,11 @@ public class Service
ResourceNameIterator servicesIter =
(new DiscoverServiceNames(loaders)).findResourceNames(spi.getSPName());
- final ResourceClassIterator services =
- (new DiscoverClasses(loaders)).findResourceClasses(servicesIter);
+ final ResourceClassIterator<T> services =
+ (new DiscoverClasses<T>(loaders)).findResourceClasses(servicesIter);
- return new Enumeration() {
- private Object object = null;
+ return new Enumeration<S>() {
+ private S object = null;
public boolean hasMoreElements() {
if (object == null) {
@@ -99,15 +99,15 @@ public class Service
return object != null;
}
- public Object nextElement() {
- Object obj = object;
+ public S nextElement() {
+ S obj = object;
object = null;
return obj;
}
- private Object getNextClassInstance() {
+ private S getNextClassInstance() {
while (services.hasNext()) {
- ResourceClass info = services.nextResourceClass();
+ ResourceClass<S> info = services.nextResourceClass();
try {
return spi.newInstance(info.loadClass());
} catch (Exception e) {