From 75c5637aa79dc5fdbcfd59fece4969c1bdaa36c5 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Fri, 2 Jan 2026 16:10:45 +0200 Subject: [PATCH] Added FieldInfo initStart/initEnd for enum constants --- .../interpreter/field/EnumConstantInfo.java | 65 ++++++++++--------- .../script/interpreter/field/FieldInfo.java | 6 +- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/EnumConstantInfo.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/EnumConstantInfo.java index 68b38c37f..3471d7ed5 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/EnumConstantInfo.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/EnumConstantInfo.java @@ -89,42 +89,49 @@ public class EnumConstantInfo { continue; } + // Determine init range (the constructor arguments) + int initStart = -1; + int initEnd = -1; + + // Create MethodCallInfo for constructor validation if args present + MethodCallInfo constructorCall = null; + if (argsClause != null && !argsClause.isEmpty()) { + initStart = bodyOffset + m.start(2); // Position of '(' + initEnd = bodyOffset + m.end(2) - 1; // Position after ')' + + constructorCall = createConstructorCall( + enumType, + constantName, + absPos, + initStart, + initEnd + ); + } else if (enumType.hasConstructors()) { + // No args provided, but enum has constructors - validate against no-arg constructor + initStart = absPos + constantName.length(); + initEnd = initStart; + + constructorCall = createConstructorCall( + enumType, + constantName, + absPos, + initStart, + initEnd + ); + } + + // Create FieldInfo for the enum constant FieldInfo fieldInfo = FieldInfo.enumConstant( constantName, enumType, absPos, args, - enumType + enumType, + initStart, + initEnd ); - - // Create MethodCallInfo for constructor validation if args present - MethodCallInfo constructorCall = null; - if (argsClause != null && !argsClause.isEmpty()) { - int openParenPos = bodyOffset + m.start(2); - int closeParenPos = bodyOffset + m.end(2) - 1; - - constructorCall = createConstructorCall( - enumType, - constantName, - absPos, - openParenPos, - closeParenPos - ); - } else if (enumType.hasConstructors()) { - // No args provided, but enum has constructors - validate against no-arg constructor - int openParenPos = absPos + constantName.length(); - int closeParenPos = openParenPos; - - constructorCall = createConstructorCall( - enumType, - constantName, - absPos, - openParenPos, - closeParenPos - ); - } - + EnumConstantInfo constantInfo = new EnumConstantInfo(fieldInfo, constructorCall, enumType); constants.add(constantInfo); diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java index 660dad234..d745b2d96 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java @@ -155,11 +155,13 @@ public final class FieldInfo { * @param declOffset The declaration position * @param args The constructor arguments (or null if no args) * @param containingEnum The enum type this constant belongs to + * @param initStart The position of '(' if args present, else -1 + * @param initEnd The position after ')' if args present, else -1 */ - public static FieldInfo enumConstant(String name, TypeInfo type, int declOffset, String args, TypeInfo containingEnum) { + public static FieldInfo enumConstant(String name, TypeInfo type, int declOffset, String args, TypeInfo containingEnum, int initStart, int initEnd) { // Enum constants are implicitly public static final int modifiers = Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL; - return new FieldInfo(name, Scope.ENUM_CONSTANT, type, declOffset, true, null, null, -1, -1, + return new FieldInfo(name, Scope.ENUM_CONSTANT, type, declOffset, true, null, null, initStart, initEnd, modifiers, null, args, containingEnum); }