Skip to content

Commit 1003819

Browse files
committed
#21 - Work on generics / parameterized-types
1 parent 1870608 commit 1003819

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

src/main/java/org/hibernate/models/spi/ObjectClassDetails.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ public String getClassName() {
3333
return Object.class.getName();
3434
}
3535

36+
@Override
37+
public String toString() {
38+
return "ClassDetails(java.lang.Object)";
39+
}
40+
3641
@Override
3742
public boolean isResolved() {
3843
return true;
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
* Copyright: Red Hat Inc. and Hibernate Authors
6+
*/
7+
8+
package org.hibernate.models.classes;
9+
10+
import org.hibernate.models.SourceModelTestHelper;
11+
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
12+
import org.hibernate.models.spi.ClassDetails;
13+
import org.hibernate.models.spi.ClassDetailsRegistry;
14+
import org.hibernate.models.spi.ObjectClassDetails;
15+
16+
import org.junit.jupiter.api.Test;
17+
18+
import org.jboss.jandex.Index;
19+
20+
import jakarta.persistence.Entity;
21+
import jakarta.persistence.Id;
22+
import jakarta.persistence.MappedSuperclass;
23+
24+
import static org.assertj.core.api.Assertions.assertThat;
25+
26+
/**
27+
* @author Steve Ebersole
28+
*/
29+
public class GenericsTests {
30+
@Test
31+
void testWrappedId() {
32+
final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext(
33+
(Index) null,
34+
Base.class,
35+
Thing1.class,
36+
Thing2.class
37+
);
38+
39+
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
40+
41+
final ClassDetails baseClassDetails = classDetailsRegistry.getClassDetails( Base.class.getName() );
42+
final ClassDetails idType = baseClassDetails.findFieldByName( "id" ).getType();
43+
assertThat( idType.getName() ).isEqualTo( IdWrapper.class.getName() );
44+
final ClassDetails wrappedType = idType.findFieldByName( "value" ).getType();
45+
assertThat( wrappedType ).isSameAs( ObjectClassDetails.OBJECT_CLASS_DETAILS );
46+
}
47+
48+
@Test
49+
void testId() {
50+
final SourceModelBuildingContextImpl buildingContext = SourceModelTestHelper.createBuildingContext(
51+
(Index) null,
52+
Base2.class,
53+
Thing3.class,
54+
Thing4.class
55+
);
56+
57+
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
58+
59+
final ClassDetails baseClassDetails = classDetailsRegistry.getClassDetails( Base2.class.getName() );
60+
assertThat( baseClassDetails.getFields() ).hasSize( 2 );
61+
final ClassDetails idType = baseClassDetails.findFieldByName( "id" ).getType();
62+
assertThat( idType ).isSameAs( ObjectClassDetails.OBJECT_CLASS_DETAILS );
63+
}
64+
65+
public static class IdWrapper<T> {
66+
T value;
67+
}
68+
69+
@MappedSuperclass
70+
public static class Base<I> {
71+
@Id
72+
private IdWrapper<I> id;
73+
private String name;
74+
}
75+
76+
@Entity
77+
public static class Thing1 extends Base<Integer> {
78+
}
79+
80+
@Entity
81+
public static class Thing2 extends Base<String> {
82+
}
83+
84+
@MappedSuperclass
85+
public static class Base2<I> {
86+
@Id
87+
private I id;
88+
private String name;
89+
}
90+
91+
@Entity
92+
public static class Thing3 extends Base2<Integer> {
93+
}
94+
95+
@Entity
96+
public static class Thing4 extends Base<String> {
97+
}
98+
}

0 commit comments

Comments
 (0)