From 130de2d30de345c5b085cddad1d64a6730c236e0 Mon Sep 17 00:00:00 2001 From: mibers Date: Sun, 24 Aug 2025 23:58:24 +0100 Subject: [PATCH 1/2] allow single Object fields to accept any type in acceptChange --- .../sovdee/oopsk/elements/expressions/ExprFieldAccess.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java b/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java index 1308c1e..6ab01c7 100644 --- a/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java +++ b/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java @@ -177,6 +177,11 @@ protected Object[] get(Event event, Struct[] source) { // return all return types return Arrays.stream(returnTypes).map(Class::arrayType).toArray(Class[]::new); + // if a field is single and object, it should allow object stuff + if (isAnyFieldSingle && returnType == Object.class) { + return new Class[]{Object.class}; + } + // if the mode is set, always allow changes if (mode == ChangeMode.SET) // return all return types From 7c1eea7dff75bdd282b4445a2f6e27b6ec4a4a61 Mon Sep 17 00:00:00 2001 From: mibers Date: Mon, 25 Aug 2025 19:54:51 +0100 Subject: [PATCH 2/2] move Object check under the existing isAnyFieldSingle check --- .../oopsk/elements/expressions/ExprFieldAccess.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java b/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java index 6ab01c7..4569f4e 100644 --- a/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java +++ b/src/main/java/com/sovdee/oopsk/elements/expressions/ExprFieldAccess.java @@ -177,11 +177,6 @@ protected Object[] get(Event event, Struct[] source) { // return all return types return Arrays.stream(returnTypes).map(Class::arrayType).toArray(Class[]::new); - // if a field is single and object, it should allow object stuff - if (isAnyFieldSingle && returnType == Object.class) { - return new Class[]{Object.class}; - } - // if the mode is set, always allow changes if (mode == ChangeMode.SET) // return all return types @@ -189,6 +184,11 @@ protected Object[] get(Event event, Struct[] source) { // if we have a single field, we can delegate to that type's changer, so get all the classes from the changers if (isAnyFieldSingle) { + // if a field is single and object, it should accept all changers + if (returnType == Object.class) { + return new Class[]{Object.class}; + } + Set> distinctClasses = Arrays.stream(returnTypes) .map(Classes::getSuperClassInfo) .filter(Objects::nonNull)