From 289c78f4de40eb54129ebd95b36c0a3b41316465 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Sat, 10 Jan 2026 04:34:24 +0200 Subject: [PATCH] Proper TypeInfo getter for synthetic type members --- .../script/interpreter/ScriptDocument.java | 8 +++---- .../type/synthetic/SyntheticField.java | 12 ++++++++++ .../type/synthetic/SyntheticMethod.java | 24 +++++++++++++++++++ .../type/synthetic/SyntheticParameter.java | 15 ++++++++++++ .../type/synthetic/SyntheticType.java | 13 ++-------- 5 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java index 41378ea25..0765d9b06 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java @@ -2677,10 +2677,10 @@ public class ScriptDocument { // Check for dynamic return type resolution (like Java.type("className")) SyntheticMethod synMethod = syntheticType.getMethod(methodName); TypeInfo dynamicReturnType = null; - if (synMethod != null && synMethod.returnTypeResolver != null) { + if (synMethod != null) { String argsText = text.substring(openParen + 1, closeParen); String[] strArgs = TypeResolver.parseStringArguments(argsText); - dynamicReturnType = synMethod.returnTypeResolver.resolve(strArgs); + dynamicReturnType = synMethod.resolveReturnType(strArgs); } MethodCallInfo callInfo = new MethodCallInfo(methodName, nameStart, nameEnd, openParen, @@ -3553,9 +3553,9 @@ public class ScriptDocument { if (method != null) { // For methods with dynamic return type resolvers (like Java.type), // extract string arguments and resolve - if (method.returnTypeResolver != null && segment.arguments != null) { + if (segment.arguments != null) { String[] args = TypeResolver.parseStringArguments(segment.arguments); - TypeInfo resolved = method.returnTypeResolver.resolve(args); + TypeInfo resolved = method.resolveReturnType(args); if (resolved != null) { return resolved; } diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticField.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticField.java index 1f798e4f6..4bb2bc684 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticField.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticField.java @@ -19,6 +19,18 @@ public class SyntheticField { this.isStatic = isStatic; } + /** + * Get the field type as TypeInfo. + * @return The resolved TypeInfo for the field type, or unresolved if not found + */ + public TypeInfo getTypeInfo() { + TypeInfo type = TypeResolver.getInstance().resolve(typeName); + if (type == null) { + type = TypeInfo.unresolved(typeName, typeName); + } + return type; + } + public FieldInfo toFieldInfo() { TypeInfo type = TypeResolver.getInstance().resolve(typeName); if (type == null) { diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticMethod.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticMethod.java index 6bd554904..acae6098e 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticMethod.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticMethod.java @@ -32,6 +32,30 @@ public class SyntheticMethod { this.returnTypeResolver = returnTypeResolver; } + /** + * Get the return type as TypeInfo. + * @return The resolved TypeInfo for the return type, or unresolved if not found + */ + public TypeInfo getReturnTypeInfo() { + TypeInfo returnTypeInfo = TypeResolver.getInstance().resolve(returnType); + if (returnTypeInfo == null) { + returnTypeInfo = TypeInfo.unresolved(returnType, returnType); + } + return returnTypeInfo; + } + + /** + * Resolve the return type with dynamic arguments (for methods like Java.type). + * @param arguments The method call arguments + * @return The dynamically resolved TypeInfo, or static return type if no resolver + */ + public TypeInfo resolveReturnType(String[] arguments) { + if (returnTypeResolver != null) { + return returnTypeResolver.resolve(arguments); + } + return getReturnTypeInfo(); + } + /** * Create a MethodInfo from this synthetic method. */ diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticParameter.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticParameter.java index 9b58bebf3..bf9a5fe97 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticParameter.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticParameter.java @@ -1,5 +1,8 @@ package noppes.npcs.client.gui.util.script.interpreter.type.synthetic; +import noppes.npcs.client.gui.util.script.interpreter.type.TypeInfo; +import noppes.npcs.client.gui.util.script.interpreter.type.TypeResolver; + public class SyntheticParameter { public final String name; public final String typeName; @@ -10,4 +13,16 @@ public class SyntheticParameter { this.typeName = typeName; this.documentation = documentation; } + + /** + * Get the parameter type as TypeInfo. + * @return The resolved TypeInfo for the parameter type, or unresolved if not found + */ + public TypeInfo getTypeInfo() { + TypeInfo type = TypeResolver.getInstance().resolve(typeName); + if (type == null) { + type = TypeInfo.unresolved(typeName, typeName); + } + return type; + } } diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticType.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticType.java index 356891caf..01878d2f5 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticType.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/synthetic/SyntheticType.java @@ -2,12 +2,8 @@ package noppes.npcs.client.gui.util.script.interpreter.type.synthetic; import noppes.npcs.client.gui.util.script.interpreter.method.MethodInfo; import noppes.npcs.client.gui.util.script.interpreter.type.TypeInfo; -import noppes.npcs.client.gui.util.script.interpreter.type.TypeResolver; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Represents a fully-built synthetic type. @@ -94,11 +90,6 @@ public class SyntheticType { if (method == null) return null; - if (method.returnTypeResolver != null) { - return method.returnTypeResolver.resolve(arguments); - } - - // Fall back to static return type - return TypeResolver.getInstance().resolve(method.returnType); + return method.resolveReturnType(arguments); } }