Start conversion to generics, please review and give feedback
git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/trunk/pool@1851054 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b6d4c63..ad37d4e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,7 +24,12 @@
</properties>
<body>
- <release version="1.0.5" date="in SVN">
+ <release version="1.0.6" date="in SVN">
+ <action dev="painter" type="update">
+ Move to generics
+ </action>
+ </release>
+ <release version="1.0.5" date="2019-01-11">
<action dev="painter" type="update">
Update test to use junit 5
</action>
diff --git a/src/java/org/apache/fulcrum/pool/BoundedBuffer.java b/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
index 56bfbed..d75a268 100644
--- a/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
@@ -133,12 +133,13 @@
*
* @return the oldest item from the buffer, or null if the buffer is empty.
*/
- public synchronized Object poll()
+ public synchronized <T> T poll()
{
if (usedSlots_ > 0)
{
--usedSlots_;
- Object old = array_[takePtr_];
+ @SuppressWarnings("unchecked")
+ T old = (T) array_[takePtr_];
array_[takePtr_] = null;
if (++takePtr_ >= array_.length)
takePtr_ = 0;
diff --git a/src/java/org/apache/fulcrum/pool/DefaultPoolService.java b/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
index f713bda..6e8e0f9 100644
--- a/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
+++ b/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
@@ -78,11 +78,11 @@
* @return the instance.
* @throws PoolException if recycling fails.
*/
- public Object getInstance(String className) throws PoolException
+ public <T> T getInstance(String className) throws PoolException
{
try
{
- Object instance = pollInstance(className, null, null);
+ T instance = pollInstance(className, null, null);
return instance == null ? getFactory().getInstance(className) : instance;
}
catch (FactoryException fe)
@@ -183,17 +183,18 @@
* Gets an instance of a specified class either from the pool or by instatiating
* from the class if the pool is empty.
*
+ * @param <T> type of the class
* @param clazz the class.
* @return the instance.
* @throws PoolException if recycling fails.
*/
@SuppressWarnings("unchecked")
- public Object getInstance(Class clazz) throws PoolException
+ public <T> T getInstance(Class<?> clazz) throws PoolException
{
try
{
- Object instance = pollInstance(clazz.getName(), null, null);
- return instance == null ? factoryService.getInstance(clazz) : instance;
+ T instance = pollInstance(clazz.getName(), null, null);
+ return instance == null ? (T) factoryService.getInstance(clazz) : instance;
}
catch (FactoryException fe)
{
@@ -211,11 +212,11 @@
* @return the instance.
* @throws PoolException if recycling fails.
*/
- public Object getInstance(Class clazz, Object params[], String signature[]) throws PoolException
+ public <T> T getInstance(Class<?> clazz, Object params[], String signature[]) throws PoolException
{
try
{
- Object instance = pollInstance(clazz.getName(), params, signature);
+ T instance = pollInstance(clazz.getName(), params, signature);
// TODO There is a whacky .toString() on the clazz object,
// but otherwise it won't compile
@@ -349,7 +350,7 @@
* @return the object or null.
* @throws PoolException if recycling fails.
*/
- private Object pollInstance(String className, Object[] params, String[] signature) throws PoolException
+ private <T> T pollInstance(String className, Object[] params, String[] signature) throws PoolException
{
PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
return pool != null ? pool.poll(params, signature, factoryService) : null;
diff --git a/src/java/org/apache/fulcrum/pool/PoolBuffer.java b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
index 7b36d94..4cb732c 100644
--- a/src/java/org/apache/fulcrum/pool/PoolBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
@@ -46,7 +46,7 @@
private ArrayList<Recycler> recyclers;
/**
- * Contructs a new pool buffer with a specific capacity.
+ * Constructs a new pool buffer with a specific capacity.
*
* @param capacity a capacity.
*/
@@ -70,15 +70,15 @@
* Polls for an instance from the pool.
*
*
- * @param params object paramaters
+ * @param params object parameters
* @param signature signature of the class
* @param factoryService service to add
* @throws PoolException if service failed to be found
* @return an instance or null.
*/
- public Object poll(Object[] params, String[] signature, FactoryService factoryService) throws PoolException
+ public <T> T poll(Object[] params, String[] signature, FactoryService factoryService) throws PoolException
{
- Object instance = pool.poll();
+ T instance = pool.poll();
if (instance != null)
{
if (arrayCtorRecyclable)
diff --git a/src/java/org/apache/fulcrum/pool/PoolService.java b/src/java/org/apache/fulcrum/pool/PoolService.java
index 7f3f755..a61b298 100644
--- a/src/java/org/apache/fulcrum/pool/PoolService.java
+++ b/src/java/org/apache/fulcrum/pool/PoolService.java
@@ -50,23 +50,25 @@
* Gets an instance of a specified class either from the pool or by
* instantiating from the class if the pool is empty.
*
+ * @param <T> type of the instance
* @param clazz the class.
* @return the instance.
* @throws PoolException if recycling fails.
*/
- public Object getInstance(Class clazz) throws PoolException;
+ public <T> T getInstance(Class<?> clazz) throws PoolException;
/**
* Gets an instance of a specified class either from the pool or by
* instantiating from the class if the pool is empty.
*
+ * @param <T> type of the instance class
* @param clazz the class.
* @param params an array containing the parameters of the constructor.
* @param signature an array containing the signature of the constructor.
* @return the instance.
* @throws PoolException if recycling fails.
*/
- public Object getInstance(Class clazz, Object params[], String signature[]) throws PoolException;
+ public <T> T getInstance(Class<?> clazz, Object params[], String signature[]) throws PoolException;
/**
* Puts a used object back to the pool. Objects implementing the Recyclable