From 510422cab7d40699a86c12e42a538e7b64255f4f Mon Sep 17 00:00:00 2001 From: TopchetoEU <36534413+TopchetoEU@users.noreply.github.com> Date: Wed, 27 Mar 2024 23:39:33 +0200 Subject: [PATCH] feat: implement logic for exposing non-static fields --- .../utils/interop/NativeWrapperProvider.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java b/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java index b8f8001..da3f0ad 100644 --- a/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java +++ b/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java @@ -195,7 +195,24 @@ public class NativeWrapperProvider implements WrapperProvider { if (props.contains(key) || nonProps.contains(key)) repeat = true; else { try { - obj.defineProperty(null, key, Values.normalize(new Context(env), field.get(null)), true, true, false); + if (Modifier.isStatic(field.getModifiers())) { + obj.defineProperty(null, key, Values.normalize(new Context(env), field.get(null)), true, true, false); + } + else { + obj.defineProperty( + null, key, + new NativeFunction("get " + key, args -> { + try { return field.get(args.self(clazz)); } + catch (IllegalAccessException e) { e.printStackTrace(); return null; } + }), + Modifier.isFinal(field.getModifiers()) ? null : new NativeFunction("get " + key, args -> { + try { field.set(args.self(clazz), args.convert(0, field.getType())); } + catch (IllegalAccessException e) { e.printStackTrace(); } + return null; + }), + true, false + ); + } nonProps.add(key); } catch (IllegalArgumentException | IllegalAccessException e) { }