Skip to content

Commit 9542976

Browse files
committed
#17 - Create ObjectClassDetails
1 parent 2de9e64 commit 9542976

File tree

6 files changed

+161
-17
lines changed

6 files changed

+161
-17
lines changed

src/main/java/org/hibernate/models/internal/ClassDetailsRegistryStandard.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
import org.hibernate.models.UnknownClassException;
1313
import org.hibernate.models.internal.jandex.JandexBuilders;
1414
import org.hibernate.models.internal.jdk.JdkBuilders;
15-
import org.hibernate.models.internal.jdk.VoidClassDetails;
15+
import org.hibernate.models.spi.ObjectClassDetails;
16+
import org.hibernate.models.spi.VoidClassDetails;
1617
import org.hibernate.models.spi.ClassDetails;
1718
import org.hibernate.models.spi.ClassDetailsBuilder;
1819
import org.hibernate.models.spi.ClassDetailsRegistry;
@@ -37,6 +38,7 @@ public ClassDetailsRegistryStandard(SourceModelBuildingContext context) {
3738

3839
classDetailsMap.put( VoidClassDetails.VOID_CLASS_DETAILS.getClassName(), VoidClassDetails.VOID_CLASS_DETAILS );
3940
classDetailsMap.put( VoidClassDetails.VOID_OBJECT_CLASS_DETAILS.getClassName(), VoidClassDetails.VOID_OBJECT_CLASS_DETAILS );
41+
classDetailsMap.put( ObjectClassDetails.OBJECT_CLASS_DETAILS.getClassName(), ObjectClassDetails.OBJECT_CLASS_DETAILS );
4042
}
4143

4244
@Override

src/main/java/org/hibernate/models/internal/jandex/JandexMethodDetails.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@
1010
import java.util.List;
1111
import java.util.Locale;
1212

13-
import org.hibernate.models.internal.ModifierUtils;
1413
import org.hibernate.models.internal.MutableMemberDetails;
15-
import org.hibernate.models.internal.jdk.VoidClassDetails;
1614
import org.hibernate.models.spi.ClassDetails;
1715
import org.hibernate.models.spi.ClassDetailsRegistry;
1816
import org.hibernate.models.spi.MethodDetails;
1917
import org.hibernate.models.spi.SourceModelBuildingContext;
2018

2119
import org.jboss.jandex.AnnotationTarget;
2220
import org.jboss.jandex.MethodInfo;
23-
import org.jboss.jandex.Type;
2421

2522
/**
2623
* @author Steve Ebersole
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
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.spi;
9+
10+
import java.lang.annotation.Annotation;
11+
import java.util.Collection;
12+
import java.util.Collections;
13+
import java.util.List;
14+
import java.util.function.Consumer;
15+
16+
import org.hibernate.models.internal.util.IndexedConsumer;
17+
18+
/**
19+
* ClassDetails for describing Java's {@linkplain Object}
20+
*
21+
* @author Steve Ebersole
22+
*/
23+
public class ObjectClassDetails implements ClassDetails {
24+
public static ObjectClassDetails OBJECT_CLASS_DETAILS = new ObjectClassDetails();
25+
26+
@Override
27+
public String getName() {
28+
return getClassName();
29+
}
30+
31+
@Override
32+
public String getClassName() {
33+
return Object.class.getName();
34+
}
35+
36+
@Override
37+
public boolean isResolved() {
38+
return true;
39+
}
40+
41+
@Override
42+
public boolean isAbstract() {
43+
return false;
44+
}
45+
46+
@Override
47+
public boolean isRecord() {
48+
return false;
49+
}
50+
51+
@Override
52+
public ClassDetails getSuperType() {
53+
return null;
54+
}
55+
56+
@Override
57+
public List<ClassDetails> getImplementedInterfaceTypes() {
58+
return Collections.emptyList();
59+
}
60+
61+
@Override
62+
public boolean isImplementor(Class<?> checkType) {
63+
// only an implementor of itself
64+
return Object.class.equals( checkType );
65+
}
66+
67+
@Override
68+
public List<FieldDetails> getFields() {
69+
// filter out Object's fields
70+
return Collections.emptyList();
71+
}
72+
73+
@Override
74+
public void forEachField(IndexedConsumer<FieldDetails> consumer) {
75+
}
76+
77+
@Override
78+
public List<MethodDetails> getMethods() {
79+
// filter out Object's methods
80+
return Collections.emptyList();
81+
}
82+
83+
@Override
84+
public void forEachMethod(IndexedConsumer<MethodDetails> consumer) {
85+
}
86+
87+
@Override
88+
public List<RecordComponentDetails> getRecordComponents() {
89+
return Collections.emptyList();
90+
}
91+
92+
@Override
93+
public <X> Class<X> toJavaClass() {
94+
//noinspection unchecked
95+
return (Class<X>) Object.class;
96+
}
97+
98+
@Override
99+
public Collection<AnnotationUsage<?>> getAllAnnotationUsages() {
100+
return Collections.emptyList();
101+
}
102+
103+
@Override
104+
public <A extends Annotation> boolean hasAnnotationUsage(Class<A> type) {
105+
return false;
106+
}
107+
108+
@Override
109+
public <A extends Annotation> AnnotationUsage<A> getAnnotationUsage(AnnotationDescriptor<A> descriptor) {
110+
return null;
111+
}
112+
113+
@Override
114+
public <A extends Annotation> AnnotationUsage<A> getAnnotationUsage(Class<A> type) {
115+
return null;
116+
}
117+
118+
@Override
119+
public <A extends Annotation> AnnotationUsage<A> locateAnnotationUsage(Class<A> type) {
120+
return null;
121+
}
122+
123+
@Override
124+
public <A extends Annotation> List<AnnotationUsage<A>> getRepeatedAnnotationUsages(AnnotationDescriptor<A> type) {
125+
return Collections.emptyList();
126+
}
127+
128+
@Override
129+
public <A extends Annotation> List<AnnotationUsage<A>> getRepeatedAnnotationUsages(Class<A> type) {
130+
return Collections.emptyList();
131+
}
132+
133+
@Override
134+
public <X extends Annotation> void forEachAnnotationUsage(Class<X> type, Consumer<AnnotationUsage<X>> consumer) {
135+
}
136+
137+
@Override
138+
public <X extends Annotation> AnnotationUsage<X> getNamedAnnotationUsage(
139+
AnnotationDescriptor<X> type,
140+
String matchName,
141+
String attributeToMatch) {
142+
return null;
143+
}
144+
145+
@Override
146+
public <X extends Annotation> AnnotationUsage<X> getNamedAnnotationUsage(
147+
Class<X> type,
148+
String matchName,
149+
String attributeToMatch) {
150+
return null;
151+
}
152+
}

