diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java index 0e7153d65..cfc9d2a24 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java @@ -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 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 diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java index ece094957..698867f3d 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java @@ -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 map3; + + ArrayList list1; + + ArrayList list2; + + ArrayList list3; + + HashSet set1; + + HashSet set2; + + HashSet 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()); + } }