Skip to content

Commit 823a50e

Browse files
committed
#32 - Fix bugs in MemberDetails#isPersistable implementations
1 parent 27fa329 commit 823a50e

File tree

6 files changed

+31
-18
lines changed

6 files changed

+31
-18
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static boolean isAbstract(int modifierFlags) {
9090
*
9191
* @see MemberDetails#isPersistable()
9292
*/
93-
public static boolean isPersistableField(int modifierFlags) {
93+
public static boolean hasPersistableFieldModifiers(int modifierFlags) {
9494
if ( isTransient( modifierFlags ) ) {
9595
return false;
9696
}
@@ -99,6 +99,10 @@ public static boolean isPersistableField(int modifierFlags) {
9999
return false;
100100
}
101101

102+
if ( ModifierUtils.isStatic( modifierFlags ) ) {
103+
return false;
104+
}
105+
102106
return true;
103107
}
104108

@@ -111,7 +115,7 @@ public static boolean isPersistableField(int modifierFlags) {
111115
*
112116
* @see MemberDetails#isPersistable()
113117
*/
114-
public static boolean isPersistableMethod(int modifierFlags) {
118+
public static boolean hasPersistableMethodModifiers(int modifierFlags) {
115119
if ( ModifierUtils.isStatic( modifierFlags ) ) {
116120
return false;
117121
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ default String resolveAttributeName() {
2626

2727
@Override
2828
default boolean isPersistable() {
29-
return ModifierUtils.isPersistableField( getModifiers() );
29+
return ModifierUtils.hasPersistableFieldModifiers( getModifiers() );
3030
}
3131
}

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

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import java.beans.Introspector;
1010
import java.util.List;
1111

12-
import static org.hibernate.models.internal.ModifierUtils.isPersistableMethod;
12+
import static org.hibernate.models.internal.ModifierUtils.hasPersistableMethodModifiers;
1313

1414
/**
1515
* Models a {@linkplain java.lang.reflect.Method method} in a {@linkplain ClassDetails class}.
@@ -36,19 +36,8 @@ default Kind getKind() {
3636

3737
@Override
3838
default boolean isPersistable() {
39-
if ( !getArgumentTypes().isEmpty() ) {
40-
// should be the getter
41-
return false;
42-
}
43-
44-
if ( getReturnType() == null
45-
|| "void".equals( getReturnType().getName() )
46-
|| "Void".equals( getReturnType().getName() ) ) {
47-
// again, should be the getter
48-
return false;
49-
}
50-
51-
return isPersistableMethod( getModifiers() );
39+
return getMethodKind() == MethodKind.GETTER
40+
&& hasPersistableMethodModifiers( getModifiers() );
5241
}
5342

5443
@Override

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ void verify(Index index) {
4747
.getClassDetailsRegistry()
4848
.findClassDetails( RandomClass.class.getName() );
4949
assertThat( classDetails ).isNotNull();
50-
assertThat( classDetails.getFields() ).hasSize( 10 );
50+
assertThat( classDetails.getFields() ).hasSize( 12 );
5151

5252
final FieldDetails propertyField = classDetails.findFieldByName( "property" );
5353
assertThat( propertyField.toJavaMember() ).isInstanceOf( Field.class );
@@ -121,6 +121,12 @@ void verify(Index index) {
121121
assertThat( intValueArrayField.isPersistable() ).isTrue();
122122
assertThat( intValueArrayField.getDeclaringType() ).isSameAs( classDetails );
123123

124+
final FieldDetails staticFieldField = classDetails.findFieldByName( "staticField" );
125+
assertThat( staticFieldField.isPersistable() ).isFalse();
126+
127+
final FieldDetails transientFieldField = classDetails.findFieldByName( "transientField" );
128+
assertThat( transientFieldField.isPersistable() ).isFalse();
129+
124130
classDetails.forEachField( (position, fieldDetails) -> {
125131
System.out.printf( " > Field (%s) : %s\n", position, fieldDetails );
126132
} );
@@ -139,5 +145,8 @@ public static class RandomClass {
139145
private double doubleValue;
140146
float floatValue;
141147
protected int[] intValueArray;
148+
149+
private static int staticField;
150+
private transient int transientField;
142151
}
143152
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,11 @@ else if ( method.getName().equals( "getIntArrayValue" ) ) {
149149
assertThat( method.isPersistable() ).isTrue();
150150
assertThat( method.getVisibility() ).isEqualTo( MemberDetails.Visibility.PUBLIC );
151151
}
152+
else if ( method.getName().equals( "somethingStatic" ) ) {
153+
assertThat( method.getMethodKind() ).isEqualTo( MethodDetails.MethodKind.OTHER );
154+
assertThat( method.isPersistable() ).isFalse();
155+
assertThat( method.getVisibility() ).isEqualTo( MemberDetails.Visibility.PUBLIC );
156+
}
152157
else {
153158
if ( ( (JdkMethodDetails) method ).getMethod().isSynthetic() ) {
154159
// ignore it
@@ -177,5 +182,7 @@ public void setProperty(Integer id) {}
177182

178183
public void nothing() {}
179184
public void something(Object stuff) {}
185+
186+
public static void somethingStatic() {}
180187
}
181188
}

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

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

1010
import org.hibernate.models.SourceModelTestHelper;
1111
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
12+
import org.hibernate.models.spi.AnnotationTarget;
1213
import org.hibernate.models.spi.ClassDetails;
1314
import org.hibernate.models.spi.RecordComponentDetails;
1415

@@ -48,6 +49,9 @@ void verify(Index index) {
4849

4950
for ( RecordComponentDetails recordComponent : classDetails.getRecordComponents() ) {
5051
assertThat( recordComponent.getDeclaringType() ).isSameAs( classDetails );
52+
assertThat( recordComponent.isPersistable() ).isTrue();
53+
assertThat( recordComponent.getKind() ).isEqualTo( AnnotationTarget.Kind.RECORD_COMPONENT );
54+
assertThat( recordComponent.resolveAttributeName() ).isEqualTo( recordComponent.getName() );
5155
}
5256
}
5357

0 commit comments

Comments
 (0)