src/main/java/org/hibernate/models/internal/jdk/VoidClassDetails.java renamed to src/main/java/org/hibernate/models/spi/VoidClassDetails.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* SPDX-License-Identifier: Apache-2.0
55
* Copyright: Red Hat Inc. and Hibernate Authors
66
*/
7-
package org.hibernate.models.internal.jdk;
7+
package org.hibernate.models.spi;
88

99
import java.lang.annotation.Annotation;
1010
import java.util.Collection;
@@ -13,15 +13,9 @@
1313
import java.util.function.Consumer;
1414

1515
import org.hibernate.models.internal.util.IndexedConsumer;
16-
import org.hibernate.models.spi.AnnotationDescriptor;
17-
import org.hibernate.models.spi.AnnotationUsage;
18-
import org.hibernate.models.spi.ClassDetails;
19-
import org.hibernate.models.spi.FieldDetails;
20-
import org.hibernate.models.spi.MethodDetails;
21-
import org.hibernate.models.spi.RecordComponentDetails;
2216

2317
/**
24-
* Specialization of ClassDetails to model both {@code void} and {@code Void}
18+
* Specialization of ClassDetails to model both {@linkplain #VOID_CLASS_DETAILS void} and {@linkplain #VOID_OBJECT_CLASS_DETAILS Void}
2519
*
2620
* @author Steve Ebersole
2721
*/
@@ -32,7 +26,7 @@ public class VoidClassDetails implements ClassDetails {
3226
public static VoidClassDetails VOID_CLASS_DETAILS = new VoidClassDetails( void.class );
3327

3428
/**
35-
* Models {@code Void}
29+
* Models {@linkplain Void}
3630
*/
3731
public static VoidClassDetails VOID_OBJECT_CLASS_DETAILS = new VoidClassDetails( Void.class );
3832

src/test/java/org/hibernate/models/classes/InheritanceTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.hibernate.models.spi.ClassDetails;
99
import org.hibernate.models.spi.ClassDetailsRegistry;
1010
import org.hibernate.models.spi.FieldDetails;
11+
import org.hibernate.models.spi.ObjectClassDetails;
1112

1213
import org.junit.jupiter.api.Test;
1314

@@ -184,6 +185,7 @@ private void testIsImplementor(Index index) {
184185

185186
final ClassDetails rootClassDetails = classDetailsRegistry.getClassDetails( RootClass.class.getName() );
186187
assertThat( rootClassDetails.isImplementor( Intf.class ) ).isFalse();
188+
assertThat( rootClassDetails.getSuperType() ).isSameAs( ObjectClassDetails.OBJECT_CLASS_DETAILS );
187189

188190
final ClassDetails branchClassDetails = classDetailsRegistry.getClassDetails( BranchClass.class.getName() );
189191
assertThat( branchClassDetails.isImplementor( Intf.class ) ).isTrue();

src/test/java/org/hibernate/models/members/MethodDetailsTests.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@
66
*/
77
package org.hibernate.models.members;
88

9-
import java.lang.reflect.Array;
10-
119
import org.hibernate.models.SourceModelTestHelper;
12-
import org.hibernate.models.internal.ModelsLogging;
1310
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
1411
import org.hibernate.models.internal.jdk.JdkMethodDetails;
15-
import org.hibernate.models.internal.jdk.VoidClassDetails;
12+
import org.hibernate.models.spi.VoidClassDetails;
1613
import org.hibernate.models.spi.ClassDetails;
1714
import org.hibernate.models.spi.MemberDetails;
1815
import org.hibernate.models.spi.MethodDetails;

0 commit comments

Comments
 (0)