Merge pull request #956 from querydsl/i938

Handle concrete collection types properly
This commit is contained in:
Timo Westkämper 2014-09-23 19:54:20 +03:00
commit ef1f9d902b
2 changed files with 61 additions and 6 deletions

View File

@ -317,6 +317,25 @@ public final class ExtendedTypeFactory {
private Type createClassType(DeclaredType declaredType, TypeElement typeElement, boolean deep) {
// other
String name = typeElement.getQualifiedName().toString();
if (name.startsWith("java.")) {
String simpleName = typeElement.getSimpleName().toString();
Iterator<? extends TypeMirror> i = declaredType.getTypeArguments().iterator();
if (isAssignable(declaredType, mapType)) {
return createMapType(simpleName, i, deep);
} else if (isAssignable(declaredType, listType)) {
return createCollectionType(Types.LIST, simpleName, i, deep);
} else if (isAssignable(declaredType, setType)) {
return createCollectionType(Types.SET, simpleName, i, deep);
} else if (isAssignable(declaredType, collectionType)) {
return createCollectionType(Types.COLLECTION, simpleName, i, deep);
}
}
TypeCategory typeCategory = TypeCategory.get(name);
if (typeCategory != TypeCategory.NUMERIC

View File

@ -13,14 +13,14 @@
*/
package com.mysema.query.domain;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import java.util.*;
import com.mysema.query.annotations.QueryEntity;
import com.mysema.query.types.path.ListPath;
import com.mysema.query.types.path.MapPath;
import com.mysema.query.types.path.SetPath;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CollectionTest {
@ -51,11 +51,47 @@ public class CollectionTest {
Set set2;
}
@QueryEntity
public static class Classes {
HashMap map1;
HashMap<?,?> map2;
HashMap<String, String> map3;
ArrayList list1;
ArrayList<?> list2;
ArrayList<String> list3;
HashSet set1;
HashSet<?> set2;
HashSet<String> set3;
}
@Test
public void test() {
// assertEquals(String.class, QMapWithUndefinedValueTest_Person.person.appData.getParameter(1));
// assertEquals(Object.class, QMapWithUndefinedValueTest_Person.person.appData.getParameter(1));
assertEquals(MapPath.class, QCollectionTest_Classes.classes.map1.getClass());
assertEquals(MapPath.class, QCollectionTest_Classes.classes.map2.getClass());
assertEquals(MapPath.class, QCollectionTest_Classes.classes.map3.getClass());
assertEquals(ListPath.class, QCollectionTest_Classes.classes.list1.getClass());
assertEquals(ListPath.class, QCollectionTest_Classes.classes.list2.getClass());
assertEquals(ListPath.class, QCollectionTest_Classes.classes.list3.getClass());
assertEquals(SetPath.class, QCollectionTest_Classes.classes.set1.getClass());
assertEquals(SetPath.class, QCollectionTest_Classes.classes.set2.getClass());
assertEquals(SetPath.class, QCollectionTest_Classes.classes.set3.getClass());
}
}