Skip to content

Commit f857a91

Browse files
committed
#19 - Add MemberDetails#toJavaMember
1 parent d37c032 commit f857a91

File tree

12 files changed

+138
-0
lines changed

12 files changed

+138
-0
lines changed

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

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

9+
import java.lang.reflect.Member;
10+
911
import org.hibernate.models.internal.MutableMemberDetails;
1012
import org.hibernate.models.spi.ClassDetails;
1113
import org.hibernate.models.spi.FieldDetails;
@@ -53,6 +55,11 @@ public int getModifiers() {
5355
return modifierFlags;
5456
}
5557

58+
@Override
59+
public Member toJavaMember() {
60+
return null;
61+
}
62+
5663
@Override
5764
public String toString() {
5865
return "DynamicFieldDetails(" + name + ")";

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

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

9+
import java.lang.reflect.Member;
910
import java.util.List;
1011

1112
import org.hibernate.models.internal.ModifierUtils;
@@ -71,6 +72,11 @@ public int getModifiers() {
7172
return modifierFlags;
7273
}
7374

75+
@Override
76+
public Member toJavaMember() {
77+
return null;
78+
}
79+
7480
@Override
7581
public ClassDetails getReturnType() {
7682
return returnType;

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

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

9+
import java.lang.reflect.Member;
10+
911
import org.hibernate.models.internal.MutableMemberDetails;
1012
import org.hibernate.models.spi.ClassDetails;
1113
import org.hibernate.models.spi.FieldDetails;
@@ -60,6 +62,11 @@ public boolean isPersistable() {
6062
return true;
6163
}
6264

65+
@Override
66+
public Member toJavaMember() {
67+
return null;
68+
}
69+
6370
@Override
6471
public String toString() {
6572
return "MapModeFieldDetails(" + name + ")";

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
*/
77
package org.hibernate.models.internal.jandex;
88

9+
import java.lang.reflect.Field;
10+
import java.lang.reflect.Member;
11+
912
import org.hibernate.models.internal.MutableMemberDetails;
1013
import org.hibernate.models.spi.ClassDetails;
1114
import org.hibernate.models.spi.FieldDetails;
@@ -57,6 +60,33 @@ public int getModifiers() {
5760
return fieldInfo.flags();
5861
}
5962

63+
private Member underlyingMember;
64+
65+
@Override
66+
public Member toJavaMember() {
67+
if ( underlyingMember == null ) {
68+
underlyingMember = resolveJavaMember();
69+
}
70+
return underlyingMember;
71+
}
72+
73+
private Field resolveJavaMember() {
74+
final Class<?> declaringJavaClass = declaringType.toJavaClass();
75+
try {
76+
return declaringJavaClass.getField( fieldInfo.name() );
77+
}
78+
catch (NoSuchFieldException e) {
79+
throw new RuntimeException(
80+
String.format(
81+
"Jandex FieldInfo had no corresponding Field : %s.%s",
82+
declaringType.getName(),
83+
fieldInfo.name()
84+
),
85+
e
86+
);
87+
}
88+
}
89+
6090
@Override
6191
public String toString() {
6292
return "JandexFieldDetails(" + getName() + ")";

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

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

9+
import java.lang.reflect.Method;
910
import java.util.ArrayList;
1011
import java.util.List;
1112
import java.util.Locale;
@@ -18,6 +19,7 @@
1819

1920
import org.jboss.jandex.AnnotationTarget;
2021
import org.jboss.jandex.MethodInfo;
22+
import org.jboss.jandex.Type;
2123

2224
/**
2325
* @author Steve Ebersole
@@ -82,6 +84,47 @@ public int getModifiers() {
8284
return methodInfo.flags();
8385
}
8486

87+
private Method underlyingMethod;
88+
89+
@Override
90+
public Method toJavaMember() {
91+
if ( underlyingMethod == null ) {
92+
underlyingMethod = resolveJavaMember();
93+
}
94+
return underlyingMethod;
95+
}
96+
97+
private Method resolveJavaMember() {
98+
final Class<?> declaringTypeClass = declaringType.toJavaClass();
99+
methods: for ( Method method : declaringTypeClass.getDeclaredMethods() ) {
100+
if ( !method.getName().equals( methodInfo.name() ) ) {
101+
continue;
102+
}
103+
104+
if ( method.getParameterCount() != methodInfo.parametersCount() ) {
105+
continue;
106+
}
107+
108+
for ( int i = 0; i < method.getParameterTypes().length; i++ ) {
109+
final Class<?> methodParameterType = method.getParameterTypes()[i];
110+
final Type expectedType = methodInfo.parameterType( i );
111+
if ( !methodParameterType.getName().equals( expectedType.name().toString() ) ) {
112+
continue methods;
113+
}
114+
}
115+
116+
// if we get here, we've found it
117+
return method;
118+
}
119+
120+
throw new RuntimeException(
121+
String.format(
122+
"Jandex FieldInfo had no corresponding Field : %s.%s",
123+
declaringType.getName(),
124+
methodInfo.name()
125+
)
126+
); }
127+
85128
@Override
86129
public ClassDetails getReturnType() {
87130
return returnType;

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

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

9+
import java.lang.reflect.Member;
10+
911
import org.hibernate.models.internal.MutableMemberDetails;
1012
import org.hibernate.models.spi.ClassDetails;
1113
import org.hibernate.models.spi.RecordComponentDetails;
@@ -57,6 +59,12 @@ public int getModifiers() {
5759
return recordComponentInfo.accessor().flags();
5860
}
5961

62+
@Override
63+
public Member toJavaMember() {
64+
// we could maybe resolve the corresponding method...
65+
return null;
66+
}
67+
6068
@Override
6169
public String toString() {
6270
return "JandexFieldDetails(" + getName() + ")";

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

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

99
import java.lang.reflect.Field;
10+
import java.lang.reflect.Member;
1011

1112
import org.hibernate.models.internal.MutableMemberDetails;
1213
import org.hibernate.models.spi.ClassDetails;
@@ -47,6 +48,11 @@ public ClassDetails getDeclaringType() {
4748
return declaringType;
4849
}
4950

51+
@Override
52+
public Field toJavaMember() {
53+
return field;
54+
}
55+
5056
@Override
5157
public int getModifiers() {
5258
return field.getModifiers();

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.models.internal.jdk;
88

9+
import java.lang.reflect.Member;
910
import java.lang.reflect.Method;
1011
import java.util.ArrayList;
1112
import java.util.List;
@@ -75,6 +76,11 @@ public ClassDetails getDeclaringType() {
7576
return declaringType;
7677
}
7778

79+
@Override
80+
public Method toJavaMember() {
81+
return method;
82+
}
83+
7884
@Override
7985
public int getModifiers() {
8086
return method.getModifiers();

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
package org.hibernate.models.internal.jdk;
99

10+
import java.lang.reflect.Member;
1011
import java.lang.reflect.RecordComponent;
1112

1213
import org.hibernate.models.internal.MutableMemberDetails;
@@ -50,6 +51,12 @@ public ClassDetails getDeclaringType() {
5051
return declaringType;
5152
}
5253

54+
@Override
55+
public Member toJavaMember() {
56+
// we could maybe resolve the corresponding method...
57+
return null;
58+
}
59+
5360
@Override
5461
public int getModifiers() {
5562
return recordComponent.getAccessor().getModifiers();

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,15 @@ default boolean isField() {
113113
*/
114114
String resolveAttributeName();
115115

116+
/**
117+
* Access to the underlying {@linkplain Member}. May return {@code null}. May throw an exception.
118+
*
119+
* @return The underlying member, or {@code null} if there is no underlying member.
120+
*
121+
* @throws RuntimeException If there is expected to be a member, but it cannot be located.
122+
*/
123+
Member toJavaMember();
124+
116125
enum Visibility {
117126
PUBLIC,
118127
PROTECTED,

0 commit comments

Comments
 (0)