From 18e4a6c7ee7a95b95b0a674ee830ad25bdad88b1 Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Thu, 12 Dec 2019 10:24:11 +0100 Subject: [PATCH] [#1324] teach partial class extractor about fragment rules Signed-off-by: Christian Dietrich --- .../generator/PartialClassExtractorTest.xtend | 29 +++++++- .../generator/PartialClassExtractorTest.java | 70 ++++++++++++++++++- .../splitting/PartialClassExtractor.java | 2 +- 3 files changed, 98 insertions(+), 3 deletions(-) diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.xtend index e67b037fb..84e8e053c 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.xtend +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.xtend @@ -71,6 +71,12 @@ class PartialClassExtractorTest { } // $ANTLR end "ruleMySuperDuperEnum" + // $ANTLR start "ruleSuperDuperFragment" + // InternalMyDsl.g:17296:1: ruleSuperDuperFragment[EObject in_current] returns [EObject current=in_current] : (otherlv_0= '{' ( ( (lv_parameters_1_0= ruleCallParameter ) ) otherlv_2= ';' )* otherlv_3= '}' ) ; + public final EObject ruleSuperDuperFragment(EObject in_current) throws RecognitionException { + return null; + } + // $ANTLR end "ruleSuperDuperFragment" // Delegated rules } ''', @@ -95,6 +101,7 @@ class PartialClassExtractorTest { interface InternalMyDslParserSignatures { EObject ruleMySuperDuperObject() throws RecognitionException; Enumerator ruleMySuperDuperEnum() throws RecognitionException; + EObject ruleSuperDuperFragment(EObject in_current) throws RecognitionException; } @SuppressWarnings("all") @@ -157,7 +164,27 @@ class PartialClassExtractorTest { } - public class InternalMyDslParser extends InternalMyDslParser3 { + @SuppressWarnings("all") + abstract class InternalMyDslParser4 extends InternalMyDslParser3 { + + InternalMyDslParser4(TokenStream input) { + this(input, new RecognizerSharedState()); + } + + InternalMyDslParser4(TokenStream input, RecognizerSharedState state) { + super(input, state); + } + + // $ANTLR start "ruleSuperDuperFragment" + // InternalMyDsl.g:17296:1: ruleSuperDuperFragment[EObject in_current] returns [EObject current=in_current] : (otherlv_0= '{' ( ( (lv_parameters_1_0= ruleCallParameter ) ) otherlv_2= ';' )* otherlv_3= '}' ) ; + public final EObject ruleSuperDuperFragment(EObject in_current) throws RecognitionException { + return null; + } + // $ANTLR end "ruleSuperDuperFragment" + + } + + public class InternalMyDslParser extends InternalMyDslParser4 { public InternalMyDslParser(TokenStream input) { diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.java index df258422d..3d19b2971 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.java +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/generator/PartialClassExtractorTest.java @@ -155,6 +155,24 @@ public class PartialClassExtractorTest { _builder.append(" "); _builder.newLine(); _builder.append(" "); + _builder.append("// $ANTLR start \"ruleSuperDuperFragment\""); + _builder.newLine(); + _builder.append(" "); + _builder.append("// InternalMyDsl.g:17296:1: ruleSuperDuperFragment[EObject in_current] returns [EObject current=in_current] : (otherlv_0= \'{\' ( ( (lv_parameters_1_0= ruleCallParameter ) ) otherlv_2= \';\' )* otherlv_3= \'}\' ) ;"); + _builder.newLine(); + _builder.append(" "); + _builder.append("public final EObject ruleSuperDuperFragment(EObject in_current) throws RecognitionException {"); + _builder.newLine(); + _builder.append(" "); + _builder.append("return null;"); + _builder.newLine(); + _builder.append(" "); + _builder.append("}"); + _builder.newLine(); + _builder.append(" "); + _builder.append("// $ANTLR end \"ruleSuperDuperFragment\""); + _builder.newLine(); + _builder.append(" "); _builder.append("// Delegated rules"); _builder.newLine(); _builder.append("}"); @@ -201,6 +219,9 @@ public class PartialClassExtractorTest { _builder_1.append(" "); _builder_1.append("Enumerator ruleMySuperDuperEnum() throws RecognitionException;"); _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("EObject ruleSuperDuperFragment(EObject in_current) throws RecognitionException;"); + _builder_1.newLine(); _builder_1.append("}"); _builder_1.newLine(); _builder_1.newLine(); @@ -341,7 +362,54 @@ public class PartialClassExtractorTest { _builder_1.append("}"); _builder_1.newLine(); _builder_1.newLine(); - _builder_1.append("public class InternalMyDslParser extends InternalMyDslParser3 {"); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("abstract class InternalMyDslParser4 extends InternalMyDslParser3 {"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("InternalMyDslParser4(TokenStream input) {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("this(input, new RecognizerSharedState());"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("InternalMyDslParser4(TokenStream input, RecognizerSharedState state) {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(input, state);"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("// $ANTLR start \"ruleSuperDuperFragment\""); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("// InternalMyDsl.g:17296:1: ruleSuperDuperFragment[EObject in_current] returns [EObject current=in_current] : (otherlv_0= \'{\' ( ( (lv_parameters_1_0= ruleCallParameter ) ) otherlv_2= \';\' )* otherlv_3= \'}\' ) ;"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public final EObject ruleSuperDuperFragment(EObject in_current) throws RecognitionException {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return null;"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("// $ANTLR end \"ruleSuperDuperFragment\""); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("public class InternalMyDslParser extends InternalMyDslParser4 {"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append(" "); diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/splitting/PartialClassExtractor.java b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/splitting/PartialClassExtractor.java index 4367b0bc0..64af1cb2d 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/splitting/PartialClassExtractor.java +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/splitting/PartialClassExtractor.java @@ -32,7 +32,7 @@ public class PartialClassExtractor { private final String content; private final String originalContent; - private static final Pattern SIGNATURE = Pattern.compile("^\\s*public final (void|EObject|Enumerator|AntlrDatatypeRuleToken|Boolean) \\S*\\(\\) throws RecognitionException \\{\\s*$"); + private static final Pattern SIGNATURE = Pattern.compile("^\\s*public final (void|EObject|Enumerator|AntlrDatatypeRuleToken|Boolean) \\S*\\((EObject in_current)?\\) throws RecognitionException \\{\\s*$"); private static final String ANTLR_END_MARKER = " // $ANTLR end "; private static final String ANTLR_START_MARKER = " // $ANTLR start ";