From 0cc0e2f5a18396541b36c1845017865fa4694fad Mon Sep 17 00:00:00 2001 From: mshanemc Date: Tue, 1 Jul 2025 09:07:14 -0500 Subject: [PATCH] fix: reorder memberDeclaration alternatives to prioritize class/interface/enum over fields This fixes an issue where virtual inner classes were incorrectly parsed as fields, causing FieldModifierValidator to report 'Field cannot be declared as virtual' errors. The grammar now tries class/interface/enum declarations before field declarations, giving priority to specific keywords (CLASS, INTERFACE, ENUM) over the general typeRef pattern used in field declarations. Fixes: Virtual inner classes parsing issue (GUS W-18895431) Tests: All existing tests pass (72 NPM + 71 JVM) Verified: Virtual inner classes now parse correctly without errors --- antlr/BaseApexParser.g4 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/antlr/BaseApexParser.g4 b/antlr/BaseApexParser.g4 index 1307f4d..6129f6a 100644 --- a/antlr/BaseApexParser.g4 +++ b/antlr/BaseApexParser.g4 @@ -144,30 +144,30 @@ modifier memberDeclaration : methodDeclaration - | fieldDeclaration | constructorDeclaration | interfaceDeclaration | classDeclaration | enumDeclaration | propertyDeclaration + | fieldDeclaration ; triggerMemberDeclaration : methodDeclaration - | fieldDeclaration | interfaceDeclaration | classDeclaration | enumDeclaration | propertyDeclaration + | fieldDeclaration ; anonymousMemberDeclaration : methodDeclaration - | fieldDeclaration | interfaceDeclaration | classDeclaration | enumDeclaration | propertyDeclaration + | fieldDeclaration ; /* We use rule this even for void methods which cannot have [] after parameters.