From 8fcb7448b277f656214986fb14904ff68c515e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 25 Mar 2014 09:55:55 +0200 Subject: [PATCH] Improve targetEntity handling #675 --- .../query/apt/jpa/JPAConfiguration.java | 10 ++++- .../mysema/query/apt/GenericExporterTest.java | 1 + .../mysema/query/domain/ManagedEmailTest.java | 41 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 querydsl-apt/src/test/java/com/mysema/query/domain/ManagedEmailTest.java diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java index 5404d5dc0..0dcf2b187 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java @@ -24,6 +24,7 @@ import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; +import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Types; import javax.persistence.Access; @@ -138,7 +139,14 @@ public class JPAConfiguration extends DefaultConfiguration { TypeMirror erasure = types.erasure(element.asType()); TypeElement typeElement = (TypeElement) types.asElement(erasure); if (typeElement != null && typeArg != null) { - return types.getDeclaredType(typeElement, typeArg); + if (typeElement.getTypeParameters().size() == 1) { + return types.getDeclaredType(typeElement, typeArg); + } else if (typeElement.getTypeParameters().size() == 2) { + if (element.asType() instanceof DeclaredType) { + TypeMirror first = ((DeclaredType)element.asType()).getTypeArguments().get(0); + return types.getDeclaredType(typeElement, first, typeArg); + } + } } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java index 7c68296d4..4b571b616 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java @@ -93,6 +93,7 @@ public class GenericExporterTest extends AbstractProcessorTest { expected.add("QGeneric4Test_HidaBezGruppe.java"); expected.add("QInterfaceType2Test_UserImpl.java"); expected.add("QOrderTest_Order.java"); + expected.add("QManagedEmailTest_ManagedEmails.java"); execute(expected, "GenericExporterTest2", "HibernateAnnotationProcessor"); } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/ManagedEmailTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/ManagedEmailTest.java new file mode 100644 index 000000000..09541eaef --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/ManagedEmailTest.java @@ -0,0 +1,41 @@ +package com.mysema.query.domain; + +import static org.junit.Assert.assertEquals; + +import java.util.Map; + +import javax.persistence.Entity; +import javax.persistence.MapKey; +import javax.persistence.OneToMany; + +import org.junit.Test; + +public class ManagedEmailTest { + + public interface ManagedEmail { + + } + + public enum EmailType { WORK, HOME } + + @Entity + public static class ManagedEmailImpl implements ManagedEmail { + + } + + @Entity + public static class ManagedEmails { + + @OneToMany(targetEntity = ManagedEmailImpl.class) + @MapKey(name = "emailType") + private Map emails; + + } + + @Test + public void test() { + assertEquals(EmailType.class, QManagedEmailTest_ManagedEmails.managedEmails.emails.getKeyType()); + assertEquals(ManagedEmailImpl.class, QManagedEmailTest_ManagedEmails.managedEmails.emails.getValueType()); + } + +}