Skip to content

Commit 767272e

Browse files
committed
#9 - Add details about "index" and "element"/"component" types to MemberDetails
#21 - Work on generics / parameterized-types
1 parent 1003819 commit 767272e

File tree

11 files changed

+372
-3
lines changed

11 files changed

+372
-3
lines changed

src/main/java/org/hibernate/models/internal/dynamic/DynamicFieldDetails.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
package org.hibernate.models.internal.dynamic;
88

99
import java.lang.reflect.Member;
10+
import java.util.Collection;
11+
import java.util.Map;
1012

1113
import org.hibernate.models.internal.MutableMemberDetails;
1214
import org.hibernate.models.spi.ClassDetails;
@@ -22,6 +24,9 @@ public class DynamicFieldDetails extends AbstractAnnotationTarget implements Fie
2224
private final ClassDetails declaringType;
2325
private final int modifierFlags;
2426

27+
private final boolean isArray;
28+
private final boolean isPlural;
29+
2530
public DynamicFieldDetails(
2631
String name,
2732
ClassDetails type,
@@ -33,6 +38,15 @@ public DynamicFieldDetails(
3338
this.type = type;
3439
this.declaringType = declaringType;
3540
this.modifierFlags = modifierFlags;
41+
42+
if ( type != null ) {
43+
this.isArray = type.getName().startsWith( "[" );
44+
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
45+
}
46+
else {
47+
this.isArray = false;
48+
this.isPlural = false;
49+
}
3650
}
3751

3852
@Override
@@ -50,6 +64,16 @@ public ClassDetails getDeclaringType() {
5064
return declaringType;
5165
}
5266

67+
@Override
68+
public boolean isPlural() {
69+
return isPlural;
70+
}
71+
72+
@Override
73+
public boolean isArray() {
74+
return isArray;
75+
}
76+
5377
@Override
5478
public int getModifiers() {
5579
return modifierFlags;

src/main/java/org/hibernate/models/internal/dynamic/DynamicMethodDetails.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
package org.hibernate.models.internal.dynamic;
88

99
import java.lang.reflect.Member;
10+
import java.util.Collection;
1011
import java.util.List;
12+
import java.util.Map;
1113

12-
import org.hibernate.models.internal.ModifierUtils;
1314
import org.hibernate.models.internal.MutableMemberDetails;
1415
import org.hibernate.models.spi.ClassDetails;
1516
import org.hibernate.models.spi.MethodDetails;
@@ -28,6 +29,9 @@ public class DynamicMethodDetails extends AbstractAnnotationTarget implements Me
2829
private final ClassDetails returnType;
2930
private final List<ClassDetails> argumentTypes;
3031

32+
private final boolean isArray;
33+
private final boolean isPlural;
34+
3135
public DynamicMethodDetails(
3236
String name,
3337
ClassDetails type,
@@ -45,6 +49,15 @@ public DynamicMethodDetails(
4549
this.modifierFlags = modifierFlags;
4650
this.returnType = returnType;
4751
this.argumentTypes = argumentTypes;
52+
53+
if ( type != null ) {
54+
this.isArray = type.getName().startsWith( "[" );
55+
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
56+
}
57+
else {
58+
this.isArray = false;
59+
this.isPlural = false;
60+
}
4861
}
4962

5063
@Override
@@ -67,6 +80,16 @@ public ClassDetails getDeclaringType() {
6780
return declaringType;
6881
}
6982

83+
@Override
84+
public boolean isPlural() {
85+
return isPlural;
86+
}
87+
88+
@Override
89+
public boolean isArray() {
90+
return isArray;
91+
}
92+
7093
@Override
7194
public int getModifiers() {
7295
return modifierFlags;

src/main/java/org/hibernate/models/internal/dynamic/MapModeFieldDetails.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
package org.hibernate.models.internal.dynamic;
88

99
import java.lang.reflect.Member;
10+
import java.util.Collection;
11+
import java.util.Map;
1012

1113
import org.hibernate.models.internal.MutableMemberDetails;
1214
import org.hibernate.models.spi.ClassDetails;
@@ -24,6 +26,9 @@ public class MapModeFieldDetails extends AbstractAnnotationTarget implements Fie
2426
private final int modifierFlags;
2527
private final ClassDetails declaringType;
2628

29+
private final boolean isArray;
30+
private final boolean isPlural;
31+
2732
public MapModeFieldDetails(
2833
String name,
2934
ClassDetails type,
@@ -35,6 +40,15 @@ public MapModeFieldDetails(
3540
this.type = type;
3641
this.modifierFlags = modifierFlags;
3742
this.declaringType = declaringType;
43+
44+
if ( type != null ) {
45+
this.isArray = type.getName().startsWith( "[" );
46+
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
47+
}
48+
else {
49+
this.isArray = false;
50+
this.isPlural = false;
51+
}
3852
}
3953

4054
@Override
@@ -52,6 +66,16 @@ public ClassDetails getDeclaringType() {
5266
return declaringType;
5367
}
5468

69+
@Override
70+
public boolean isPlural() {
71+
return isPlural;
72+
}
73+
74+
@Override
75+
public boolean isArray() {
76+
return isArray;
77+
}
78+
5579
@Override
5680
public int getModifiers() {
5781
return modifierFlags;

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
import java.lang.reflect.Field;
1010
import java.lang.reflect.Member;
11+
import java.util.Collection;
12+
import java.util.Map;
1113

1214
import org.hibernate.models.internal.MutableMemberDetails;
1315
import org.hibernate.models.spi.ClassDetails;
@@ -16,6 +18,7 @@
1618

1719
import org.jboss.jandex.AnnotationTarget;
1820
import org.jboss.jandex.FieldInfo;
21+
import org.jboss.jandex.Type;
1922

2023
/**
2124
* @author Steve Ebersole
@@ -25,6 +28,9 @@ public class JandexFieldDetails extends AbstractAnnotationTarget implements Fiel
2528
private final ClassDetails type;
2629
private final ClassDetails declaringType;
2730

31+
private final boolean isArray;
32+
private final boolean isPlural;
33+
2834
public JandexFieldDetails(
2935
FieldInfo fieldInfo,
3036
ClassDetails declaringType,
@@ -33,6 +39,9 @@ public JandexFieldDetails(
3339
this.fieldInfo = fieldInfo;
3440
this.declaringType = declaringType;
3541
this.type = buildingContext.getClassDetailsRegistry().resolveClassDetails( fieldInfo.type().name().toString() );
42+
43+
this.isArray = fieldInfo.type().kind() == Type.Kind.ARRAY;
44+
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
3645
}
3746

3847
@Override
@@ -55,6 +64,16 @@ public ClassDetails getDeclaringType() {
5564
return declaringType;
5665
}
5766

67+
@Override
68+
public boolean isPlural() {
69+
return isPlural;
70+
}
71+
72+
@Override
73+
public boolean isArray() {
74+
return isArray;
75+
}
76+
5877
@Override
5978
public int getModifiers() {
6079
return fieldInfo.flags();

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
import java.lang.reflect.Method;
1010
import java.util.ArrayList;
11+
import java.util.Collection;
1112
import java.util.List;
1213
import java.util.Locale;
14+
import java.util.Map;
1315

1416
import org.hibernate.models.internal.MutableMemberDetails;
1517
import org.hibernate.models.spi.ClassDetails;
@@ -33,6 +35,9 @@ public class JandexMethodDetails extends AbstractAnnotationTarget implements Met
3335
private final ClassDetails returnType;
3436
private final List<ClassDetails> argumentTypes;
3537

38+
private final boolean isArray;
39+
private final boolean isPlural;
40+
3641
public JandexMethodDetails(
3742
MethodInfo methodInfo,
3843
MethodKind methodKind,
@@ -52,6 +57,15 @@ public JandexMethodDetails(
5257
for ( int i = 0; i < methodInfo.parametersCount(); i++ ) {
5358
argumentTypes.add( classDetailsRegistry.resolveClassDetails( methodInfo.parameterType( i ).name().toString() ) );
5459
}
60+
61+
if ( type != null ) {
62+
this.isArray = methodInfo.returnType().kind() == Type.Kind.ARRAY;
63+
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
64+
}
65+
else {
66+
this.isArray = false;
67+
this.isPlural = false;
68+
}
5569
}
5670

5771
@Override
@@ -79,6 +93,16 @@ public ClassDetails getDeclaringType() {
7993
return declaringType;
8094
}
8195

96+
@Override
97+
public boolean isPlural() {
98+
return isPlural;
99+
}
100+
101+
@Override
102+
public boolean isArray() {
103+
return isArray;
104+
}
105+
82106
@Override
83107
public int getModifiers() {
84108
return methodInfo.flags();

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
package org.hibernate.models.internal.jandex;
88

99
import java.lang.reflect.Member;
10+
import java.util.Collection;
11+
import java.util.Map;
1012

1113
import org.hibernate.models.internal.MutableMemberDetails;
1214
import org.hibernate.models.spi.ClassDetails;
@@ -15,6 +17,7 @@
1517

1618
import org.jboss.jandex.AnnotationTarget;
1719
import org.jboss.jandex.RecordComponentInfo;
20+
import org.jboss.jandex.Type;
1821

1922
/**
2023
* @author Steve Ebersole
@@ -24,6 +27,9 @@ public class JandexRecordComponentDetails extends AbstractAnnotationTarget imple
2427
private final ClassDetails type;
2528
private final ClassDetails declaringType;
2629

30+
private final boolean isArray;
31+
private final boolean isPlural;
32+
2733
public JandexRecordComponentDetails(
2834
RecordComponentInfo recordComponentInfo,
2935
ClassDetails declaringType,
@@ -32,6 +38,9 @@ public JandexRecordComponentDetails(
3238
this.recordComponentInfo = recordComponentInfo;
3339
this.declaringType = declaringType;
3440
this.type = buildingContext.getClassDetailsRegistry().resolveClassDetails( recordComponentInfo.type().name().toString() );
41+
42+
this.isArray = recordComponentInfo.type().kind() == Type.Kind.ARRAY;
43+
this.isPlural = isArray || type.isImplementor( Collection.class ) || type.isImplementor( Map.class );
3544
}
3645

3746
@Override
@@ -54,6 +63,16 @@ public ClassDetails getDeclaringType() {
5463
return declaringType;
5564
}
5665

66+
@Override
67+
public boolean isPlural() {
68+
return isPlural;
69+
}
70+
71+
@Override
72+
public boolean isArray() {
73+
return isArray;
74+
}
75+
5776
@Override
5877
public int getModifiers() {
5978
return recordComponentInfo.accessor().flags();

src/main/java/org/hibernate/models/internal/jdk/JdkFieldDetails.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
package org.hibernate.models.internal.jdk;
88

99
import java.lang.reflect.Field;
10-
import java.lang.reflect.Member;
10+
import java.util.Collection;
11+
import java.util.Map;
1112

1213
import org.hibernate.models.internal.MutableMemberDetails;
1314
import org.hibernate.models.spi.ClassDetails;
@@ -23,6 +24,9 @@ public class JdkFieldDetails extends AbstractAnnotationTarget implements FieldDe
2324
private final JdkClassDetails declaringType;
2425
private final ClassDetails type;
2526

27+
private final boolean isArray;
28+
private final boolean isPlural;
29+
2630
public JdkFieldDetails(Field field, JdkClassDetails declaringType, SourceModelBuildingContext buildingContext) {
2731
super( field::getAnnotations, buildingContext );
2832
this.field = field;
@@ -31,6 +35,11 @@ public JdkFieldDetails(Field field, JdkClassDetails declaringType, SourceModelBu
3135
field.getType().getName(),
3236
(n) -> JdkBuilders.buildClassDetailsStatic( field.getType(), getBuildingContext() )
3337
);
38+
39+
this.isArray = field.getType().isArray();
40+
this.isPlural = isArray
41+
|| Collection.class.isAssignableFrom( field.getType() )
42+
|| Map.class.isAssignableFrom( field.getType() );
3443
}
3544

3645
@Override
@@ -53,6 +62,16 @@ public Field toJavaMember() {
5362
return field;
5463
}
5564

65+
@Override
66+
public boolean isPlural() {
67+
return isPlural;
68+
}
69+
70+
@Override
71+
public boolean isArray() {
72+
return isArray;
73+
}
74+
5675
@Override
5776
public int getModifiers() {
5877
return field.getModifiers();

0 commit comments

Comments
 (0)