[jboss-cvs] JBossAS SVN: r66233 - in projects/microcontainer/trunk/metatype/src: main/org/jboss/metatype/plugins/types and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Oct 18 08:44:31 EDT 2007
Author: alesj
Date: 2007-10-18 08:44:31 -0400 (Thu, 18 Oct 2007)
New Revision: 66233
Modified:
projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/api/types/ArrayMetaType.java
projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java
projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java
projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java
Log:
Primitive support in unwrap.
Modified: projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/api/types/ArrayMetaType.java
===================================================================
--- projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/api/types/ArrayMetaType.java 2007-10-18 10:38:13 UTC (rev 66232)
+++ projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/api/types/ArrayMetaType.java 2007-10-18 12:44:31 UTC (rev 66233)
@@ -28,6 +28,7 @@
/**
* ArrayMetaType.
*
+ * @param <T> exact type
* @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
@@ -41,6 +42,7 @@
/** The element type for the array */
private MetaType elementType;
+
/** Is elementType a primative array */
private boolean primitiveArray;
@@ -66,7 +68,13 @@
{ Double.class.getName(), double.class.getName(), "D", SimpleMetaType.DOUBLE }
};
- static boolean isPrimitiveEncoding(final String primitiveKey)
+ /**
+ * Is primitive key.
+ *
+ * @param primitiveKey the key to check
+ * @return true if key is primitive
+ */
+ public static boolean isPrimitiveEncoding(final String primitiveKey)
{
for (Object[] typeDescr : PRIMITIVE_ARRAY_TYPES)
{
@@ -77,7 +85,14 @@
}
return false;
}
- static SimpleMetaType<?> getPrimitiveMetaType(String primitiveTypeName)
+
+ /**
+ * Get primitive meta type.
+ *
+ * @param primitiveTypeName primitive type name
+ * @return primitive meta type or null if param is not primitive
+ */
+ public static SimpleMetaType<?> getPrimitiveMetaType(String primitiveTypeName)
{
for (Object[] typeDescr : PRIMITIVE_ARRAY_TYPES)
{
@@ -86,12 +101,14 @@
}
return null;
}
+
/**
* Get the char encoding string for the type name.
+ *
* @param typeName - the primitive wrapper type name
* @return char encoding string.
*/
- static String getPrimativeEncoding(String typeName)
+ public static String getPrimitiveEncoding(String typeName)
{
for (Object[] typeDescr : PRIMITIVE_ARRAY_TYPES)
{
@@ -100,12 +117,14 @@
}
return null;
}
+
/**
* Get the char encoding string for the type name.
+ *
* @param typeName - the primitive wrapper type name
* @return primitive type name string.
*/
- static String getPrimativeName(String typeName)
+ public static String getPrimitiveName(String typeName)
{
for (Object[] typeDescr : PRIMITIVE_ARRAY_TYPES)
{
@@ -115,11 +134,23 @@
return null;
}
+ /**
+ * Get array meta type.
+ *
+ * @param elementType the element meta type
+ * @return array meta type
+ */
public static <E extends Serializable> ArrayMetaType<E[]> getArrayType(MetaType<E> elementType)
{
- ArrayMetaType<E[]> arrayType = new ArrayMetaType<E[]>(1, elementType);
- return arrayType;
+ return new ArrayMetaType<E[]>(1, elementType);
}
+
+ /**
+ * Get primitive array meta type.
+ *
+ * @param arrayClass array class
+ * @return array meta type
+ */
public static <T extends Serializable> ArrayMetaType<T> getPrimitiveArrayType(Class<T> arrayClass)
{
if (!arrayClass.isArray())
@@ -157,10 +188,10 @@
*
* @param dimension the dimension
* @param elementType the element type
- * @param isPrimative is this a primitive type
+ * @param isPrimitive is this a primitive type
* @return the class name
*/
- private static String genName(int dimension, MetaType elementType, boolean isPrimative)
+ private static String genName(int dimension, MetaType elementType, boolean isPrimitive)
{
if (dimension < 1)
throw new IllegalArgumentException("negative dimension");
@@ -171,9 +202,9 @@
StringBuilder buffer = new StringBuilder();
for (int i=0; i < dimension; i++)
buffer.append('[');
- if (isPrimative)
+ if (isPrimitive)
{
- buffer.append(getPrimativeEncoding(elementType.getClassName()));
+ buffer.append(getPrimitiveEncoding(elementType.getClassName()));
}
else
{
@@ -189,10 +220,10 @@
*
* @param dimension the dimension
* @param elementType the element type
- * @param isPrimative is this a primitive type
+ * @param isPrimitive is this a primitive type
* @return the type name
*/
- private static String genType(int dimension, MetaType elementType, boolean isPrimative)
+ private static String genType(int dimension, MetaType elementType, boolean isPrimitive)
{
if (dimension < 1)
throw new IllegalArgumentException("negative dimension");
@@ -203,9 +234,9 @@
StringBuilder buffer = new StringBuilder();
for (int i=0; i < dimension; i++)
buffer.append('[');
- if (isPrimative)
+ if (isPrimitive)
{
- buffer.append(getPrimativeEncoding(elementType.getClassName()));
+ buffer.append(getPrimitiveEncoding(elementType.getClassName()));
}
else
{
@@ -221,16 +252,16 @@
*
* @param dimension the dimension
* @param elementType the element type
- * @param isPrimative is this a primitive type
+ * @param isPrimitive is this a primitive type
* @return the description
*/
- private static String genDesc(int dimension, MetaType elementType, boolean isPrimative)
+ private static String genDesc(int dimension, MetaType elementType, boolean isPrimitive)
{
StringBuilder buffer = new StringBuilder();
buffer.append(new Integer(dimension));
buffer.append("-dimension array of ");
- if (isPrimative)
- buffer.append(getPrimativeName(elementType.getTypeName()));
+ if (isPrimitive)
+ buffer.append(getPrimitiveName(elementType.getTypeName()));
else
buffer.append(elementType.getTypeName());
return buffer.toString();
@@ -252,16 +283,27 @@
this.elementType = elementType;
this.primitiveArray = false;
}
+
/**
* Construct an ArrayMetaType.
- * @param elementType
- * @param primitiveArray
+ *
+ * @param elementType the element type
+ * @param primitiveArray is primitive array
*/
public ArrayMetaType(SimpleMetaType<?> elementType, boolean primitiveArray)
{
this(1, elementType, primitiveArray);
}
- public ArrayMetaType(int dimension, SimpleMetaType<?> elementType, boolean primitiveArray)
+
+ /**
+ * Construct an ArrayMetaType.
+ *
+ * @param dimension the number of dimensions in the array
+ * @param elementType the open type of the array elements
+ * @param primitiveArray is primitive array
+ * @throws IllegalArgumentException for a null argument or non-negative dimension or when meta type is an ArrayMetaType
+ */
+ public ArrayMetaType(int dimension, MetaType<?> elementType, boolean primitiveArray)
{
super(genName(dimension, elementType, primitiveArray),
genType(dimension, elementType, primitiveArray),
@@ -291,6 +333,11 @@
return elementType;
}
+ /**
+ * Is primitive array.
+ *
+ * @return true for primitive array
+ */
public boolean isPrimitiveArray()
{
return primitiveArray;
Modified: projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java
===================================================================
--- projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java 2007-10-18 10:38:13 UTC (rev 66232)
+++ projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java 2007-10-18 12:44:31 UTC (rev 66233)
@@ -255,7 +255,7 @@
componentType = ((ArrayInfo) componentType).getComponentType();
}
MetaType componentMetaType = resolve(componentType);
- return new ArrayMetaType(dimension, componentMetaType);
+ return new ArrayMetaType(dimension, componentMetaType, componentType.isPrimitive());
}
/**
Modified: projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java
===================================================================
--- projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java 2007-10-18 10:38:13 UTC (rev 66232)
+++ projects/microcontainer/trunk/metatype/src/main/org/jboss/metatype/plugins/values/DefaultMetaValueFactory.java 2007-10-18 12:44:31 UTC (rev 66233)
@@ -65,6 +65,7 @@
import org.jboss.reflect.spi.ArrayInfo;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.reflect.spi.TypeInfoFactory;
/**
* DefaultMetaValueFactory.
@@ -446,6 +447,13 @@
return internalUnwrap(metaValue, type);
}
+ /**
+ * Unwrap value from meta value.
+ *
+ * @param metaValue the meta value
+ * @param type expected type info
+ * @return unwrapped value
+ */
protected Object internalUnwrap(MetaValue metaValue, TypeInfo type)
{
if (metaValue == null)
@@ -589,11 +597,15 @@
try
{
+ TypeInfoFactory tif = configuration.getTypeInfoFactory();
if (metaType.isArray())
{
ArrayMetaType arrayMetaType = (ArrayMetaType)metaType;
MetaType elementMetaType = arrayMetaType.getElementType();
- TypeInfo elementTypeInfo = configuration.getClassInfo(elementMetaType.getTypeName(), cl);
+ String elementTypeName = elementMetaType.getTypeName();
+ if (arrayMetaType.isPrimitiveArray())
+ elementTypeName = ArrayMetaType.getPrimitiveName(elementTypeName);
+ TypeInfo elementTypeInfo = tif.getTypeInfo(elementTypeName, cl);
int dimension = arrayMetaType.getDimension() - 1; // minus 1, since we already use first in next line
TypeInfo typeInfo = elementTypeInfo.getArrayType();
while(dimension > 0)
@@ -603,7 +615,7 @@
}
return typeInfo;
}
- return configuration.getClassInfo(metaType.getTypeName(), cl);
+ return tif.getTypeInfo(metaType.getTypeName(), cl);
}
catch (ClassNotFoundException e)
{
Modified: projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java 2007-10-18 10:38:13 UTC (rev 66232)
+++ projects/microcontainer/trunk/metatype/src/tests/org/jboss/test/metatype/values/factory/test/UnwrapValueUnitTestCase.java 2007-10-18 12:44:31 UTC (rev 66233)
@@ -109,12 +109,7 @@
{
public boolean assertArray(final Object original, final Object unwrapped)
{
- short[] so = (short[])original;
- Short[] SO = (Short[])unwrapped;
- for (int i = 0; i < so.length; i++)
- if (so[i] != SO[i])
- return false;
- return true;
+ return Arrays.equals((short[])original, (short[])unwrapped);
}
});
More information about the jboss-cvs-commits
mailing list