Skip to content

Commit 6764285

Browse files
fix: include field annotations in AnnotatedType (#352)
* fix: include field annotations in AnnotatedType * combine annotations when FieldData is created * remove unused import
1 parent f5abc9c commit 6764285

4 files changed

Lines changed: 13 additions & 2 deletions

File tree

core/src/main/java/org/spongepowered/configurate/objectmapping/ObjectMapperFactoryImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static io.leangen.geantyref.GenericTypeReflector.erase;
2222
import static io.leangen.geantyref.GenericTypeReflector.isMissingTypeParameters;
2323
import static io.leangen.geantyref.GenericTypeReflector.isSuperType;
24+
import static io.leangen.geantyref.GenericTypeReflector.updateAnnotations;
2425
import static java.util.Objects.requireNonNull;
2526

2627
import io.leangen.geantyref.GenericTypeReflector;
@@ -215,7 +216,8 @@ private <I, O> void makeData(final List<FieldData<I, O>> fields, final String na
215216
}
216217
}
217218

218-
fields.add(FieldData.of(name, type, constraints, processors, deserializer, serializer, resolver));
219+
final AnnotatedType combinedType = updateAnnotations(type, container.getAnnotations());
220+
fields.add(FieldData.of(name, combinedType, constraints, processors, deserializer, serializer, resolver));
219221
}
220222

221223
// TypeSerializer //

core/src/test/java/org/spongepowered/configurate/objectmapping/ObjectMapperTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,8 @@ static class ConstructorTestB {
406406
static class TestAnnotatedTypes {
407407
@UpperCase String one;
408408
String two;
409+
@UpperCase.Field
410+
String three;
409411
}
410412

411413
@Test
@@ -419,12 +421,14 @@ void testAnnotatedTypes() throws SerializationException {
419421
node.act(n -> {
420422
n.node("one").set("hello");
421423
n.node("two").set("world");
424+
n.node("three").set("three");
422425
});
423426

424427
final TestAnnotatedTypes instance = node.require(TestAnnotatedTypes.class);
425428

426429
assertEquals("HELLO", instance.one);
427430
assertEquals("world", instance.two);
431+
assertEquals("THREE", instance.three);
428432
}
429433

430434
}

core/src/test/java/org/spongepowered/configurate/serialize/UpperCase.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@
2525
@Target(ElementType.TYPE_USE)
2626
public @interface UpperCase {
2727

28+
@Retention(RetentionPolicy.RUNTIME)
29+
@Target(ElementType.FIELD)
30+
@interface Field {
31+
}
32+
2833
}

core/src/test/java/org/spongepowered/configurate/serialize/UppercaseStringTypeSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public final class UppercaseStringTypeSerializer implements TypeSerializer<@Uppe
2828
public static final UppercaseStringTypeSerializer INSTANCE = new UppercaseStringTypeSerializer();
2929

3030
public static boolean applicable(final AnnotatedType type) {
31-
return type.isAnnotationPresent(UpperCase.class) && String.class.equals(type.getType());
31+
return (type.isAnnotationPresent(UpperCase.class) || type.isAnnotationPresent(UpperCase.Field.class)) && String.class.equals(type.getType());
3232
}
3333

3434
private UppercaseStringTypeSerializer() {

0 commit comments

Comments
 (0)