[jboss-svn-commits] JBoss Common SVN: r2704 - jbossxb/trunk/src/main/java/org/jboss/xb/builder.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jan 25 12:14:14 EST 2008
Author: alex.loubyansky at jboss.com
Date: 2008-01-25 12:14:14 -0500 (Fri, 25 Jan 2008)
New Revision: 2704
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
Log:
JBXB-118
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2008-01-25 12:34:04 UTC (rev 2703)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2008-01-25 17:14:14 UTC (rev 2704)
@@ -21,10 +21,8 @@
*/
package org.jboss.xb.builder;
-import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -965,7 +963,7 @@
if (typeInfo.isCollection())
{
- TypeInfo memberBaseType = findComponentType(typeInfo);
+ TypeInfo memberBaseType = ((ClassInfo)typeInfo).getComponentType();
JBossXmlModelGroup xmlModelGroup = ((ClassInfo) memberBaseType)
.getUnderlyingAnnotation(JBossXmlModelGroup.class);
if (xmlModelGroup != null && xmlModelGroup.particles().length > 0)
@@ -1006,7 +1004,7 @@
boolean isCol = false;
if (memberTypeInfo.isCollection())
{
- memberTypeInfo = findComponentType((ClassInfo) memberTypeInfo);
+ memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
isCol = true;
}
@@ -1119,7 +1117,7 @@
else if (wildcardType.isCollection())
{
localModel = createCollection(localModel);
- type = findComponentType(wildcardProperty);
+ type = ((ClassInfo)wildcardProperty.getType()).getComponentType();
if (trace)
log.trace("Wildcard " + wildcardProperty.getName() + " is a collection of type " + type.getName());
}
@@ -1362,7 +1360,7 @@
{
memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(jbossXmlCollection.type());
}
- memberTypeInfo = findComponentType((ClassInfo) memberTypeInfo);
+ memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
}
}
// if it is bound with XmlElement.type to a collection
@@ -1370,7 +1368,7 @@
{
memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberTypeInfo);
isCol = true;
- memberTypeInfo = findComponentType((ClassInfo) memberTypeInfo);
+ memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
}
else
{
@@ -1640,12 +1638,12 @@
{
isCol = true;
propertyHandler = new CollectionPropertyHandler(property, propertyType);
- ClassInfo typeArg = (ClassInfo) findComponentType(property);
+ // here we get the comp type based on the non-overriden property type...
+ // which feels like a weak point
+ TypeInfo typeArg = ((ClassInfo)property.getType()).getComponentType();
- //if (((ClassInfo) typeArg).getUnderlyingAnnotation(XmlType.class) != null)
- if (typeArg != null && typeArg.getUnderlyingAnnotation(JBossXmlModelGroup.class) == null)
+ if (typeArg != null && ((ClassInfo)typeArg).getUnderlyingAnnotation(JBossXmlModelGroup.class) == null)
{// it may be a model group in which case we don't want to change the type
-
// TODO yes, this is another hack with collections
JBossXmlChild xmlChild = ((ClassInfo) propertyType).getUnderlyingAnnotation(JBossXmlChild.class);
if (xmlChild == null && localPropertyType.equals(propertyType))
@@ -1659,20 +1657,16 @@
else if (localPropertyType.isCollection()
&& ((ClassInfo) localPropertyType).getUnderlyingAnnotation(XmlType.class) == null)
{
- Type parameterizedType;
if (valueAdapter != null)
{
propertyHandler = new PropertyHandler(property, localPropertyType);
- parameterizedType = valueAdapter.getAdaptedType();
}
else
{
propertyHandler = new CollectionPropertyHandler(property, localPropertyType);
- parameterizedType = localPropertyType.getType();
}
isCol = true;
- localPropertyType = findActualType((ClassInfo) localPropertyType, parameterizedType,
- java.util.Collection.class, 0);
+ localPropertyType = ((ClassInfo)localPropertyType).getComponentType();
}
else if (localPropertyType.isMap())
{
@@ -1925,122 +1919,6 @@
}
}
- // the following is available in the latest org.jboss.reflect package
- // but doesn't build at the moment...
- private TypeInfo findComponentType(PropertyInfo prop)
- {
- return findActualType(prop, java.util.Collection.class, 0);
- }
-
- protected TypeInfo findComponentType(ClassInfo classInfo)
- {
- return findActualType(classInfo, classInfo.getType(), java.util.Collection.class, 0);
- }
-
- private TypeInfo findActualType(PropertyInfo property, Class reference, int parameter)
- {
- MethodInfo getter = property.getGetter();
- if (getter == null)
- {
- throw new IllegalStateException("Expected a getter for " + property.getName() + " in " + property.getBeanInfo().getName());
- }
-
- Method m;
- try
- {
- m = property.getBeanInfo().getClassInfo().getType().getMethod(getter.getName(), null);
- }
- catch (NoSuchMethodException e)
- {
- throw new IllegalStateException("Expected a getter for " + property.getName() + " in " + property.getBeanInfo().getName());
- }
-
- return findActualType((ClassInfo) property.getType(), m.getGenericReturnType(), reference, parameter);
- }
-
- protected TypeInfo findActualType(ClassInfo classInfo, Type genericType, Class reference, int parameter)
- {
- Type result = locateActualType(reference, parameter, classInfo.getType(), genericType);
- if (result instanceof TypeVariable)
- {
- TypeVariable typeVariable = (TypeVariable) result;
- result = typeVariable.getBounds()[0];
- }
-
- return classInfo.getTypeInfoFactory().getTypeInfo(result);
- }
-
- protected static Type locateActualType(Class reference, int parameter, Class clazz, Type type)
- {
- if (reference.equals(clazz))
- {
- if (type instanceof Class)
- {
- Class typeClass = (Class) type;
- return typeClass.getTypeParameters()[parameter];
- }
- else
- {
- ParameterizedType parameterized = (ParameterizedType) type;
- return parameterized.getActualTypeArguments()[parameter];
- }
- }
-
- Type[] interfaces = clazz.getGenericInterfaces();
- for (Type intf : interfaces)
- {
- Class interfaceClass;
- if (intf instanceof Class)
- {
- interfaceClass = (Class) intf;
- }
- else if (intf instanceof ParameterizedType)
- {
- ParameterizedType interfaceType = (ParameterizedType) intf;
- interfaceClass = (Class) interfaceType.getRawType();
- }
- else
- throw new IllegalStateException("Unexpected type " + intf.getClass());
-
- Type result = null;
- if (reference.isAssignableFrom(interfaceClass))
- {
- result = locateActualType(reference, parameter, interfaceClass, intf);
- if (result instanceof TypeVariable)
- result = getParameter(clazz, type, (TypeVariable) result);
- }
-
- if (result != null)
- return result;
- }
-
- Class superClass = clazz.getSuperclass();
- Type genericSuperClass = clazz.getGenericSuperclass();
- Type result = locateActualType(reference, parameter, superClass, genericSuperClass);
- if (result instanceof TypeVariable)
- result = getParameter(clazz, type, (TypeVariable) result);
- return result;
- }
-
- private static Type getParameter(Class clazz, Type type, TypeVariable variable)
- {
- TypeVariable[] variables = clazz.getTypeParameters();
- for (int i = 0; i < variables.length; ++i)
- {
- if (variables[i].getName().equals(variable.getName()))
- {
- if (type instanceof ParameterizedType)
- {
- ParameterizedType parameterized = (ParameterizedType) type;
- return parameterized.getActualTypeArguments()[i];
- }
- return variable;
- }
- }
- // Not generic
- return Object.class;
- }
-
private static class XBValueAdapter implements ValueAdapter
{
private final XmlAdapter xmlAdapter;
More information about the jboss-svn-commits
mailing list