8035487: Fix raw and unchecked lint warnings in javax.imageio.spi
Reviewed-by: darcy, prr
This commit is contained in:
parent
9f5fc4e859
commit
0da32293b5
@ -291,7 +291,7 @@ public abstract class ImageReader {
|
||||
if (input != null) {
|
||||
boolean found = false;
|
||||
if (originatingProvider != null) {
|
||||
Class[] classes = originatingProvider.getInputTypes();
|
||||
Class<?>[] classes = originatingProvider.getInputTypes();
|
||||
for (int i = 0; i < classes.length; i++) {
|
||||
if (classes[i].isInstance(input)) {
|
||||
found = true;
|
||||
|
@ -205,7 +205,7 @@ public abstract class ImageWriter implements ImageTranscoder {
|
||||
if (output != null) {
|
||||
ImageWriterSpi provider = getOriginatingProvider();
|
||||
if (provider != null) {
|
||||
Class[] classes = provider.getOutputTypes();
|
||||
Class<?>[] classes = provider.getOutputTypes();
|
||||
boolean found = false;
|
||||
for (int i = 0; i < classes.length; i++) {
|
||||
if (classes[i].isInstance(output)) {
|
||||
|
@ -39,17 +39,17 @@ import java.util.Set;
|
||||
* the current node) may be queried.
|
||||
*
|
||||
*/
|
||||
class DigraphNode implements Cloneable, Serializable {
|
||||
class DigraphNode<E> implements Cloneable, Serializable {
|
||||
private static final long serialVersionUID = 5308261378582246841L;
|
||||
|
||||
/** The data associated with this node. */
|
||||
protected Object data;
|
||||
protected E data;
|
||||
|
||||
/**
|
||||
* A <code>Set</code> of neighboring nodes pointed to by this
|
||||
* node.
|
||||
*/
|
||||
protected Set outNodes = new HashSet();
|
||||
protected Set<DigraphNode<E>> outNodes = new HashSet<>();
|
||||
|
||||
/** The in-degree of the node. */
|
||||
protected int inDegree = 0;
|
||||
@ -58,14 +58,14 @@ class DigraphNode implements Cloneable, Serializable {
|
||||
* A <code>Set</code> of neighboring nodes that point to this
|
||||
* node.
|
||||
*/
|
||||
private Set inNodes = new HashSet();
|
||||
private Set<DigraphNode<E>> inNodes = new HashSet<>();
|
||||
|
||||
public DigraphNode(Object data) {
|
||||
public DigraphNode(E data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/** Returns the <code>Object</code> referenced by this node. */
|
||||
public Object getData() {
|
||||
public E getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ class DigraphNode implements Cloneable, Serializable {
|
||||
* Returns an <code>Iterator</code> containing the nodes pointed
|
||||
* to by this node.
|
||||
*/
|
||||
public Iterator getOutNodes() {
|
||||
public Iterator<DigraphNode<E>> getOutNodes() {
|
||||
return outNodes.iterator();
|
||||
}
|
||||
|
||||
@ -86,7 +86,7 @@ class DigraphNode implements Cloneable, Serializable {
|
||||
* @return <code>true</code> if the node was not previously the
|
||||
* target of an edge.
|
||||
*/
|
||||
public boolean addEdge(DigraphNode node) {
|
||||
public boolean addEdge(DigraphNode<E> node) {
|
||||
if (outNodes.contains(node)) {
|
||||
return false;
|
||||
}
|
||||
@ -105,7 +105,7 @@ class DigraphNode implements Cloneable, Serializable {
|
||||
*
|
||||
* @return <code>true</code> if the node is the target of an edge.
|
||||
*/
|
||||
public boolean hasEdge(DigraphNode node) {
|
||||
public boolean hasEdge(DigraphNode<E> node) {
|
||||
return outNodes.contains(node);
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ class DigraphNode implements Cloneable, Serializable {
|
||||
* @return <code>true</code> if the node was previously the target
|
||||
* of an edge.
|
||||
*/
|
||||
public boolean removeEdge(DigraphNode node) {
|
||||
public boolean removeEdge(DigraphNode<E> node) {
|
||||
if (!outNodes.contains(node)) {
|
||||
return false;
|
||||
}
|
||||
@ -132,15 +132,17 @@ class DigraphNode implements Cloneable, Serializable {
|
||||
* appropriately.
|
||||
*/
|
||||
public void dispose() {
|
||||
Object[] inNodesArray = inNodes.toArray();
|
||||
@SuppressWarnings("unchecked")
|
||||
DigraphNode<E>[] inNodesArray = (DigraphNode<E>[])inNodes.toArray();
|
||||
for(int i=0; i<inNodesArray.length; i++) {
|
||||
DigraphNode node = (DigraphNode) inNodesArray[i];
|
||||
DigraphNode<E> node = inNodesArray[i];
|
||||
node.removeEdge(this);
|
||||
}
|
||||
|
||||
Object[] outNodesArray = outNodes.toArray();
|
||||
@SuppressWarnings("unchecked")
|
||||
DigraphNode<E>[] outNodesArray = (DigraphNode<E>[])outNodes.toArray();
|
||||
for(int i=0; i<outNodesArray.length; i++) {
|
||||
DigraphNode node = (DigraphNode) outNodesArray[i];
|
||||
DigraphNode<E> node = outNodesArray[i];
|
||||
removeEdge(node);
|
||||
}
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ public final class IIORegistry extends ServiceRegistry {
|
||||
* A <code>Vector</code> containing the valid IIO registry
|
||||
* categories (superinterfaces) to be used in the constructor.
|
||||
*/
|
||||
private static final Vector initialCategories = new Vector(5);
|
||||
private static final Vector<Class<?>> initialCategories = new Vector<>(5);
|
||||
|
||||
static {
|
||||
initialCategories.add(ImageReaderSpi.class);
|
||||
@ -198,9 +198,10 @@ public final class IIORegistry extends ServiceRegistry {
|
||||
|
||||
ClassLoader loader = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
Iterator categories = getCategories();
|
||||
Iterator<Class<?>> categories = getCategories();
|
||||
while (categories.hasNext()) {
|
||||
Class<IIOServiceProvider> c = (Class)categories.next();
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<IIOServiceProvider> c = (Class<IIOServiceProvider>)categories.next();
|
||||
Iterator<IIOServiceProvider> riter =
|
||||
ServiceLoader.load(c, loader).iterator();
|
||||
while (riter.hasNext()) {
|
||||
@ -234,12 +235,13 @@ public final class IIORegistry extends ServiceRegistry {
|
||||
file read capability is restricted (like the
|
||||
applet context case).
|
||||
*/
|
||||
PrivilegedAction doRegistration =
|
||||
new PrivilegedAction() {
|
||||
PrivilegedAction<Object> doRegistration =
|
||||
new PrivilegedAction<Object>() {
|
||||
public Object run() {
|
||||
Iterator categories = getCategories();
|
||||
Iterator<Class<?>> categories = getCategories();
|
||||
while (categories.hasNext()) {
|
||||
Class<IIOServiceProvider> c = (Class)categories.next();
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<IIOServiceProvider> c = (Class<IIOServiceProvider>)categories.next();
|
||||
for (IIOServiceProvider p : ServiceLoader.loadInstalled(c)) {
|
||||
registerServiceProvider(p);
|
||||
}
|
||||
|
@ -81,14 +81,14 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
|
||||
* the equivalent array <code>{ ImageInputStream.class }</code>.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final Class[] STANDARD_INPUT_TYPE =
|
||||
public static final Class<?>[] STANDARD_INPUT_TYPE =
|
||||
{ ImageInputStream.class };
|
||||
|
||||
/**
|
||||
* An array of <code>Class</code> objects to be returned from
|
||||
* <code>getInputTypes</code>, initially <code>null</code>.
|
||||
*/
|
||||
protected Class[] inputTypes = null;
|
||||
protected Class<?>[] inputTypes = null;
|
||||
|
||||
/**
|
||||
* An array of strings to be returned from
|
||||
@ -101,7 +101,7 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
|
||||
* The <code>Class</code> of the reader, initially
|
||||
* <code>null</code>.
|
||||
*/
|
||||
private Class readerClass = null;
|
||||
private Class<?> readerClass = null;
|
||||
|
||||
/**
|
||||
* Constructs a blank <code>ImageReaderSpi</code>. It is up to
|
||||
@ -197,7 +197,7 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
|
||||
String[] suffixes,
|
||||
String[] MIMETypes,
|
||||
String readerClassName,
|
||||
Class[] inputTypes,
|
||||
Class<?>[] inputTypes,
|
||||
String[] writerSpiNames,
|
||||
boolean supportsStandardStreamMetadataFormat,
|
||||
String nativeStreamMetadataFormatName,
|
||||
@ -252,9 +252,9 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
|
||||
* returned.
|
||||
*
|
||||
* @return a non-<code>null</code> array of
|
||||
* <code>Class</code>objects of length at least 1.
|
||||
* <code>Class</code> objects of length at least 1.
|
||||
*/
|
||||
public Class[] getInputTypes() {
|
||||
public Class<?>[] getInputTypes() {
|
||||
return inputTypes.clone();
|
||||
}
|
||||
|
||||
|
@ -587,7 +587,7 @@ public abstract class ImageReaderWriterSpi extends IIOServiceProvider {
|
||||
throw new IllegalArgumentException("Unsupported format name");
|
||||
}
|
||||
try {
|
||||
Class cls = Class.forName(formatClassName, true,
|
||||
Class<?> cls = Class.forName(formatClassName, true,
|
||||
ClassLoader.getSystemClassLoader());
|
||||
Method meth = cls.getMethod("getInstance");
|
||||
return (IIOMetadataFormat) meth.invoke(null);
|
||||
|
@ -83,14 +83,14 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi {
|
||||
* the equivalent array <code>{ ImageOutputStream.class }</code>.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final Class[] STANDARD_OUTPUT_TYPE =
|
||||
public static final Class<?>[] STANDARD_OUTPUT_TYPE =
|
||||
{ ImageOutputStream.class };
|
||||
|
||||
/**
|
||||
* An array of <code>Class</code> objects to be returned from
|
||||
* <code>getOutputTypes</code>, initially <code>null</code>.
|
||||
*/
|
||||
protected Class[] outputTypes = null;
|
||||
protected Class<?>[] outputTypes = null;
|
||||
|
||||
/**
|
||||
* An array of strings to be returned from
|
||||
@ -103,7 +103,7 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi {
|
||||
* The <code>Class</code> of the writer, initially
|
||||
* <code>null</code>.
|
||||
*/
|
||||
private Class writerClass = null;
|
||||
private Class<?> writerClass = null;
|
||||
|
||||
/**
|
||||
* Constructs a blank <code>ImageWriterSpi</code>. It is up to
|
||||
@ -198,7 +198,7 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi {
|
||||
String[] suffixes,
|
||||
String[] MIMETypes,
|
||||
String writerClassName,
|
||||
Class[] outputTypes,
|
||||
Class<?>[] outputTypes,
|
||||
String[] readerSpiNames,
|
||||
boolean supportsStandardStreamMetadataFormat,
|
||||
String nativeStreamMetadataFormatName,
|
||||
@ -265,9 +265,9 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi {
|
||||
* returned.
|
||||
*
|
||||
* @return a non-<code>null</code> array of
|
||||
* <code>Class</code>objects of length at least 1.
|
||||
* <code>Class</code> objects of length at least 1.
|
||||
*/
|
||||
public Class[] getOutputTypes() {
|
||||
public Class<?>[] getOutputTypes() {
|
||||
return outputTypes.clone();
|
||||
}
|
||||
|
||||
|
@ -51,17 +51,17 @@ import java.util.Set;
|
||||
* supplied by a trusted vendor over those supplied by another.
|
||||
*
|
||||
*/
|
||||
class PartiallyOrderedSet extends AbstractSet {
|
||||
class PartiallyOrderedSet<E> extends AbstractSet<E> {
|
||||
|
||||
// The topological sort (roughly) follows the algorithm described in
|
||||
// Horowitz and Sahni, _Fundamentals of Data Structures_ (1976),
|
||||
// p. 315.
|
||||
|
||||
// Maps Objects to DigraphNodes that contain them
|
||||
private Map poNodes = new HashMap();
|
||||
private Map<E, DigraphNode<E>> poNodes = new HashMap<>();
|
||||
|
||||
// The set of Objects
|
||||
private Set nodes = poNodes.keySet();
|
||||
private Set<E> nodes = poNodes.keySet();
|
||||
|
||||
/**
|
||||
* Constructs a <code>PartiallyOrderedSet</code>.
|
||||
@ -81,20 +81,20 @@ class PartiallyOrderedSet extends AbstractSet {
|
||||
* collection, with an ordering that respects the orderings set
|
||||
* by the <code>setOrdering</code> method.
|
||||
*/
|
||||
public Iterator iterator() {
|
||||
return new PartialOrderIterator(poNodes.values().iterator());
|
||||
public Iterator<E> iterator() {
|
||||
return new PartialOrderIterator<>(poNodes.values().iterator());
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an <code>Object</code> to this
|
||||
* <code>PartiallyOrderedSet</code>.
|
||||
*/
|
||||
public boolean add(Object o) {
|
||||
public boolean add(E o) {
|
||||
if (nodes.contains(o)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
DigraphNode node = new DigraphNode(o);
|
||||
DigraphNode<E> node = new DigraphNode<>(o);
|
||||
poNodes.put(o, node);
|
||||
return true;
|
||||
}
|
||||
@ -104,7 +104,7 @@ class PartiallyOrderedSet extends AbstractSet {
|
||||
* <code>PartiallyOrderedSet</code>.
|
||||
*/
|
||||
public boolean remove(Object o) {
|
||||
DigraphNode node = (DigraphNode)poNodes.get(o);
|
||||
DigraphNode<E> node = poNodes.get(o);
|
||||
if (node == null) {
|
||||
return false;
|
||||
}
|
||||
@ -127,11 +127,9 @@ class PartiallyOrderedSet extends AbstractSet {
|
||||
* @return <code>true</code> if no prior ordering existed
|
||||
* between the nodes, <code>false</code>otherwise.
|
||||
*/
|
||||
public boolean setOrdering(Object first, Object second) {
|
||||
DigraphNode firstPONode =
|
||||
(DigraphNode)poNodes.get(first);
|
||||
DigraphNode secondPONode =
|
||||
(DigraphNode)poNodes.get(second);
|
||||
public boolean setOrdering(E first, E second) {
|
||||
DigraphNode<E> firstPONode = poNodes.get(first);
|
||||
DigraphNode<E> secondPONode = poNodes.get(second);
|
||||
|
||||
secondPONode.removeEdge(firstPONode);
|
||||
return firstPONode.addEdge(secondPONode);
|
||||
@ -142,11 +140,9 @@ class PartiallyOrderedSet extends AbstractSet {
|
||||
*
|
||||
* @return true if a prior prefence existed between the nodes.
|
||||
*/
|
||||
public boolean unsetOrdering(Object first, Object second) {
|
||||
DigraphNode firstPONode =
|
||||
(DigraphNode)poNodes.get(first);
|
||||
DigraphNode secondPONode =
|
||||
(DigraphNode)poNodes.get(second);
|
||||
public boolean unsetOrdering(E first, E second) {
|
||||
DigraphNode<E> firstPONode = poNodes.get(first);
|
||||
DigraphNode<E> secondPONode = poNodes.get(second);
|
||||
|
||||
return firstPONode.removeEdge(secondPONode) ||
|
||||
secondPONode.removeEdge(firstPONode);
|
||||
@ -156,25 +152,23 @@ class PartiallyOrderedSet extends AbstractSet {
|
||||
* Returns <code>true</code> if an ordering exists between two
|
||||
* nodes.
|
||||
*/
|
||||
public boolean hasOrdering(Object preferred, Object other) {
|
||||
DigraphNode preferredPONode =
|
||||
(DigraphNode)poNodes.get(preferred);
|
||||
DigraphNode otherPONode =
|
||||
(DigraphNode)poNodes.get(other);
|
||||
public boolean hasOrdering(E preferred, E other) {
|
||||
DigraphNode<E> preferredPONode = poNodes.get(preferred);
|
||||
DigraphNode<E> otherPONode = poNodes.get(other);
|
||||
|
||||
return preferredPONode.hasEdge(otherPONode);
|
||||
}
|
||||
}
|
||||
|
||||
class PartialOrderIterator implements Iterator {
|
||||
class PartialOrderIterator<E> implements Iterator<E> {
|
||||
|
||||
LinkedList zeroList = new LinkedList();
|
||||
Map inDegrees = new HashMap(); // DigraphNode -> Integer
|
||||
LinkedList<DigraphNode<E>> zeroList = new LinkedList<>();
|
||||
Map<DigraphNode<E>, Integer> inDegrees = new HashMap<>();
|
||||
|
||||
public PartialOrderIterator(Iterator iter) {
|
||||
public PartialOrderIterator(Iterator<DigraphNode<E>> iter) {
|
||||
// Initialize scratch in-degree values, zero list
|
||||
while (iter.hasNext()) {
|
||||
DigraphNode node = (DigraphNode)iter.next();
|
||||
DigraphNode<E> node = iter.next();
|
||||
int inDegree = node.getInDegree();
|
||||
inDegrees.put(node, new Integer(inDegree));
|
||||
|
||||
@ -189,14 +183,14 @@ class PartialOrderIterator implements Iterator {
|
||||
return !zeroList.isEmpty();
|
||||
}
|
||||
|
||||
public Object next() {
|
||||
DigraphNode first = (DigraphNode)zeroList.removeFirst();
|
||||
public E next() {
|
||||
DigraphNode<E> first = zeroList.removeFirst();
|
||||
|
||||
// For each out node of the output node, decrement its in-degree
|
||||
Iterator outNodes = first.getOutNodes();
|
||||
Iterator<DigraphNode<E>> outNodes = first.getOutNodes();
|
||||
while (outNodes.hasNext()) {
|
||||
DigraphNode node = (DigraphNode)outNodes.next();
|
||||
int inDegree = ((Integer)inDegrees.get(node)).intValue() - 1;
|
||||
DigraphNode<E> node = outNodes.next();
|
||||
int inDegree = inDegrees.get(node).intValue() - 1;
|
||||
inDegrees.put(node, new Integer(inDegree));
|
||||
|
||||
// If the in-degree has fallen to 0, place the node on the list
|
||||
|
@ -99,7 +99,7 @@ import java.util.ServiceLoader;
|
||||
public class ServiceRegistry {
|
||||
|
||||
// Class -> Registry
|
||||
private Map categoryMap = new HashMap();
|
||||
private Map<Class<?>, SubRegistry> categoryMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Constructs a <code>ServiceRegistry</code> instance with a
|
||||
@ -117,7 +117,7 @@ public class ServiceRegistry {
|
||||
throw new IllegalArgumentException("categories == null!");
|
||||
}
|
||||
while (categories.hasNext()) {
|
||||
Class category = (Class)categories.next();
|
||||
Class<?> category = categories.next();
|
||||
SubRegistry reg = new SubRegistry(this, category);
|
||||
categoryMap.put(category, reg);
|
||||
}
|
||||
@ -208,7 +208,7 @@ public class ServiceRegistry {
|
||||
* <code>Class</code>objects.
|
||||
*/
|
||||
public Iterator<Class<?>> getCategories() {
|
||||
Set keySet = categoryMap.keySet();
|
||||
Set<Class<?>> keySet = categoryMap.keySet();
|
||||
return keySet.iterator();
|
||||
}
|
||||
|
||||
@ -216,13 +216,13 @@ public class ServiceRegistry {
|
||||
* Returns an Iterator containing the subregistries to which the
|
||||
* provider belongs.
|
||||
*/
|
||||
private Iterator getSubRegistries(Object provider) {
|
||||
List l = new ArrayList();
|
||||
Iterator iter = categoryMap.keySet().iterator();
|
||||
private Iterator<SubRegistry> getSubRegistries(Object provider) {
|
||||
List<SubRegistry> l = new ArrayList<>();
|
||||
Iterator<Class<?>> iter = categoryMap.keySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
Class c = (Class)iter.next();
|
||||
Class<?> c = iter.next();
|
||||
if (c.isAssignableFrom(provider.getClass())) {
|
||||
l.add((SubRegistry)categoryMap.get(c));
|
||||
l.add(categoryMap.get(c));
|
||||
}
|
||||
}
|
||||
return l.iterator();
|
||||
@ -259,7 +259,7 @@ public class ServiceRegistry {
|
||||
if (provider == null) {
|
||||
throw new IllegalArgumentException("provider == null!");
|
||||
}
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
@ -292,9 +292,9 @@ public class ServiceRegistry {
|
||||
if (provider == null) {
|
||||
throw new IllegalArgumentException("provider == null!");
|
||||
}
|
||||
Iterator regs = getSubRegistries(provider);
|
||||
Iterator<SubRegistry> regs = getSubRegistries(provider);
|
||||
while (regs.hasNext()) {
|
||||
SubRegistry reg = (SubRegistry)regs.next();
|
||||
SubRegistry reg = regs.next();
|
||||
reg.registerServiceProvider(provider);
|
||||
}
|
||||
}
|
||||
@ -362,7 +362,7 @@ public class ServiceRegistry {
|
||||
if (provider == null) {
|
||||
throw new IllegalArgumentException("provider == null!");
|
||||
}
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
@ -385,9 +385,9 @@ public class ServiceRegistry {
|
||||
if (provider == null) {
|
||||
throw new IllegalArgumentException("provider == null!");
|
||||
}
|
||||
Iterator regs = getSubRegistries(provider);
|
||||
Iterator<SubRegistry> regs = getSubRegistries(provider);
|
||||
while (regs.hasNext()) {
|
||||
SubRegistry reg = (SubRegistry)regs.next();
|
||||
SubRegistry reg = regs.next();
|
||||
reg.deregisterServiceProvider(provider);
|
||||
}
|
||||
}
|
||||
@ -408,9 +408,9 @@ public class ServiceRegistry {
|
||||
if (provider == null) {
|
||||
throw new IllegalArgumentException("provider == null!");
|
||||
}
|
||||
Iterator regs = getSubRegistries(provider);
|
||||
Iterator<SubRegistry> regs = getSubRegistries(provider);
|
||||
while (regs.hasNext()) {
|
||||
SubRegistry reg = (SubRegistry)regs.next();
|
||||
SubRegistry reg = regs.next();
|
||||
if (reg.contains(provider)) {
|
||||
return true;
|
||||
}
|
||||
@ -442,11 +442,13 @@ public class ServiceRegistry {
|
||||
*/
|
||||
public <T> Iterator<T> getServiceProviders(Class<T> category,
|
||||
boolean useOrdering) {
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
return reg.getServiceProviders(useOrdering);
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<T> it = (Iterator<T>)reg.getServiceProviders(useOrdering);
|
||||
return it;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -499,12 +501,12 @@ public class ServiceRegistry {
|
||||
public <T> Iterator<T> getServiceProviders(Class<T> category,
|
||||
Filter filter,
|
||||
boolean useOrdering) {
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
Iterator iter = getServiceProviders(category, useOrdering);
|
||||
return new FilterIterator(iter, filter);
|
||||
Iterator<T> iter = getServiceProviders(category, useOrdering);
|
||||
return new FilterIterator<>(iter, filter);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -529,11 +531,11 @@ public class ServiceRegistry {
|
||||
if (providerClass == null) {
|
||||
throw new IllegalArgumentException("providerClass == null!");
|
||||
}
|
||||
Iterator iter = categoryMap.keySet().iterator();
|
||||
Iterator<Class<?>> iter = categoryMap.keySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
Class c = (Class)iter.next();
|
||||
Class<?> c = iter.next();
|
||||
if (c.isAssignableFrom(providerClass)) {
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(c);
|
||||
SubRegistry reg = categoryMap.get(c);
|
||||
T provider = reg.getServiceProviderByClass(providerClass);
|
||||
if (provider != null) {
|
||||
return provider;
|
||||
@ -580,7 +582,7 @@ public class ServiceRegistry {
|
||||
if (firstProvider == secondProvider) {
|
||||
throw new IllegalArgumentException("providers are the same!");
|
||||
}
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
@ -626,7 +628,7 @@ public class ServiceRegistry {
|
||||
if (firstProvider == secondProvider) {
|
||||
throw new IllegalArgumentException("providers are the same!");
|
||||
}
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
@ -647,7 +649,7 @@ public class ServiceRegistry {
|
||||
* corresponding to <code>category</code>.
|
||||
*/
|
||||
public void deregisterAll(Class<?> category) {
|
||||
SubRegistry reg = (SubRegistry)categoryMap.get(category);
|
||||
SubRegistry reg = categoryMap.get(category);
|
||||
if (reg == null) {
|
||||
throw new IllegalArgumentException("category unknown!");
|
||||
}
|
||||
@ -659,9 +661,9 @@ public class ServiceRegistry {
|
||||
* categories.
|
||||
*/
|
||||
public void deregisterAll() {
|
||||
Iterator iter = categoryMap.values().iterator();
|
||||
Iterator<SubRegistry> iter = categoryMap.values().iterator();
|
||||
while (iter.hasNext()) {
|
||||
SubRegistry reg = (SubRegistry)iter.next();
|
||||
SubRegistry reg = iter.next();
|
||||
reg.clear();
|
||||
}
|
||||
}
|
||||
@ -690,15 +692,17 @@ class SubRegistry {
|
||||
|
||||
ServiceRegistry registry;
|
||||
|
||||
Class category;
|
||||
Class<?> category;
|
||||
|
||||
// Provider Objects organized by partial oridering
|
||||
PartiallyOrderedSet poset = new PartiallyOrderedSet();
|
||||
PartiallyOrderedSet<Object> poset = new PartiallyOrderedSet<>();
|
||||
|
||||
// Class -> Provider Object of that class
|
||||
Map<Class<?>,Object> map = new HashMap();
|
||||
// No way to express heterogeneous map, we want
|
||||
// Map<Class<T>, T>, where T is ?
|
||||
Map<Class<?>, Object> map = new HashMap<>();
|
||||
|
||||
public SubRegistry(ServiceRegistry registry, Class category) {
|
||||
public SubRegistry(ServiceRegistry registry, Class<?> category) {
|
||||
this.registry = registry;
|
||||
this.category = category;
|
||||
}
|
||||
@ -756,7 +760,7 @@ class SubRegistry {
|
||||
return poset.unsetOrdering(firstProvider, secondProvider);
|
||||
}
|
||||
|
||||
public Iterator getServiceProviders(boolean useOrdering) {
|
||||
public Iterator<Object> getServiceProviders(boolean useOrdering) {
|
||||
if (useOrdering) {
|
||||
return poset.iterator();
|
||||
} else {
|
||||
@ -764,12 +768,13 @@ class SubRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getServiceProviderByClass(Class<T> providerClass) {
|
||||
return (T)map.get(providerClass);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
Iterator iter = map.values().iterator();
|
||||
Iterator<Object> iter = map.values().iterator();
|
||||
while (iter.hasNext()) {
|
||||
Object provider = iter.next();
|
||||
iter.remove();
|
||||
@ -794,12 +799,12 @@ class SubRegistry {
|
||||
*/
|
||||
class FilterIterator<T> implements Iterator<T> {
|
||||
|
||||
private Iterator<T> iter;
|
||||
private Iterator<? extends T> iter;
|
||||
private ServiceRegistry.Filter filter;
|
||||
|
||||
private T next = null;
|
||||
|
||||
public FilterIterator(Iterator<T> iter,
|
||||
public FilterIterator(Iterator<? extends T> iter,
|
||||
ServiceRegistry.Filter filter) {
|
||||
this.iter = iter;
|
||||
this.filter = filter;
|
||||
|
Loading…
Reference in New Issue
Block a user