Improve targetEntity handling #675

This commit is contained in:
Timo Westkämper 2014-03-25 09:55:55 +02:00
parent d15fb64eb5
commit 8fcb7448b2
3 changed files with 51 additions and 1 deletions

View File

@ -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);
}
}
}
}

View File

@ -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");
}

View File

@ -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<EmailType, ManagedEmail> emails;
}
@Test
public void test() {
assertEquals(EmailType.class, QManagedEmailTest_ManagedEmails.managedEmails.emails.getKeyType());
assertEquals(ManagedEmailImpl.class, QManagedEmailTest_ManagedEmails.managedEmails.emails.getValueType());
}
}