Align RuntimeHintsPredicates with new FieldMode
Closes gh-29063
This commit is contained in:
@@ -44,7 +44,7 @@ public enum FieldMode {
|
||||
* @param other the other mode to check
|
||||
* @return {@code true} if this mode includes the other mode
|
||||
*/
|
||||
boolean includes(@Nullable FieldMode other) {
|
||||
public boolean includes(@Nullable FieldMode other) {
|
||||
return (other == null || this.ordinal() >= other.ordinal());
|
||||
}
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@ public class ReflectionHintsPredicates {
|
||||
|
||||
private final Field field;
|
||||
|
||||
private boolean allowWrite;
|
||||
private FieldMode mode = FieldMode.READ;
|
||||
|
||||
private boolean allowUnsafeAccess;
|
||||
|
||||
@@ -364,12 +364,35 @@ public class ReflectionHintsPredicates {
|
||||
* Refine the current predicate to match if write access is allowed on the field.
|
||||
* @return the refined {@link RuntimeHints} predicate
|
||||
* @see FieldHint#isAllowWrite()
|
||||
* @deprecated in favor of {@link #withReadMode()} or {@link #withWriteMode()}
|
||||
*/
|
||||
@Deprecated
|
||||
public FieldHintPredicate allowWrite() {
|
||||
this.allowWrite = true;
|
||||
this.mode = FieldMode.WRITE;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Refine the current predicate to match if read access is allowed on the field.
|
||||
* @return the refined {@link RuntimeHints} predicate
|
||||
* @see FieldHint#getMode()
|
||||
*/
|
||||
public FieldHintPredicate withReadMode() {
|
||||
// FieldMode.READ is already the default and should not override a writeMode() call.
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Refine the current predicate to match if write access is allowed on the field.
|
||||
* @return the refined {@link RuntimeHints} predicate
|
||||
* @see FieldHint#getMode()
|
||||
*/
|
||||
public FieldHintPredicate withWriteMode() {
|
||||
this.mode = FieldMode.WRITE;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Refine the current predicate to match if unsafe access is allowed on the field.
|
||||
* @return the refined {@link RuntimeHints} predicate
|
||||
@@ -402,7 +425,7 @@ public class ReflectionHintsPredicates {
|
||||
private boolean exactMatch(TypeHint typeHint) {
|
||||
return typeHint.fields().anyMatch(fieldHint ->
|
||||
this.field.getName().equals(fieldHint.getName())
|
||||
&& (!this.allowWrite || fieldHint.getMode() == FieldMode.WRITE)
|
||||
&& (fieldHint.getMode().includes(this.mode))
|
||||
&& (!this.allowUnsafeAccess || this.allowUnsafeAccess == fieldHint.isAllowUnsafeAccess()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@ class ReflectionHintsPredicatesTests {
|
||||
void fieldWriteReflectionDoesNotMatchFieldHint() {
|
||||
runtimeHints.reflection().registerType(SampleClass.class, typeHint -> typeHint.withField("publicField",
|
||||
FieldMode.READ));
|
||||
assertPredicateDoesNotMatch(reflection.onField(SampleClass.class, "publicField").allowWrite());
|
||||
assertPredicateDoesNotMatch(reflection.onField(SampleClass.class, "publicField").withWriteMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -465,7 +465,7 @@ class ReflectionHintsPredicatesTests {
|
||||
void fieldWriteReflectionMatchesFieldHintWithWrite() {
|
||||
runtimeHints.reflection().registerType(SampleClass.class, typeHint ->
|
||||
typeHint.withField("publicField", FieldMode.WRITE));
|
||||
assertPredicateMatches(reflection.onField(SampleClass.class, "publicField").allowWrite());
|
||||
assertPredicateMatches(reflection.onField(SampleClass.class, "publicField").withWriteMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user