From e94bb9581a936c2efac680ec6d2fa0286ce3f7dc Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Tue, 26 Jul 2016 06:36:09 +0200 Subject: [PATCH 1/2] extended test language to feature non self contained cross references #20 Signed-off-by: Christian Dietrich --- .../model/generated/TestLanguage.ecore | 1 + .../model/generated/TestLanguage.genmodel | 1 + .../ide/tests/server/FormattingTest.xtend | 1 - .../services/org.eclipse.xtext.ISetup | 0 .../tests/testlanguage/TestLanguage.xtextbin | Bin 2238 -> 2307 bytes .../antlr/TestLanguageParser.java | 4 +- .../antlr/internal/InternalTestLanguage.g | 122 +++- .../internal/InternalTestLanguage.tokens | 6 +- .../internal/InternalTestLanguageLexer.java | 263 ++++--- .../internal/InternalTestLanguageParser.java | 673 +++++++++++++----- .../antlr/internal/InternalTestLanguage.g | 33 +- .../internal/InternalTestLanguage.tokens | 16 +- .../internal/InternalTestLanguageLexer.java | 311 ++++---- .../internal/InternalTestLanguageParser.java | 294 ++++---- .../TestLanguageSemanticSequencer.java | 2 +- .../services/TestLanguageGrammarAccess.java | 42 +- .../testLanguage/TestLanguagePackage.java | 32 +- .../testLanguage/TypeDeclaration.java | 27 + .../impl/TestLanguagePackageImpl.java | 14 +- .../impl/TypeDeclarationImpl.java | 65 ++ .../ide/tests/testlanguage/TestLanguage.xtext | 2 +- .../formatting2/TestLanguageFormatter.xtend | 8 +- .../formatting2/TestLanguageFormatter.java | 16 +- 23 files changed, 1316 insertions(+), 617 deletions(-) rename org.eclipse.xtext.ide.tests/{testlang-src => testlang-src-gen}/META-INF/services/org.eclipse.xtext.ISetup (100%) diff --git a/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.ecore b/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.ecore index 39382a83f..a7d4999f0 100644 --- a/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.ecore +++ b/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.ecore @@ -8,6 +8,7 @@ + diff --git a/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel b/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel index 43478760a..5ccdeac7c 100644 --- a/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel +++ b/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel @@ -11,6 +11,7 @@ + diff --git a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/FormattingTest.xtend b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/FormattingTest.xtend index 0a1b7fe2a..566a6f413 100644 --- a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/FormattingTest.xtend +++ b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/FormattingTest.xtend @@ -9,7 +9,6 @@ package org.eclipse.xtext.ide.tests.server import io.typefox.lsapi.builders.RangeBuilder import org.eclipse.xtext.ide.server.formatting.FormattingService -import org.eclipse.xtext.testing.AbstractLanguageServerTest import org.junit.Test /** diff --git a/org.eclipse.xtext.ide.tests/testlang-src/META-INF/services/org.eclipse.xtext.ISetup b/org.eclipse.xtext.ide.tests/testlang-src-gen/META-INF/services/org.eclipse.xtext.ISetup similarity index 100% rename from org.eclipse.xtext.ide.tests/testlang-src/META-INF/services/org.eclipse.xtext.ISetup rename to org.eclipse.xtext.ide.tests/testlang-src-gen/META-INF/services/org.eclipse.xtext.ISetup diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtextbin b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtextbin index a2363a08256fb031a2592a39f450208492a04fc4..dd6c24082279c589674ad3fc4d5217d8f34e74db 100644 GIT binary patch delta 572 zcmY*WOHaZ;5O#Li79>>k=)sdGJn##MlX&t*jEM)L5p}^T-D0~S53wq~-wAj93;qIs zo3o{0=xIAM-)rV~ak%vJWr02VwpJsXv30?*29`+6j+W{u1gwK2=EGJ~2HV}Hv{=c; zW5_RT1b!H9$(jtLI+Q|aYN89A;SR@rurgW(o~x=2Jb?wV0`%c25wkvE102Q*BHIjn zqSdYpExuN=BlKt#735f^JZ^P4`Uz)~@j0F?7AGA@;ThOuHz0$teC#bW6q+c6vCFZQ zz}p6H7mKD!(DNAD0YL;^1L;97VvgxfLvidU;0puJkHOP6u?$E$ZIV+lR=pk3Ob4qR0Se59Y0 zt2E$~x!r;9H)K_rozvEzf$mzMoG+tFdU^BJ9HBz>H}lv{hTdl+KBle#Kh4-68QVjJ J8haFj!5=4{d>jA( delta 464 zcmY+Ay-ve05XU*Yc2ZT8j|IfQ!~{d00O??YtwKl)2-JYw*3dX1HHA`2f%3g(2OfbZ z;E8w$&P}L9Cg<*c|KHi8`R}=}cL_54kSjweSRb$fRmN6DB}wB%rBp%%l!4n+YP!+=V5+xZ$L@vTmgxIAL$GE@~hkNxP zaAji8#%v0L5;~5t#8h2#M>SNc%rU{|1>AM;Y|c*F6mmgo->IoMwqIsHa&fa)V0DmX ztI|lDu#HzFSqArE-}$bcua@daTisRpvV#J=$u|6jt)aV^38VaCx3p>r??4K#V^eLK zfcNxM(#8Ug=;R;8aa)CE>;QZK&%H6n$L!Nz+J2%5womeBcQ`19Uj8XwCo2NJxv@bp Mc8D!BXlZ8#zxk_Th5!Hn diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/TestLanguageParser.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/TestLanguageParser.java index 18631096c..4698678c8 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/TestLanguageParser.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/TestLanguageParser.java @@ -42,12 +42,14 @@ public class TestLanguageParser extends AbstractContentAssistParser { put(grammarAccess.getTypeAccess().getAlternatives_0(), "rule__Type__Alternatives_0"); put(grammarAccess.getPrimitiveTypeAccess().getNameAlternatives_0(), "rule__PrimitiveType__NameAlternatives_0"); put(grammarAccess.getTypeDeclarationAccess().getGroup(), "rule__TypeDeclaration__Group__0"); + put(grammarAccess.getTypeDeclarationAccess().getGroup_2(), "rule__TypeDeclaration__Group_2__0"); put(grammarAccess.getPropertyAccess().getGroup(), "rule__Property__Group__0"); put(grammarAccess.getTypeAccess().getGroup(), "rule__Type__Group__0"); put(grammarAccess.getTypeAccess().getGroup_1(), "rule__Type__Group_1__0"); put(grammarAccess.getModelAccess().getTypesAssignment(), "rule__Model__TypesAssignment"); put(grammarAccess.getTypeDeclarationAccess().getNameAssignment_1(), "rule__TypeDeclaration__NameAssignment_1"); - put(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_3(), "rule__TypeDeclaration__PropertiesAssignment_3"); + put(grammarAccess.getTypeDeclarationAccess().getSuperTypeAssignment_2_1(), "rule__TypeDeclaration__SuperTypeAssignment_2_1"); + put(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_4(), "rule__TypeDeclaration__PropertiesAssignment_4"); put(grammarAccess.getPropertyAccess().getTypeAssignment_0(), "rule__Property__TypeAssignment_0"); put(grammarAccess.getPropertyAccess().getNameAssignment_1(), "rule__Property__NameAssignment_1"); put(grammarAccess.getTypeAccess().getArrayDiemensionsAssignment_1_0(), "rule__Type__ArrayDiemensionsAssignment_1_0"); diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.g b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.g index 027de1e62..e6ff06c23 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.g +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.g @@ -323,9 +323,9 @@ rule__TypeDeclaration__Group__2__Impl } : ( - { before(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_2()); } - '{' - { after(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_2()); } + { before(grammarAccess.getTypeDeclarationAccess().getGroup_2()); } + (rule__TypeDeclaration__Group_2__0)? + { after(grammarAccess.getTypeDeclarationAccess().getGroup_2()); } ) ; finally { @@ -350,9 +350,9 @@ rule__TypeDeclaration__Group__3__Impl } : ( - { before(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_3()); } - (rule__TypeDeclaration__PropertiesAssignment_3)* - { after(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_3()); } + { before(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_3()); } + '{' + { after(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_3()); } ) ; finally { @@ -365,6 +365,7 @@ rule__TypeDeclaration__Group__4 } : rule__TypeDeclaration__Group__4__Impl + rule__TypeDeclaration__Group__5 ; finally { restoreStackSize(stackSize); @@ -376,9 +377,89 @@ rule__TypeDeclaration__Group__4__Impl } : ( - { before(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_4()); } + { before(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_4()); } + (rule__TypeDeclaration__PropertiesAssignment_4)* + { after(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_4()); } +) +; +finally { + restoreStackSize(stackSize); +} + +rule__TypeDeclaration__Group__5 + @init { + int stackSize = keepStackSize(); + } +: + rule__TypeDeclaration__Group__5__Impl +; +finally { + restoreStackSize(stackSize); +} + +rule__TypeDeclaration__Group__5__Impl + @init { + int stackSize = keepStackSize(); + } +: +( + { before(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_5()); } '}' - { after(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_4()); } + { after(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_5()); } +) +; +finally { + restoreStackSize(stackSize); +} + + +rule__TypeDeclaration__Group_2__0 + @init { + int stackSize = keepStackSize(); + } +: + rule__TypeDeclaration__Group_2__0__Impl + rule__TypeDeclaration__Group_2__1 +; +finally { + restoreStackSize(stackSize); +} + +rule__TypeDeclaration__Group_2__0__Impl + @init { + int stackSize = keepStackSize(); + } +: +( + { before(grammarAccess.getTypeDeclarationAccess().getExtendsKeyword_2_0()); } + 'extends' + { after(grammarAccess.getTypeDeclarationAccess().getExtendsKeyword_2_0()); } +) +; +finally { + restoreStackSize(stackSize); +} + +rule__TypeDeclaration__Group_2__1 + @init { + int stackSize = keepStackSize(); + } +: + rule__TypeDeclaration__Group_2__1__Impl +; +finally { + restoreStackSize(stackSize); +} + +rule__TypeDeclaration__Group_2__1__Impl + @init { + int stackSize = keepStackSize(); + } +: +( + { before(grammarAccess.getTypeDeclarationAccess().getSuperTypeAssignment_2_1()); } + (rule__TypeDeclaration__SuperTypeAssignment_2_1) + { after(grammarAccess.getTypeDeclarationAccess().getSuperTypeAssignment_2_1()); } ) ; finally { @@ -578,15 +659,34 @@ finally { restoreStackSize(stackSize); } -rule__TypeDeclaration__PropertiesAssignment_3 +rule__TypeDeclaration__SuperTypeAssignment_2_1 @init { int stackSize = keepStackSize(); } : ( - { before(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_3_0()); } + { before(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationCrossReference_2_1_0()); } + ( + { before(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1()); } + RULE_ID + { after(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1()); } + ) + { after(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationCrossReference_2_1_0()); } + ) +; +finally { + restoreStackSize(stackSize); +} + +rule__TypeDeclaration__PropertiesAssignment_4 + @init { + int stackSize = keepStackSize(); + } +: + ( + { before(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_4_0()); } ruleProperty - { after(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_3_0()); } + { after(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_4_0()); } ) ; finally { diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.tokens b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.tokens index 67a2c429c..7252451e0 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.tokens +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguage.tokens @@ -1,6 +1,7 @@ -'['=18 -']'=17 +'['=19 +']'=18 'boolean'=13 +'extends'=17 'int'=12 'string'=11 'type'=14 @@ -21,3 +22,4 @@ T__15=15 T__16=16 T__17=17 T__18=18 +T__19=19 diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageLexer.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageLexer.java index 804b6eca5..25185df75 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageLexer.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageLexer.java @@ -12,22 +12,23 @@ import java.util.ArrayList; @SuppressWarnings("all") public class InternalTestLanguageLexer extends Lexer { - public static final int RULE_ID=4; - public static final int RULE_WS=9; public static final int RULE_STRING=6; - public static final int RULE_ANY_OTHER=10; public static final int RULE_SL_COMMENT=8; + public static final int T__19=19; public static final int T__15=15; public static final int T__16=16; public static final int T__17=17; - public static final int RULE_INT=5; public static final int T__18=18; public static final int T__11=11; - public static final int RULE_ML_COMMENT=7; public static final int T__12=12; public static final int T__13=13; public static final int T__14=14; public static final int EOF=-1; + public static final int RULE_ID=4; + public static final int RULE_WS=9; + public static final int RULE_ANY_OTHER=10; + public static final int RULE_INT=5; + public static final int RULE_ML_COMMENT=7; // delegates // delegators @@ -171,10 +172,11 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__17; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:17:7: ( ']' ) - // InternalTestLanguage.g:17:9: ']' + // InternalTestLanguage.g:17:7: ( 'extends' ) + // InternalTestLanguage.g:17:9: 'extends' { - match(']'); + match("extends"); + } @@ -191,10 +193,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__18; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:18:7: ( '[' ) - // InternalTestLanguage.g:18:9: '[' + // InternalTestLanguage.g:18:7: ( ']' ) + // InternalTestLanguage.g:18:9: ']' { - match('['); + match(']'); } @@ -206,15 +208,35 @@ public class InternalTestLanguageLexer extends Lexer { } // $ANTLR end "T__18" + // $ANTLR start "T__19" + public final void mT__19() throws RecognitionException { + try { + int _type = T__19; + int _channel = DEFAULT_TOKEN_CHANNEL; + // InternalTestLanguage.g:19:7: ( '[' ) + // InternalTestLanguage.g:19:9: '[' + { + match('['); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__19" + // $ANTLR start "RULE_ID" public final void mRULE_ID() throws RecognitionException { try { int _type = RULE_ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:679:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) - // InternalTestLanguage.g:679:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + // InternalTestLanguage.g:779:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // InternalTestLanguage.g:779:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* { - // InternalTestLanguage.g:679:11: ( '^' )? + // InternalTestLanguage.g:779:11: ( '^' )? int alt1=2; int LA1_0 = input.LA(1); @@ -223,7 +245,7 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt1) { case 1 : - // InternalTestLanguage.g:679:11: '^' + // InternalTestLanguage.g:779:11: '^' { match('^'); @@ -241,7 +263,7 @@ public class InternalTestLanguageLexer extends Lexer { recover(mse); throw mse;} - // InternalTestLanguage.g:679:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + // InternalTestLanguage.g:779:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* loop2: do { int alt2=2; @@ -290,10 +312,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_INT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:681:10: ( ( '0' .. '9' )+ ) - // InternalTestLanguage.g:681:12: ( '0' .. '9' )+ + // InternalTestLanguage.g:781:10: ( ( '0' .. '9' )+ ) + // InternalTestLanguage.g:781:12: ( '0' .. '9' )+ { - // InternalTestLanguage.g:681:12: ( '0' .. '9' )+ + // InternalTestLanguage.g:781:12: ( '0' .. '9' )+ int cnt3=0; loop3: do { @@ -307,7 +329,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt3) { case 1 : - // InternalTestLanguage.g:681:13: '0' .. '9' + // InternalTestLanguage.g:781:13: '0' .. '9' { matchRange('0','9'); @@ -339,10 +361,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_STRING; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:683:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) ) - // InternalTestLanguage.g:683:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) + // InternalTestLanguage.g:783:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) ) + // InternalTestLanguage.g:783:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) { - // InternalTestLanguage.g:683:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) + // InternalTestLanguage.g:783:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) int alt6=2; int LA6_0 = input.LA(1); @@ -360,10 +382,10 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt6) { case 1 : - // InternalTestLanguage.g:683:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' + // InternalTestLanguage.g:783:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' { match('\"'); - // InternalTestLanguage.g:683:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* + // InternalTestLanguage.g:783:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* loop4: do { int alt4=3; @@ -379,7 +401,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt4) { case 1 : - // InternalTestLanguage.g:683:21: '\\\\' . + // InternalTestLanguage.g:783:21: '\\\\' . { match('\\'); matchAny(); @@ -387,7 +409,7 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 2 : - // InternalTestLanguage.g:683:28: ~ ( ( '\\\\' | '\"' ) ) + // InternalTestLanguage.g:783:28: ~ ( ( '\\\\' | '\"' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -412,10 +434,10 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 2 : - // InternalTestLanguage.g:683:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' + // InternalTestLanguage.g:783:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' { match('\''); - // InternalTestLanguage.g:683:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* + // InternalTestLanguage.g:783:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* loop5: do { int alt5=3; @@ -431,7 +453,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt5) { case 1 : - // InternalTestLanguage.g:683:54: '\\\\' . + // InternalTestLanguage.g:783:54: '\\\\' . { match('\\'); matchAny(); @@ -439,7 +461,7 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 2 : - // InternalTestLanguage.g:683:61: ~ ( ( '\\\\' | '\\'' ) ) + // InternalTestLanguage.g:783:61: ~ ( ( '\\\\' | '\\'' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -482,12 +504,12 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_ML_COMMENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:685:17: ( '/*' ( options {greedy=false; } : . )* '*/' ) - // InternalTestLanguage.g:685:19: '/*' ( options {greedy=false; } : . )* '*/' + // InternalTestLanguage.g:785:17: ( '/*' ( options {greedy=false; } : . )* '*/' ) + // InternalTestLanguage.g:785:19: '/*' ( options {greedy=false; } : . )* '*/' { match("/*"); - // InternalTestLanguage.g:685:24: ( options {greedy=false; } : . )* + // InternalTestLanguage.g:785:24: ( options {greedy=false; } : . )* loop7: do { int alt7=2; @@ -512,7 +534,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt7) { case 1 : - // InternalTestLanguage.g:685:52: . + // InternalTestLanguage.g:785:52: . { matchAny(); @@ -542,12 +564,12 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_SL_COMMENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:687:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? ) - // InternalTestLanguage.g:687:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? + // InternalTestLanguage.g:787:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? ) + // InternalTestLanguage.g:787:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? { match("//"); - // InternalTestLanguage.g:687:24: (~ ( ( '\\n' | '\\r' ) ) )* + // InternalTestLanguage.g:787:24: (~ ( ( '\\n' | '\\r' ) ) )* loop8: do { int alt8=2; @@ -560,7 +582,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt8) { case 1 : - // InternalTestLanguage.g:687:24: ~ ( ( '\\n' | '\\r' ) ) + // InternalTestLanguage.g:787:24: ~ ( ( '\\n' | '\\r' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -580,7 +602,7 @@ public class InternalTestLanguageLexer extends Lexer { } } while (true); - // InternalTestLanguage.g:687:40: ( ( '\\r' )? '\\n' )? + // InternalTestLanguage.g:787:40: ( ( '\\r' )? '\\n' )? int alt10=2; int LA10_0 = input.LA(1); @@ -589,9 +611,9 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt10) { case 1 : - // InternalTestLanguage.g:687:41: ( '\\r' )? '\\n' + // InternalTestLanguage.g:787:41: ( '\\r' )? '\\n' { - // InternalTestLanguage.g:687:41: ( '\\r' )? + // InternalTestLanguage.g:787:41: ( '\\r' )? int alt9=2; int LA9_0 = input.LA(1); @@ -600,7 +622,7 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt9) { case 1 : - // InternalTestLanguage.g:687:41: '\\r' + // InternalTestLanguage.g:787:41: '\\r' { match('\r'); @@ -632,10 +654,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:689:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // InternalTestLanguage.g:689:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // InternalTestLanguage.g:789:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // InternalTestLanguage.g:789:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // InternalTestLanguage.g:689:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // InternalTestLanguage.g:789:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt11=0; loop11: do { @@ -689,8 +711,8 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_ANY_OTHER; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:691:16: ( . ) - // InternalTestLanguage.g:691:18: . + // InternalTestLanguage.g:791:16: ( . ) + // InternalTestLanguage.g:791:18: . { matchAny(); @@ -705,8 +727,8 @@ public class InternalTestLanguageLexer extends Lexer { // $ANTLR end "RULE_ANY_OTHER" public void mTokens() throws RecognitionException { - // InternalTestLanguage.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER ) - int alt12=15; + // InternalTestLanguage.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER ) + int alt12=16; alt12 = dfa12.predict(input); switch (alt12) { case 1 : @@ -766,49 +788,56 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 9 : - // InternalTestLanguage.g:1:58: RULE_ID + // InternalTestLanguage.g:1:58: T__19 + { + mT__19(); + + } + break; + case 10 : + // InternalTestLanguage.g:1:64: RULE_ID { mRULE_ID(); } break; - case 10 : - // InternalTestLanguage.g:1:66: RULE_INT + case 11 : + // InternalTestLanguage.g:1:72: RULE_INT { mRULE_INT(); } break; - case 11 : - // InternalTestLanguage.g:1:75: RULE_STRING + case 12 : + // InternalTestLanguage.g:1:81: RULE_STRING { mRULE_STRING(); } break; - case 12 : - // InternalTestLanguage.g:1:87: RULE_ML_COMMENT + case 13 : + // InternalTestLanguage.g:1:93: RULE_ML_COMMENT { mRULE_ML_COMMENT(); } break; - case 13 : - // InternalTestLanguage.g:1:103: RULE_SL_COMMENT + case 14 : + // InternalTestLanguage.g:1:109: RULE_SL_COMMENT { mRULE_SL_COMMENT(); } break; - case 14 : - // InternalTestLanguage.g:1:119: RULE_WS + case 15 : + // InternalTestLanguage.g:1:125: RULE_WS { mRULE_WS(); } break; - case 15 : - // InternalTestLanguage.g:1:127: RULE_ANY_OTHER + case 16 : + // InternalTestLanguage.g:1:133: RULE_ANY_OTHER { mRULE_ANY_OTHER(); @@ -822,64 +851,72 @@ public class InternalTestLanguageLexer extends Lexer { protected DFA12 dfa12 = new DFA12(this); static final String DFA12_eotS = - "\1\uffff\4\22\4\uffff\1\20\2\uffff\3\20\2\uffff\1\22\1\uffff\3\22\11\uffff\1\22\1\44\3\22\1\uffff\1\22\1\51\2\22\1\uffff\1\54\1\22\1\uffff\1\56\1\uffff"; + "\1\uffff\4\23\2\uffff\1\23\2\uffff\1\21\2\uffff\3\21\2\uffff\1\23\1\uffff\3\23\2\uffff\1\23\7\uffff\1\23\1\47\4\23\1\uffff\1\23\1\55\3\23\1\uffff\1\23\1\62\2\23\1\uffff\1\65\1\66\2\uffff"; static final String DFA12_eofS = - "\57\uffff"; + "\67\uffff"; static final String DFA12_minS = - "\1\0\1\164\1\156\1\157\1\171\4\uffff\1\101\2\uffff\2\0\1\52\2\uffff\1\162\1\uffff\1\164\1\157\1\160\11\uffff\1\151\1\60\1\154\1\145\1\156\1\uffff\1\145\1\60\1\147\1\141\1\uffff\1\60\1\156\1\uffff\1\60\1\uffff"; + "\1\0\1\164\1\156\1\157\1\171\2\uffff\1\170\2\uffff\1\101\2\uffff\2\0\1\52\2\uffff\1\162\1\uffff\1\164\1\157\1\160\2\uffff\1\164\7\uffff\1\151\1\60\1\154\2\145\1\156\1\uffff\1\145\1\60\1\156\1\147\1\141\1\uffff\1\144\1\60\1\156\1\163\1\uffff\2\60\2\uffff"; static final String DFA12_maxS = - "\1\uffff\1\164\1\156\1\157\1\171\4\uffff\1\172\2\uffff\2\uffff\1\57\2\uffff\1\162\1\uffff\1\164\1\157\1\160\11\uffff\1\151\1\172\1\154\1\145\1\156\1\uffff\1\145\1\172\1\147\1\141\1\uffff\1\172\1\156\1\uffff\1\172\1\uffff"; + "\1\uffff\1\164\1\156\1\157\1\171\2\uffff\1\170\2\uffff\1\172\2\uffff\2\uffff\1\57\2\uffff\1\162\1\uffff\1\164\1\157\1\160\2\uffff\1\164\7\uffff\1\151\1\172\1\154\2\145\1\156\1\uffff\1\145\1\172\1\156\1\147\1\141\1\uffff\1\144\1\172\1\156\1\163\1\uffff\2\172\2\uffff"; static final String DFA12_acceptS = - "\5\uffff\1\5\1\6\1\7\1\10\1\uffff\1\11\1\12\3\uffff\1\16\1\17\1\uffff\1\11\3\uffff\1\5\1\6\1\7\1\10\1\12\1\13\1\14\1\15\1\16\5\uffff\1\2\4\uffff\1\4\2\uffff\1\1\1\uffff\1\3"; + "\5\uffff\1\5\1\6\1\uffff\1\10\1\11\1\uffff\1\12\1\13\3\uffff\1\17\1\20\1\uffff\1\12\3\uffff\1\5\1\6\1\uffff\1\10\1\11\1\13\1\14\1\15\1\16\1\17\6\uffff\1\2\5\uffff\1\4\4\uffff\1\1\2\uffff\1\3\1\7"; static final String DFA12_specialS = - "\1\1\13\uffff\1\2\1\0\41\uffff}>"; + "\1\1\14\uffff\1\0\1\2\50\uffff}>"; static final String[] DFA12_transitionS = { - "\11\20\2\17\2\20\1\17\22\20\1\17\1\20\1\14\4\20\1\15\7\20\1\16\12\13\7\20\32\12\1\10\1\20\1\7\1\11\1\12\1\20\1\12\1\3\6\12\1\2\11\12\1\1\1\4\6\12\1\5\1\20\1\6\uff82\20", - "\1\21", - "\1\23", + "\11\21\2\20\2\21\1\20\22\21\1\20\1\21\1\15\4\21\1\16\7\21\1\17\12\14\7\21\32\13\1\11\1\21\1\10\1\12\1\13\1\21\1\13\1\3\2\13\1\7\3\13\1\2\11\13\1\1\1\4\6\13\1\5\1\21\1\6\uff82\21", + "\1\22", "\1\24", "\1\25", + "\1\26", "", "", + "\1\31", "", "", - "\32\22\4\uffff\1\22\1\uffff\32\22", + "\32\23\4\uffff\1\23\1\uffff\32\23", "", "", - "\0\33", - "\0\33", - "\1\34\4\uffff\1\35", + "\0\35", + "\0\35", + "\1\36\4\uffff\1\37", "", "", - "\1\37", - "", - "\1\40", "\1\41", + "", "\1\42", - "", - "", - "", - "", - "", - "", - "", - "", - "", "\1\43", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", - "\1\45", - "\1\46", - "\1\47", + "\1\44", "", + "", + "\1\45", + "", + "", + "", + "", + "", + "", + "", + "\1\46", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", "\1\50", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", + "\1\51", "\1\52", "\1\53", "", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", - "\1\55", + "\1\54", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "\1\56", + "\1\57", + "\1\60", + "", + "\1\61", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "\1\63", + "\1\64", + "", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", "", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", "" }; @@ -913,7 +950,7 @@ public class InternalTestLanguageLexer extends Lexer { this.transition = DFA12_transition; } public String getDescription() { - return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );"; + return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { IntStream input = _input; @@ -923,9 +960,9 @@ public class InternalTestLanguageLexer extends Lexer { int LA12_13 = input.LA(1); s = -1; - if ( ((LA12_13>='\u0000' && LA12_13<='\uFFFF')) ) {s = 27;} + if ( ((LA12_13>='\u0000' && LA12_13<='\uFFFF')) ) {s = 29;} - else s = 16; + else s = 17; if ( s>=0 ) return s; break; @@ -945,35 +982,37 @@ public class InternalTestLanguageLexer extends Lexer { else if ( (LA12_0=='}') ) {s = 6;} - else if ( (LA12_0==']') ) {s = 7;} + else if ( (LA12_0=='e') ) {s = 7;} - else if ( (LA12_0=='[') ) {s = 8;} + else if ( (LA12_0==']') ) {s = 8;} - else if ( (LA12_0=='^') ) {s = 9;} + else if ( (LA12_0=='[') ) {s = 9;} - else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='a'||(LA12_0>='c' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='r')||(LA12_0>='u' && LA12_0<='z')) ) {s = 10;} + else if ( (LA12_0=='^') ) {s = 10;} - else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 11;} + else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='a'||(LA12_0>='c' && LA12_0<='d')||(LA12_0>='f' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='r')||(LA12_0>='u' && LA12_0<='z')) ) {s = 11;} - else if ( (LA12_0=='\"') ) {s = 12;} + else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 12;} - else if ( (LA12_0=='\'') ) {s = 13;} + else if ( (LA12_0=='\"') ) {s = 13;} - else if ( (LA12_0=='/') ) {s = 14;} + else if ( (LA12_0=='\'') ) {s = 14;} - else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 15;} + else if ( (LA12_0=='/') ) {s = 15;} - else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='.')||(LA12_0>=':' && LA12_0<='@')||LA12_0=='\\'||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 16;} + else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 16;} + + else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='.')||(LA12_0>=':' && LA12_0<='@')||LA12_0=='\\'||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 17;} if ( s>=0 ) return s; break; case 2 : - int LA12_12 = input.LA(1); + int LA12_14 = input.LA(1); s = -1; - if ( ((LA12_12>='\u0000' && LA12_12<='\uFFFF')) ) {s = 27;} + if ( ((LA12_14>='\u0000' && LA12_14<='\uFFFF')) ) {s = 29;} - else s = 16; + else s = 17; if ( s>=0 ) return s; break; diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageParser.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageParser.java index ee2c99ec0..5e1281373 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageParser.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/contentassist/antlr/internal/InternalTestLanguageParser.java @@ -22,24 +22,25 @@ import java.util.ArrayList; @SuppressWarnings("all") public class InternalTestLanguageParser extends AbstractInternalContentAssistParser { public static final String[] tokenNames = new String[] { - "", "", "", "", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'string'", "'int'", "'boolean'", "'type'", "'{'", "'}'", "']'", "'['" + "", "", "", "", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'string'", "'int'", "'boolean'", "'type'", "'{'", "'}'", "'extends'", "']'", "'['" }; - public static final int RULE_ID=4; - public static final int RULE_WS=9; public static final int RULE_STRING=6; - public static final int RULE_ANY_OTHER=10; public static final int RULE_SL_COMMENT=8; + public static final int T__19=19; public static final int T__15=15; public static final int T__16=16; public static final int T__17=17; - public static final int RULE_INT=5; public static final int T__18=18; public static final int T__11=11; - public static final int RULE_ML_COMMENT=7; public static final int T__12=12; public static final int T__13=13; public static final int T__14=14; public static final int EOF=-1; + public static final int RULE_ID=4; + public static final int RULE_WS=9; + public static final int RULE_ANY_OTHER=10; + public static final int RULE_INT=5; + public static final int RULE_ML_COMMENT=7; // delegates // delegators @@ -900,7 +901,7 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // InternalTestLanguage.g:312:1: ( rule__TypeDeclaration__Group__2__Impl rule__TypeDeclaration__Group__3 ) // InternalTestLanguage.g:313:2: rule__TypeDeclaration__Group__2__Impl rule__TypeDeclaration__Group__3 { - pushFollow(FOLLOW_6); + pushFollow(FOLLOW_5); rule__TypeDeclaration__Group__2__Impl(); state._fsp--; @@ -929,21 +930,42 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__TypeDeclaration__Group__2__Impl" - // InternalTestLanguage.g:320:1: rule__TypeDeclaration__Group__2__Impl : ( '{' ) ; + // InternalTestLanguage.g:320:1: rule__TypeDeclaration__Group__2__Impl : ( ( rule__TypeDeclaration__Group_2__0 )? ) ; public final void rule__TypeDeclaration__Group__2__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:324:1: ( ( '{' ) ) - // InternalTestLanguage.g:325:1: ( '{' ) + // InternalTestLanguage.g:324:1: ( ( ( rule__TypeDeclaration__Group_2__0 )? ) ) + // InternalTestLanguage.g:325:1: ( ( rule__TypeDeclaration__Group_2__0 )? ) { - // InternalTestLanguage.g:325:1: ( '{' ) - // InternalTestLanguage.g:326:2: '{' + // InternalTestLanguage.g:325:1: ( ( rule__TypeDeclaration__Group_2__0 )? ) + // InternalTestLanguage.g:326:2: ( rule__TypeDeclaration__Group_2__0 )? { - before(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_2()); - match(input,15,FOLLOW_2); - after(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_2()); + before(grammarAccess.getTypeDeclarationAccess().getGroup_2()); + // InternalTestLanguage.g:327:2: ( rule__TypeDeclaration__Group_2__0 )? + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==17) ) { + alt4=1; + } + switch (alt4) { + case 1 : + // InternalTestLanguage.g:327:3: rule__TypeDeclaration__Group_2__0 + { + pushFollow(FOLLOW_2); + rule__TypeDeclaration__Group_2__0(); + + state._fsp--; + + + } + break; + + } + + after(grammarAccess.getTypeDeclarationAccess().getGroup_2()); } @@ -1004,49 +1026,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__TypeDeclaration__Group__3__Impl" - // InternalTestLanguage.g:347:1: rule__TypeDeclaration__Group__3__Impl : ( ( rule__TypeDeclaration__PropertiesAssignment_3 )* ) ; + // InternalTestLanguage.g:347:1: rule__TypeDeclaration__Group__3__Impl : ( '{' ) ; public final void rule__TypeDeclaration__Group__3__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:351:1: ( ( ( rule__TypeDeclaration__PropertiesAssignment_3 )* ) ) - // InternalTestLanguage.g:352:1: ( ( rule__TypeDeclaration__PropertiesAssignment_3 )* ) + // InternalTestLanguage.g:351:1: ( ( '{' ) ) + // InternalTestLanguage.g:352:1: ( '{' ) { - // InternalTestLanguage.g:352:1: ( ( rule__TypeDeclaration__PropertiesAssignment_3 )* ) - // InternalTestLanguage.g:353:2: ( rule__TypeDeclaration__PropertiesAssignment_3 )* + // InternalTestLanguage.g:352:1: ( '{' ) + // InternalTestLanguage.g:353:2: '{' { - before(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_3()); - // InternalTestLanguage.g:354:2: ( rule__TypeDeclaration__PropertiesAssignment_3 )* - loop4: - do { - int alt4=2; - int LA4_0 = input.LA(1); - - if ( (LA4_0==RULE_ID||(LA4_0>=11 && LA4_0<=13)) ) { - alt4=1; - } - - - switch (alt4) { - case 1 : - // InternalTestLanguage.g:354:3: rule__TypeDeclaration__PropertiesAssignment_3 - { - pushFollow(FOLLOW_7); - rule__TypeDeclaration__PropertiesAssignment_3(); - - state._fsp--; - - - } - break; - - default : - break loop4; - } - } while (true); - - after(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_3()); + before(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_3()); + match(input,15,FOLLOW_2); + after(grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_3()); } @@ -1069,20 +1063,25 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__TypeDeclaration__Group__4" - // InternalTestLanguage.g:362:1: rule__TypeDeclaration__Group__4 : rule__TypeDeclaration__Group__4__Impl ; + // InternalTestLanguage.g:362:1: rule__TypeDeclaration__Group__4 : rule__TypeDeclaration__Group__4__Impl rule__TypeDeclaration__Group__5 ; public final void rule__TypeDeclaration__Group__4() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:366:1: ( rule__TypeDeclaration__Group__4__Impl ) - // InternalTestLanguage.g:367:2: rule__TypeDeclaration__Group__4__Impl + // InternalTestLanguage.g:366:1: ( rule__TypeDeclaration__Group__4__Impl rule__TypeDeclaration__Group__5 ) + // InternalTestLanguage.g:367:2: rule__TypeDeclaration__Group__4__Impl rule__TypeDeclaration__Group__5 { - pushFollow(FOLLOW_2); + pushFollow(FOLLOW_6); rule__TypeDeclaration__Group__4__Impl(); state._fsp--; + pushFollow(FOLLOW_2); + rule__TypeDeclaration__Group__5(); + + state._fsp--; + } @@ -1102,21 +1101,49 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__TypeDeclaration__Group__4__Impl" - // InternalTestLanguage.g:373:1: rule__TypeDeclaration__Group__4__Impl : ( '}' ) ; + // InternalTestLanguage.g:374:1: rule__TypeDeclaration__Group__4__Impl : ( ( rule__TypeDeclaration__PropertiesAssignment_4 )* ) ; public final void rule__TypeDeclaration__Group__4__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:377:1: ( ( '}' ) ) - // InternalTestLanguage.g:378:1: ( '}' ) + // InternalTestLanguage.g:378:1: ( ( ( rule__TypeDeclaration__PropertiesAssignment_4 )* ) ) + // InternalTestLanguage.g:379:1: ( ( rule__TypeDeclaration__PropertiesAssignment_4 )* ) { - // InternalTestLanguage.g:378:1: ( '}' ) - // InternalTestLanguage.g:379:2: '}' + // InternalTestLanguage.g:379:1: ( ( rule__TypeDeclaration__PropertiesAssignment_4 )* ) + // InternalTestLanguage.g:380:2: ( rule__TypeDeclaration__PropertiesAssignment_4 )* { - before(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_4()); - match(input,16,FOLLOW_2); - after(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_4()); + before(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_4()); + // InternalTestLanguage.g:381:2: ( rule__TypeDeclaration__PropertiesAssignment_4 )* + loop5: + do { + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0==RULE_ID||(LA5_0>=11 && LA5_0<=13)) ) { + alt5=1; + } + + + switch (alt5) { + case 1 : + // InternalTestLanguage.g:381:3: rule__TypeDeclaration__PropertiesAssignment_4 + { + pushFollow(FOLLOW_7); + rule__TypeDeclaration__PropertiesAssignment_4(); + + state._fsp--; + + + } + break; + + default : + break loop5; + } + } while (true); + + after(grammarAccess.getTypeDeclarationAccess().getPropertiesAssignment_4()); } @@ -1138,15 +1165,240 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR end "rule__TypeDeclaration__Group__4__Impl" + // $ANTLR start "rule__TypeDeclaration__Group__5" + // InternalTestLanguage.g:389:1: rule__TypeDeclaration__Group__5 : rule__TypeDeclaration__Group__5__Impl ; + public final void rule__TypeDeclaration__Group__5() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:393:1: ( rule__TypeDeclaration__Group__5__Impl ) + // InternalTestLanguage.g:394:2: rule__TypeDeclaration__Group__5__Impl + { + pushFollow(FOLLOW_2); + rule__TypeDeclaration__Group__5__Impl(); + + state._fsp--; + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__Group__5" + + + // $ANTLR start "rule__TypeDeclaration__Group__5__Impl" + // InternalTestLanguage.g:400:1: rule__TypeDeclaration__Group__5__Impl : ( '}' ) ; + public final void rule__TypeDeclaration__Group__5__Impl() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:404:1: ( ( '}' ) ) + // InternalTestLanguage.g:405:1: ( '}' ) + { + // InternalTestLanguage.g:405:1: ( '}' ) + // InternalTestLanguage.g:406:2: '}' + { + before(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_5()); + match(input,16,FOLLOW_2); + after(grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_5()); + + } + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__Group__5__Impl" + + + // $ANTLR start "rule__TypeDeclaration__Group_2__0" + // InternalTestLanguage.g:416:1: rule__TypeDeclaration__Group_2__0 : rule__TypeDeclaration__Group_2__0__Impl rule__TypeDeclaration__Group_2__1 ; + public final void rule__TypeDeclaration__Group_2__0() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:420:1: ( rule__TypeDeclaration__Group_2__0__Impl rule__TypeDeclaration__Group_2__1 ) + // InternalTestLanguage.g:421:2: rule__TypeDeclaration__Group_2__0__Impl rule__TypeDeclaration__Group_2__1 + { + pushFollow(FOLLOW_4); + rule__TypeDeclaration__Group_2__0__Impl(); + + state._fsp--; + + pushFollow(FOLLOW_2); + rule__TypeDeclaration__Group_2__1(); + + state._fsp--; + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__Group_2__0" + + + // $ANTLR start "rule__TypeDeclaration__Group_2__0__Impl" + // InternalTestLanguage.g:428:1: rule__TypeDeclaration__Group_2__0__Impl : ( 'extends' ) ; + public final void rule__TypeDeclaration__Group_2__0__Impl() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:432:1: ( ( 'extends' ) ) + // InternalTestLanguage.g:433:1: ( 'extends' ) + { + // InternalTestLanguage.g:433:1: ( 'extends' ) + // InternalTestLanguage.g:434:2: 'extends' + { + before(grammarAccess.getTypeDeclarationAccess().getExtendsKeyword_2_0()); + match(input,17,FOLLOW_2); + after(grammarAccess.getTypeDeclarationAccess().getExtendsKeyword_2_0()); + + } + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__Group_2__0__Impl" + + + // $ANTLR start "rule__TypeDeclaration__Group_2__1" + // InternalTestLanguage.g:443:1: rule__TypeDeclaration__Group_2__1 : rule__TypeDeclaration__Group_2__1__Impl ; + public final void rule__TypeDeclaration__Group_2__1() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:447:1: ( rule__TypeDeclaration__Group_2__1__Impl ) + // InternalTestLanguage.g:448:2: rule__TypeDeclaration__Group_2__1__Impl + { + pushFollow(FOLLOW_2); + rule__TypeDeclaration__Group_2__1__Impl(); + + state._fsp--; + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__Group_2__1" + + + // $ANTLR start "rule__TypeDeclaration__Group_2__1__Impl" + // InternalTestLanguage.g:454:1: rule__TypeDeclaration__Group_2__1__Impl : ( ( rule__TypeDeclaration__SuperTypeAssignment_2_1 ) ) ; + public final void rule__TypeDeclaration__Group_2__1__Impl() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:458:1: ( ( ( rule__TypeDeclaration__SuperTypeAssignment_2_1 ) ) ) + // InternalTestLanguage.g:459:1: ( ( rule__TypeDeclaration__SuperTypeAssignment_2_1 ) ) + { + // InternalTestLanguage.g:459:1: ( ( rule__TypeDeclaration__SuperTypeAssignment_2_1 ) ) + // InternalTestLanguage.g:460:2: ( rule__TypeDeclaration__SuperTypeAssignment_2_1 ) + { + before(grammarAccess.getTypeDeclarationAccess().getSuperTypeAssignment_2_1()); + // InternalTestLanguage.g:461:2: ( rule__TypeDeclaration__SuperTypeAssignment_2_1 ) + // InternalTestLanguage.g:461:3: rule__TypeDeclaration__SuperTypeAssignment_2_1 + { + pushFollow(FOLLOW_2); + rule__TypeDeclaration__SuperTypeAssignment_2_1(); + + state._fsp--; + + + } + + after(grammarAccess.getTypeDeclarationAccess().getSuperTypeAssignment_2_1()); + + } + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__Group_2__1__Impl" + + // $ANTLR start "rule__Property__Group__0" - // InternalTestLanguage.g:389:1: rule__Property__Group__0 : rule__Property__Group__0__Impl rule__Property__Group__1 ; + // InternalTestLanguage.g:470:1: rule__Property__Group__0 : rule__Property__Group__0__Impl rule__Property__Group__1 ; public final void rule__Property__Group__0() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:393:1: ( rule__Property__Group__0__Impl rule__Property__Group__1 ) - // InternalTestLanguage.g:394:2: rule__Property__Group__0__Impl rule__Property__Group__1 + // InternalTestLanguage.g:474:1: ( rule__Property__Group__0__Impl rule__Property__Group__1 ) + // InternalTestLanguage.g:475:2: rule__Property__Group__0__Impl rule__Property__Group__1 { pushFollow(FOLLOW_4); rule__Property__Group__0__Impl(); @@ -1177,21 +1429,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Property__Group__0__Impl" - // InternalTestLanguage.g:401:1: rule__Property__Group__0__Impl : ( ( rule__Property__TypeAssignment_0 ) ) ; + // InternalTestLanguage.g:482:1: rule__Property__Group__0__Impl : ( ( rule__Property__TypeAssignment_0 ) ) ; public final void rule__Property__Group__0__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:405:1: ( ( ( rule__Property__TypeAssignment_0 ) ) ) - // InternalTestLanguage.g:406:1: ( ( rule__Property__TypeAssignment_0 ) ) + // InternalTestLanguage.g:486:1: ( ( ( rule__Property__TypeAssignment_0 ) ) ) + // InternalTestLanguage.g:487:1: ( ( rule__Property__TypeAssignment_0 ) ) { - // InternalTestLanguage.g:406:1: ( ( rule__Property__TypeAssignment_0 ) ) - // InternalTestLanguage.g:407:2: ( rule__Property__TypeAssignment_0 ) + // InternalTestLanguage.g:487:1: ( ( rule__Property__TypeAssignment_0 ) ) + // InternalTestLanguage.g:488:2: ( rule__Property__TypeAssignment_0 ) { before(grammarAccess.getPropertyAccess().getTypeAssignment_0()); - // InternalTestLanguage.g:408:2: ( rule__Property__TypeAssignment_0 ) - // InternalTestLanguage.g:408:3: rule__Property__TypeAssignment_0 + // InternalTestLanguage.g:489:2: ( rule__Property__TypeAssignment_0 ) + // InternalTestLanguage.g:489:3: rule__Property__TypeAssignment_0 { pushFollow(FOLLOW_2); rule__Property__TypeAssignment_0(); @@ -1224,14 +1476,14 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Property__Group__1" - // InternalTestLanguage.g:416:1: rule__Property__Group__1 : rule__Property__Group__1__Impl ; + // InternalTestLanguage.g:497:1: rule__Property__Group__1 : rule__Property__Group__1__Impl ; public final void rule__Property__Group__1() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:420:1: ( rule__Property__Group__1__Impl ) - // InternalTestLanguage.g:421:2: rule__Property__Group__1__Impl + // InternalTestLanguage.g:501:1: ( rule__Property__Group__1__Impl ) + // InternalTestLanguage.g:502:2: rule__Property__Group__1__Impl { pushFollow(FOLLOW_2); rule__Property__Group__1__Impl(); @@ -1257,21 +1509,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Property__Group__1__Impl" - // InternalTestLanguage.g:427:1: rule__Property__Group__1__Impl : ( ( rule__Property__NameAssignment_1 ) ) ; + // InternalTestLanguage.g:508:1: rule__Property__Group__1__Impl : ( ( rule__Property__NameAssignment_1 ) ) ; public final void rule__Property__Group__1__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:431:1: ( ( ( rule__Property__NameAssignment_1 ) ) ) - // InternalTestLanguage.g:432:1: ( ( rule__Property__NameAssignment_1 ) ) + // InternalTestLanguage.g:512:1: ( ( ( rule__Property__NameAssignment_1 ) ) ) + // InternalTestLanguage.g:513:1: ( ( rule__Property__NameAssignment_1 ) ) { - // InternalTestLanguage.g:432:1: ( ( rule__Property__NameAssignment_1 ) ) - // InternalTestLanguage.g:433:2: ( rule__Property__NameAssignment_1 ) + // InternalTestLanguage.g:513:1: ( ( rule__Property__NameAssignment_1 ) ) + // InternalTestLanguage.g:514:2: ( rule__Property__NameAssignment_1 ) { before(grammarAccess.getPropertyAccess().getNameAssignment_1()); - // InternalTestLanguage.g:434:2: ( rule__Property__NameAssignment_1 ) - // InternalTestLanguage.g:434:3: rule__Property__NameAssignment_1 + // InternalTestLanguage.g:515:2: ( rule__Property__NameAssignment_1 ) + // InternalTestLanguage.g:515:3: rule__Property__NameAssignment_1 { pushFollow(FOLLOW_2); rule__Property__NameAssignment_1(); @@ -1304,14 +1556,14 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group__0" - // InternalTestLanguage.g:443:1: rule__Type__Group__0 : rule__Type__Group__0__Impl rule__Type__Group__1 ; + // InternalTestLanguage.g:524:1: rule__Type__Group__0 : rule__Type__Group__0__Impl rule__Type__Group__1 ; public final void rule__Type__Group__0() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:447:1: ( rule__Type__Group__0__Impl rule__Type__Group__1 ) - // InternalTestLanguage.g:448:2: rule__Type__Group__0__Impl rule__Type__Group__1 + // InternalTestLanguage.g:528:1: ( rule__Type__Group__0__Impl rule__Type__Group__1 ) + // InternalTestLanguage.g:529:2: rule__Type__Group__0__Impl rule__Type__Group__1 { pushFollow(FOLLOW_8); rule__Type__Group__0__Impl(); @@ -1342,21 +1594,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group__0__Impl" - // InternalTestLanguage.g:455:1: rule__Type__Group__0__Impl : ( ( rule__Type__Alternatives_0 ) ) ; + // InternalTestLanguage.g:536:1: rule__Type__Group__0__Impl : ( ( rule__Type__Alternatives_0 ) ) ; public final void rule__Type__Group__0__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:459:1: ( ( ( rule__Type__Alternatives_0 ) ) ) - // InternalTestLanguage.g:460:1: ( ( rule__Type__Alternatives_0 ) ) + // InternalTestLanguage.g:540:1: ( ( ( rule__Type__Alternatives_0 ) ) ) + // InternalTestLanguage.g:541:1: ( ( rule__Type__Alternatives_0 ) ) { - // InternalTestLanguage.g:460:1: ( ( rule__Type__Alternatives_0 ) ) - // InternalTestLanguage.g:461:2: ( rule__Type__Alternatives_0 ) + // InternalTestLanguage.g:541:1: ( ( rule__Type__Alternatives_0 ) ) + // InternalTestLanguage.g:542:2: ( rule__Type__Alternatives_0 ) { before(grammarAccess.getTypeAccess().getAlternatives_0()); - // InternalTestLanguage.g:462:2: ( rule__Type__Alternatives_0 ) - // InternalTestLanguage.g:462:3: rule__Type__Alternatives_0 + // InternalTestLanguage.g:543:2: ( rule__Type__Alternatives_0 ) + // InternalTestLanguage.g:543:3: rule__Type__Alternatives_0 { pushFollow(FOLLOW_2); rule__Type__Alternatives_0(); @@ -1389,14 +1641,14 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group__1" - // InternalTestLanguage.g:470:1: rule__Type__Group__1 : rule__Type__Group__1__Impl ; + // InternalTestLanguage.g:551:1: rule__Type__Group__1 : rule__Type__Group__1__Impl ; public final void rule__Type__Group__1() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:474:1: ( rule__Type__Group__1__Impl ) - // InternalTestLanguage.g:475:2: rule__Type__Group__1__Impl + // InternalTestLanguage.g:555:1: ( rule__Type__Group__1__Impl ) + // InternalTestLanguage.g:556:2: rule__Type__Group__1__Impl { pushFollow(FOLLOW_2); rule__Type__Group__1__Impl(); @@ -1422,33 +1674,33 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group__1__Impl" - // InternalTestLanguage.g:481:1: rule__Type__Group__1__Impl : ( ( rule__Type__Group_1__0 )* ) ; + // InternalTestLanguage.g:562:1: rule__Type__Group__1__Impl : ( ( rule__Type__Group_1__0 )* ) ; public final void rule__Type__Group__1__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:485:1: ( ( ( rule__Type__Group_1__0 )* ) ) - // InternalTestLanguage.g:486:1: ( ( rule__Type__Group_1__0 )* ) + // InternalTestLanguage.g:566:1: ( ( ( rule__Type__Group_1__0 )* ) ) + // InternalTestLanguage.g:567:1: ( ( rule__Type__Group_1__0 )* ) { - // InternalTestLanguage.g:486:1: ( ( rule__Type__Group_1__0 )* ) - // InternalTestLanguage.g:487:2: ( rule__Type__Group_1__0 )* + // InternalTestLanguage.g:567:1: ( ( rule__Type__Group_1__0 )* ) + // InternalTestLanguage.g:568:2: ( rule__Type__Group_1__0 )* { before(grammarAccess.getTypeAccess().getGroup_1()); - // InternalTestLanguage.g:488:2: ( rule__Type__Group_1__0 )* - loop5: + // InternalTestLanguage.g:569:2: ( rule__Type__Group_1__0 )* + loop6: do { - int alt5=2; - int LA5_0 = input.LA(1); + int alt6=2; + int LA6_0 = input.LA(1); - if ( (LA5_0==18) ) { - alt5=1; + if ( (LA6_0==19) ) { + alt6=1; } - switch (alt5) { + switch (alt6) { case 1 : - // InternalTestLanguage.g:488:3: rule__Type__Group_1__0 + // InternalTestLanguage.g:569:3: rule__Type__Group_1__0 { pushFollow(FOLLOW_9); rule__Type__Group_1__0(); @@ -1460,7 +1712,7 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar break; default : - break loop5; + break loop6; } } while (true); @@ -1487,14 +1739,14 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group_1__0" - // InternalTestLanguage.g:497:1: rule__Type__Group_1__0 : rule__Type__Group_1__0__Impl rule__Type__Group_1__1 ; + // InternalTestLanguage.g:578:1: rule__Type__Group_1__0 : rule__Type__Group_1__0__Impl rule__Type__Group_1__1 ; public final void rule__Type__Group_1__0() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:501:1: ( rule__Type__Group_1__0__Impl rule__Type__Group_1__1 ) - // InternalTestLanguage.g:502:2: rule__Type__Group_1__0__Impl rule__Type__Group_1__1 + // InternalTestLanguage.g:582:1: ( rule__Type__Group_1__0__Impl rule__Type__Group_1__1 ) + // InternalTestLanguage.g:583:2: rule__Type__Group_1__0__Impl rule__Type__Group_1__1 { pushFollow(FOLLOW_10); rule__Type__Group_1__0__Impl(); @@ -1525,21 +1777,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group_1__0__Impl" - // InternalTestLanguage.g:509:1: rule__Type__Group_1__0__Impl : ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) ; + // InternalTestLanguage.g:590:1: rule__Type__Group_1__0__Impl : ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) ; public final void rule__Type__Group_1__0__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:513:1: ( ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) ) - // InternalTestLanguage.g:514:1: ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) + // InternalTestLanguage.g:594:1: ( ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) ) + // InternalTestLanguage.g:595:1: ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) { - // InternalTestLanguage.g:514:1: ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) - // InternalTestLanguage.g:515:2: ( rule__Type__ArrayDiemensionsAssignment_1_0 ) + // InternalTestLanguage.g:595:1: ( ( rule__Type__ArrayDiemensionsAssignment_1_0 ) ) + // InternalTestLanguage.g:596:2: ( rule__Type__ArrayDiemensionsAssignment_1_0 ) { before(grammarAccess.getTypeAccess().getArrayDiemensionsAssignment_1_0()); - // InternalTestLanguage.g:516:2: ( rule__Type__ArrayDiemensionsAssignment_1_0 ) - // InternalTestLanguage.g:516:3: rule__Type__ArrayDiemensionsAssignment_1_0 + // InternalTestLanguage.g:597:2: ( rule__Type__ArrayDiemensionsAssignment_1_0 ) + // InternalTestLanguage.g:597:3: rule__Type__ArrayDiemensionsAssignment_1_0 { pushFollow(FOLLOW_2); rule__Type__ArrayDiemensionsAssignment_1_0(); @@ -1572,14 +1824,14 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group_1__1" - // InternalTestLanguage.g:524:1: rule__Type__Group_1__1 : rule__Type__Group_1__1__Impl ; + // InternalTestLanguage.g:605:1: rule__Type__Group_1__1 : rule__Type__Group_1__1__Impl ; public final void rule__Type__Group_1__1() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:528:1: ( rule__Type__Group_1__1__Impl ) - // InternalTestLanguage.g:529:2: rule__Type__Group_1__1__Impl + // InternalTestLanguage.g:609:1: ( rule__Type__Group_1__1__Impl ) + // InternalTestLanguage.g:610:2: rule__Type__Group_1__1__Impl { pushFollow(FOLLOW_2); rule__Type__Group_1__1__Impl(); @@ -1605,20 +1857,20 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__Group_1__1__Impl" - // InternalTestLanguage.g:535:1: rule__Type__Group_1__1__Impl : ( ']' ) ; + // InternalTestLanguage.g:616:1: rule__Type__Group_1__1__Impl : ( ']' ) ; public final void rule__Type__Group_1__1__Impl() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:539:1: ( ( ']' ) ) - // InternalTestLanguage.g:540:1: ( ']' ) + // InternalTestLanguage.g:620:1: ( ( ']' ) ) + // InternalTestLanguage.g:621:1: ( ']' ) { - // InternalTestLanguage.g:540:1: ( ']' ) - // InternalTestLanguage.g:541:2: ']' + // InternalTestLanguage.g:621:1: ( ']' ) + // InternalTestLanguage.g:622:2: ']' { before(grammarAccess.getTypeAccess().getRightSquareBracketKeyword_1_1()); - match(input,17,FOLLOW_2); + match(input,18,FOLLOW_2); after(grammarAccess.getTypeAccess().getRightSquareBracketKeyword_1_1()); } @@ -1642,17 +1894,17 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Model__TypesAssignment" - // InternalTestLanguage.g:551:1: rule__Model__TypesAssignment : ( ruleTypeDeclaration ) ; + // InternalTestLanguage.g:632:1: rule__Model__TypesAssignment : ( ruleTypeDeclaration ) ; public final void rule__Model__TypesAssignment() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:555:1: ( ( ruleTypeDeclaration ) ) - // InternalTestLanguage.g:556:2: ( ruleTypeDeclaration ) + // InternalTestLanguage.g:636:1: ( ( ruleTypeDeclaration ) ) + // InternalTestLanguage.g:637:2: ( ruleTypeDeclaration ) { - // InternalTestLanguage.g:556:2: ( ruleTypeDeclaration ) - // InternalTestLanguage.g:557:3: ruleTypeDeclaration + // InternalTestLanguage.g:637:2: ( ruleTypeDeclaration ) + // InternalTestLanguage.g:638:3: ruleTypeDeclaration { before(grammarAccess.getModelAccess().getTypesTypeDeclarationParserRuleCall_0()); pushFollow(FOLLOW_2); @@ -1683,17 +1935,17 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__TypeDeclaration__NameAssignment_1" - // InternalTestLanguage.g:566:1: rule__TypeDeclaration__NameAssignment_1 : ( RULE_ID ) ; + // InternalTestLanguage.g:647:1: rule__TypeDeclaration__NameAssignment_1 : ( RULE_ID ) ; public final void rule__TypeDeclaration__NameAssignment_1() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:570:1: ( ( RULE_ID ) ) - // InternalTestLanguage.g:571:2: ( RULE_ID ) + // InternalTestLanguage.g:651:1: ( ( RULE_ID ) ) + // InternalTestLanguage.g:652:2: ( RULE_ID ) { - // InternalTestLanguage.g:571:2: ( RULE_ID ) - // InternalTestLanguage.g:572:3: RULE_ID + // InternalTestLanguage.g:652:2: ( RULE_ID ) + // InternalTestLanguage.g:653:3: RULE_ID { before(grammarAccess.getTypeDeclarationAccess().getNameIDTerminalRuleCall_1_0()); match(input,RULE_ID,FOLLOW_2); @@ -1719,26 +1971,30 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR end "rule__TypeDeclaration__NameAssignment_1" - // $ANTLR start "rule__TypeDeclaration__PropertiesAssignment_3" - // InternalTestLanguage.g:581:1: rule__TypeDeclaration__PropertiesAssignment_3 : ( ruleProperty ) ; - public final void rule__TypeDeclaration__PropertiesAssignment_3() throws RecognitionException { + // $ANTLR start "rule__TypeDeclaration__SuperTypeAssignment_2_1" + // InternalTestLanguage.g:662:1: rule__TypeDeclaration__SuperTypeAssignment_2_1 : ( ( RULE_ID ) ) ; + public final void rule__TypeDeclaration__SuperTypeAssignment_2_1() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:585:1: ( ( ruleProperty ) ) - // InternalTestLanguage.g:586:2: ( ruleProperty ) + // InternalTestLanguage.g:666:1: ( ( ( RULE_ID ) ) ) + // InternalTestLanguage.g:667:2: ( ( RULE_ID ) ) { - // InternalTestLanguage.g:586:2: ( ruleProperty ) - // InternalTestLanguage.g:587:3: ruleProperty + // InternalTestLanguage.g:667:2: ( ( RULE_ID ) ) + // InternalTestLanguage.g:668:3: ( RULE_ID ) { - before(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_3_0()); - pushFollow(FOLLOW_2); - ruleProperty(); + before(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationCrossReference_2_1_0()); + // InternalTestLanguage.g:669:3: ( RULE_ID ) + // InternalTestLanguage.g:670:4: RULE_ID + { + before(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1()); + match(input,RULE_ID,FOLLOW_2); + after(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1()); - state._fsp--; + } - after(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_3_0()); + after(grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationCrossReference_2_1_0()); } @@ -1757,21 +2013,62 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar } return ; } - // $ANTLR end "rule__TypeDeclaration__PropertiesAssignment_3" + // $ANTLR end "rule__TypeDeclaration__SuperTypeAssignment_2_1" + + + // $ANTLR start "rule__TypeDeclaration__PropertiesAssignment_4" + // InternalTestLanguage.g:681:1: rule__TypeDeclaration__PropertiesAssignment_4 : ( ruleProperty ) ; + public final void rule__TypeDeclaration__PropertiesAssignment_4() throws RecognitionException { + + int stackSize = keepStackSize(); + + try { + // InternalTestLanguage.g:685:1: ( ( ruleProperty ) ) + // InternalTestLanguage.g:686:2: ( ruleProperty ) + { + // InternalTestLanguage.g:686:2: ( ruleProperty ) + // InternalTestLanguage.g:687:3: ruleProperty + { + before(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_4_0()); + pushFollow(FOLLOW_2); + ruleProperty(); + + state._fsp--; + + after(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_4_0()); + + } + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + + restoreStackSize(stackSize); + + } + return ; + } + // $ANTLR end "rule__TypeDeclaration__PropertiesAssignment_4" // $ANTLR start "rule__Property__TypeAssignment_0" - // InternalTestLanguage.g:596:1: rule__Property__TypeAssignment_0 : ( ruleType ) ; + // InternalTestLanguage.g:696:1: rule__Property__TypeAssignment_0 : ( ruleType ) ; public final void rule__Property__TypeAssignment_0() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:600:1: ( ( ruleType ) ) - // InternalTestLanguage.g:601:2: ( ruleType ) + // InternalTestLanguage.g:700:1: ( ( ruleType ) ) + // InternalTestLanguage.g:701:2: ( ruleType ) { - // InternalTestLanguage.g:601:2: ( ruleType ) - // InternalTestLanguage.g:602:3: ruleType + // InternalTestLanguage.g:701:2: ( ruleType ) + // InternalTestLanguage.g:702:3: ruleType { before(grammarAccess.getPropertyAccess().getTypeTypeParserRuleCall_0_0()); pushFollow(FOLLOW_2); @@ -1802,17 +2099,17 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Property__NameAssignment_1" - // InternalTestLanguage.g:611:1: rule__Property__NameAssignment_1 : ( RULE_ID ) ; + // InternalTestLanguage.g:711:1: rule__Property__NameAssignment_1 : ( RULE_ID ) ; public final void rule__Property__NameAssignment_1() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:615:1: ( ( RULE_ID ) ) - // InternalTestLanguage.g:616:2: ( RULE_ID ) + // InternalTestLanguage.g:715:1: ( ( RULE_ID ) ) + // InternalTestLanguage.g:716:2: ( RULE_ID ) { - // InternalTestLanguage.g:616:2: ( RULE_ID ) - // InternalTestLanguage.g:617:3: RULE_ID + // InternalTestLanguage.g:716:2: ( RULE_ID ) + // InternalTestLanguage.g:717:3: RULE_ID { before(grammarAccess.getPropertyAccess().getNameIDTerminalRuleCall_1_0()); match(input,RULE_ID,FOLLOW_2); @@ -1839,24 +2136,24 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__Type__ArrayDiemensionsAssignment_1_0" - // InternalTestLanguage.g:626:1: rule__Type__ArrayDiemensionsAssignment_1_0 : ( ( '[' ) ) ; + // InternalTestLanguage.g:726:1: rule__Type__ArrayDiemensionsAssignment_1_0 : ( ( '[' ) ) ; public final void rule__Type__ArrayDiemensionsAssignment_1_0() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:630:1: ( ( ( '[' ) ) ) - // InternalTestLanguage.g:631:2: ( ( '[' ) ) + // InternalTestLanguage.g:730:1: ( ( ( '[' ) ) ) + // InternalTestLanguage.g:731:2: ( ( '[' ) ) { - // InternalTestLanguage.g:631:2: ( ( '[' ) ) - // InternalTestLanguage.g:632:3: ( '[' ) + // InternalTestLanguage.g:731:2: ( ( '[' ) ) + // InternalTestLanguage.g:732:3: ( '[' ) { before(grammarAccess.getTypeAccess().getArrayDiemensionsLeftSquareBracketKeyword_1_0_0()); - // InternalTestLanguage.g:633:3: ( '[' ) - // InternalTestLanguage.g:634:4: '[' + // InternalTestLanguage.g:733:3: ( '[' ) + // InternalTestLanguage.g:734:4: '[' { before(grammarAccess.getTypeAccess().getArrayDiemensionsLeftSquareBracketKeyword_1_0_0()); - match(input,18,FOLLOW_2); + match(input,19,FOLLOW_2); after(grammarAccess.getTypeAccess().getArrayDiemensionsLeftSquareBracketKeyword_1_0_0()); } @@ -1884,21 +2181,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__TypeReference__TypeRefAssignment" - // InternalTestLanguage.g:645:1: rule__TypeReference__TypeRefAssignment : ( ( RULE_ID ) ) ; + // InternalTestLanguage.g:745:1: rule__TypeReference__TypeRefAssignment : ( ( RULE_ID ) ) ; public final void rule__TypeReference__TypeRefAssignment() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:649:1: ( ( ( RULE_ID ) ) ) - // InternalTestLanguage.g:650:2: ( ( RULE_ID ) ) + // InternalTestLanguage.g:749:1: ( ( ( RULE_ID ) ) ) + // InternalTestLanguage.g:750:2: ( ( RULE_ID ) ) { - // InternalTestLanguage.g:650:2: ( ( RULE_ID ) ) - // InternalTestLanguage.g:651:3: ( RULE_ID ) + // InternalTestLanguage.g:750:2: ( ( RULE_ID ) ) + // InternalTestLanguage.g:751:3: ( RULE_ID ) { before(grammarAccess.getTypeReferenceAccess().getTypeRefTypeDeclarationCrossReference_0()); - // InternalTestLanguage.g:652:3: ( RULE_ID ) - // InternalTestLanguage.g:653:4: RULE_ID + // InternalTestLanguage.g:752:3: ( RULE_ID ) + // InternalTestLanguage.g:753:4: RULE_ID { before(grammarAccess.getTypeReferenceAccess().getTypeRefTypeDeclarationIDTerminalRuleCall_0_1()); match(input,RULE_ID,FOLLOW_2); @@ -1929,21 +2226,21 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar // $ANTLR start "rule__PrimitiveType__NameAssignment" - // InternalTestLanguage.g:664:1: rule__PrimitiveType__NameAssignment : ( ( rule__PrimitiveType__NameAlternatives_0 ) ) ; + // InternalTestLanguage.g:764:1: rule__PrimitiveType__NameAssignment : ( ( rule__PrimitiveType__NameAlternatives_0 ) ) ; public final void rule__PrimitiveType__NameAssignment() throws RecognitionException { int stackSize = keepStackSize(); try { - // InternalTestLanguage.g:668:1: ( ( ( rule__PrimitiveType__NameAlternatives_0 ) ) ) - // InternalTestLanguage.g:669:2: ( ( rule__PrimitiveType__NameAlternatives_0 ) ) + // InternalTestLanguage.g:768:1: ( ( ( rule__PrimitiveType__NameAlternatives_0 ) ) ) + // InternalTestLanguage.g:769:2: ( ( rule__PrimitiveType__NameAlternatives_0 ) ) { - // InternalTestLanguage.g:669:2: ( ( rule__PrimitiveType__NameAlternatives_0 ) ) - // InternalTestLanguage.g:670:3: ( rule__PrimitiveType__NameAlternatives_0 ) + // InternalTestLanguage.g:769:2: ( ( rule__PrimitiveType__NameAlternatives_0 ) ) + // InternalTestLanguage.g:770:3: ( rule__PrimitiveType__NameAlternatives_0 ) { before(grammarAccess.getPrimitiveTypeAccess().getNameAlternatives_0()); - // InternalTestLanguage.g:671:3: ( rule__PrimitiveType__NameAlternatives_0 ) - // InternalTestLanguage.g:671:4: rule__PrimitiveType__NameAlternatives_0 + // InternalTestLanguage.g:771:3: ( rule__PrimitiveType__NameAlternatives_0 ) + // InternalTestLanguage.g:771:4: rule__PrimitiveType__NameAlternatives_0 { pushFollow(FOLLOW_2); rule__PrimitiveType__NameAlternatives_0(); @@ -1983,11 +2280,11 @@ public class InternalTestLanguageParser extends AbstractInternalContentAssistPar public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000004002L}); public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000008000L}); + public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000028000L}); public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000013810L}); public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000003812L}); - public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000040000L}); - public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000040002L}); - public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000020000L}); + public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000080000L}); + public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000080002L}); + public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000040000L}); } \ No newline at end of file diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.g b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.g index 7b16b9a7b..ec1199afa 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.g +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.g @@ -138,16 +138,35 @@ ruleTypeDeclaration returns [EObject current=null] } ) ) - otherlv_2='{' + ( + otherlv_2='extends' + { + newLeafNode(otherlv_2, grammarAccess.getTypeDeclarationAccess().getExtendsKeyword_2_0()); + } + ( + ( + { + if ($current==null) { + $current = createModelElement(grammarAccess.getTypeDeclarationRule()); + } + } + otherlv_3=RULE_ID + { + newLeafNode(otherlv_3, grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationCrossReference_2_1_0()); + } + ) + ) + )? + otherlv_4='{' { - newLeafNode(otherlv_2, grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_2()); + newLeafNode(otherlv_4, grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_3()); } ( ( { - newCompositeNode(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_3_0()); + newCompositeNode(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_4_0()); } - lv_properties_3_0=ruleProperty + lv_properties_5_0=ruleProperty { if ($current==null) { $current = createModelElementForParent(grammarAccess.getTypeDeclarationRule()); @@ -155,15 +174,15 @@ ruleTypeDeclaration returns [EObject current=null] add( $current, "properties", - lv_properties_3_0, + lv_properties_5_0, "org.eclipse.xtext.ide.tests.testlanguage.TestLanguage.Property"); afterParserOrEnumRuleCall(); } ) )* - otherlv_4='}' + otherlv_6='}' { - newLeafNode(otherlv_4, grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_4()); + newLeafNode(otherlv_6, grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_5()); } ) ; diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.tokens b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.tokens index 74094fe9a..0d825be29 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.tokens +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguage.tokens @@ -1,11 +1,12 @@ -'['=14 -']'=15 -'boolean'=18 -'int'=17 -'string'=16 +'['=15 +']'=16 +'boolean'=19 +'extends'=12 +'int'=18 +'string'=17 'type'=11 -'{'=12 -'}'=13 +'{'=13 +'}'=14 RULE_ANY_OTHER=10 RULE_ID=4 RULE_INT=5 @@ -21,3 +22,4 @@ T__15=15 T__16=16 T__17=17 T__18=18 +T__19=19 diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageLexer.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageLexer.java index fd44141b2..0ff6e2fd6 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageLexer.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageLexer.java @@ -12,22 +12,23 @@ import java.util.ArrayList; @SuppressWarnings("all") public class InternalTestLanguageLexer extends Lexer { - public static final int RULE_ID=4; - public static final int RULE_WS=9; public static final int RULE_STRING=6; - public static final int RULE_ANY_OTHER=10; public static final int RULE_SL_COMMENT=8; + public static final int T__19=19; public static final int T__15=15; public static final int T__16=16; public static final int T__17=17; - public static final int RULE_INT=5; public static final int T__18=18; public static final int T__11=11; - public static final int RULE_ML_COMMENT=7; public static final int T__12=12; public static final int T__13=13; public static final int T__14=14; public static final int EOF=-1; + public static final int RULE_ID=4; + public static final int RULE_WS=9; + public static final int RULE_ANY_OTHER=10; + public static final int RULE_INT=5; + public static final int RULE_ML_COMMENT=7; // delegates // delegators @@ -68,10 +69,11 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__12; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:12:7: ( '{' ) - // InternalTestLanguage.g:12:9: '{' + // InternalTestLanguage.g:12:7: ( 'extends' ) + // InternalTestLanguage.g:12:9: 'extends' { - match('{'); + match("extends"); + } @@ -88,10 +90,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__13; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:13:7: ( '}' ) - // InternalTestLanguage.g:13:9: '}' + // InternalTestLanguage.g:13:7: ( '{' ) + // InternalTestLanguage.g:13:9: '{' { - match('}'); + match('{'); } @@ -108,10 +110,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__14; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:14:7: ( '[' ) - // InternalTestLanguage.g:14:9: '[' + // InternalTestLanguage.g:14:7: ( '}' ) + // InternalTestLanguage.g:14:9: '}' { - match('['); + match('}'); } @@ -128,10 +130,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__15; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:15:7: ( ']' ) - // InternalTestLanguage.g:15:9: ']' + // InternalTestLanguage.g:15:7: ( '[' ) + // InternalTestLanguage.g:15:9: '[' { - match(']'); + match('['); } @@ -148,11 +150,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__16; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:16:7: ( 'string' ) - // InternalTestLanguage.g:16:9: 'string' + // InternalTestLanguage.g:16:7: ( ']' ) + // InternalTestLanguage.g:16:9: ']' { - match("string"); - + match(']'); } @@ -169,10 +170,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__17; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:17:7: ( 'int' ) - // InternalTestLanguage.g:17:9: 'int' + // InternalTestLanguage.g:17:7: ( 'string' ) + // InternalTestLanguage.g:17:9: 'string' { - match("int"); + match("string"); } @@ -190,10 +191,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = T__18; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:18:7: ( 'boolean' ) - // InternalTestLanguage.g:18:9: 'boolean' + // InternalTestLanguage.g:18:7: ( 'int' ) + // InternalTestLanguage.g:18:9: 'int' { - match("boolean"); + match("int"); } @@ -206,15 +207,36 @@ public class InternalTestLanguageLexer extends Lexer { } // $ANTLR end "T__18" + // $ANTLR start "T__19" + public final void mT__19() throws RecognitionException { + try { + int _type = T__19; + int _channel = DEFAULT_TOKEN_CHANNEL; + // InternalTestLanguage.g:19:7: ( 'boolean' ) + // InternalTestLanguage.g:19:9: 'boolean' + { + match("boolean"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__19" + // $ANTLR start "RULE_ID" public final void mRULE_ID() throws RecognitionException { try { int _type = RULE_ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:370:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) - // InternalTestLanguage.g:370:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + // InternalTestLanguage.g:389:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // InternalTestLanguage.g:389:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* { - // InternalTestLanguage.g:370:11: ( '^' )? + // InternalTestLanguage.g:389:11: ( '^' )? int alt1=2; int LA1_0 = input.LA(1); @@ -223,7 +245,7 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt1) { case 1 : - // InternalTestLanguage.g:370:11: '^' + // InternalTestLanguage.g:389:11: '^' { match('^'); @@ -241,7 +263,7 @@ public class InternalTestLanguageLexer extends Lexer { recover(mse); throw mse;} - // InternalTestLanguage.g:370:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + // InternalTestLanguage.g:389:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* loop2: do { int alt2=2; @@ -290,10 +312,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_INT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:372:10: ( ( '0' .. '9' )+ ) - // InternalTestLanguage.g:372:12: ( '0' .. '9' )+ + // InternalTestLanguage.g:391:10: ( ( '0' .. '9' )+ ) + // InternalTestLanguage.g:391:12: ( '0' .. '9' )+ { - // InternalTestLanguage.g:372:12: ( '0' .. '9' )+ + // InternalTestLanguage.g:391:12: ( '0' .. '9' )+ int cnt3=0; loop3: do { @@ -307,7 +329,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt3) { case 1 : - // InternalTestLanguage.g:372:13: '0' .. '9' + // InternalTestLanguage.g:391:13: '0' .. '9' { matchRange('0','9'); @@ -339,10 +361,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_STRING; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:374:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) ) - // InternalTestLanguage.g:374:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) + // InternalTestLanguage.g:393:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) ) + // InternalTestLanguage.g:393:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) { - // InternalTestLanguage.g:374:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) + // InternalTestLanguage.g:393:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) int alt6=2; int LA6_0 = input.LA(1); @@ -360,10 +382,10 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt6) { case 1 : - // InternalTestLanguage.g:374:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' + // InternalTestLanguage.g:393:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' { match('\"'); - // InternalTestLanguage.g:374:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* + // InternalTestLanguage.g:393:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* loop4: do { int alt4=3; @@ -379,7 +401,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt4) { case 1 : - // InternalTestLanguage.g:374:21: '\\\\' . + // InternalTestLanguage.g:393:21: '\\\\' . { match('\\'); matchAny(); @@ -387,7 +409,7 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 2 : - // InternalTestLanguage.g:374:28: ~ ( ( '\\\\' | '\"' ) ) + // InternalTestLanguage.g:393:28: ~ ( ( '\\\\' | '\"' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -412,10 +434,10 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 2 : - // InternalTestLanguage.g:374:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' + // InternalTestLanguage.g:393:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' { match('\''); - // InternalTestLanguage.g:374:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* + // InternalTestLanguage.g:393:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* loop5: do { int alt5=3; @@ -431,7 +453,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt5) { case 1 : - // InternalTestLanguage.g:374:54: '\\\\' . + // InternalTestLanguage.g:393:54: '\\\\' . { match('\\'); matchAny(); @@ -439,7 +461,7 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 2 : - // InternalTestLanguage.g:374:61: ~ ( ( '\\\\' | '\\'' ) ) + // InternalTestLanguage.g:393:61: ~ ( ( '\\\\' | '\\'' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -482,12 +504,12 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_ML_COMMENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:376:17: ( '/*' ( options {greedy=false; } : . )* '*/' ) - // InternalTestLanguage.g:376:19: '/*' ( options {greedy=false; } : . )* '*/' + // InternalTestLanguage.g:395:17: ( '/*' ( options {greedy=false; } : . )* '*/' ) + // InternalTestLanguage.g:395:19: '/*' ( options {greedy=false; } : . )* '*/' { match("/*"); - // InternalTestLanguage.g:376:24: ( options {greedy=false; } : . )* + // InternalTestLanguage.g:395:24: ( options {greedy=false; } : . )* loop7: do { int alt7=2; @@ -512,7 +534,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt7) { case 1 : - // InternalTestLanguage.g:376:52: . + // InternalTestLanguage.g:395:52: . { matchAny(); @@ -542,12 +564,12 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_SL_COMMENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:378:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? ) - // InternalTestLanguage.g:378:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? + // InternalTestLanguage.g:397:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? ) + // InternalTestLanguage.g:397:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? { match("//"); - // InternalTestLanguage.g:378:24: (~ ( ( '\\n' | '\\r' ) ) )* + // InternalTestLanguage.g:397:24: (~ ( ( '\\n' | '\\r' ) ) )* loop8: do { int alt8=2; @@ -560,7 +582,7 @@ public class InternalTestLanguageLexer extends Lexer { switch (alt8) { case 1 : - // InternalTestLanguage.g:378:24: ~ ( ( '\\n' | '\\r' ) ) + // InternalTestLanguage.g:397:24: ~ ( ( '\\n' | '\\r' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -580,7 +602,7 @@ public class InternalTestLanguageLexer extends Lexer { } } while (true); - // InternalTestLanguage.g:378:40: ( ( '\\r' )? '\\n' )? + // InternalTestLanguage.g:397:40: ( ( '\\r' )? '\\n' )? int alt10=2; int LA10_0 = input.LA(1); @@ -589,9 +611,9 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt10) { case 1 : - // InternalTestLanguage.g:378:41: ( '\\r' )? '\\n' + // InternalTestLanguage.g:397:41: ( '\\r' )? '\\n' { - // InternalTestLanguage.g:378:41: ( '\\r' )? + // InternalTestLanguage.g:397:41: ( '\\r' )? int alt9=2; int LA9_0 = input.LA(1); @@ -600,7 +622,7 @@ public class InternalTestLanguageLexer extends Lexer { } switch (alt9) { case 1 : - // InternalTestLanguage.g:378:41: '\\r' + // InternalTestLanguage.g:397:41: '\\r' { match('\r'); @@ -632,10 +654,10 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:380:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // InternalTestLanguage.g:380:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // InternalTestLanguage.g:399:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // InternalTestLanguage.g:399:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // InternalTestLanguage.g:380:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // InternalTestLanguage.g:399:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt11=0; loop11: do { @@ -689,8 +711,8 @@ public class InternalTestLanguageLexer extends Lexer { try { int _type = RULE_ANY_OTHER; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalTestLanguage.g:382:16: ( . ) - // InternalTestLanguage.g:382:18: . + // InternalTestLanguage.g:401:16: ( . ) + // InternalTestLanguage.g:401:18: . { matchAny(); @@ -705,8 +727,8 @@ public class InternalTestLanguageLexer extends Lexer { // $ANTLR end "RULE_ANY_OTHER" public void mTokens() throws RecognitionException { - // InternalTestLanguage.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER ) - int alt12=15; + // InternalTestLanguage.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER ) + int alt12=16; alt12 = dfa12.predict(input); switch (alt12) { case 1 : @@ -766,49 +788,56 @@ public class InternalTestLanguageLexer extends Lexer { } break; case 9 : - // InternalTestLanguage.g:1:58: RULE_ID + // InternalTestLanguage.g:1:58: T__19 + { + mT__19(); + + } + break; + case 10 : + // InternalTestLanguage.g:1:64: RULE_ID { mRULE_ID(); } break; - case 10 : - // InternalTestLanguage.g:1:66: RULE_INT + case 11 : + // InternalTestLanguage.g:1:72: RULE_INT { mRULE_INT(); } break; - case 11 : - // InternalTestLanguage.g:1:75: RULE_STRING + case 12 : + // InternalTestLanguage.g:1:81: RULE_STRING { mRULE_STRING(); } break; - case 12 : - // InternalTestLanguage.g:1:87: RULE_ML_COMMENT + case 13 : + // InternalTestLanguage.g:1:93: RULE_ML_COMMENT { mRULE_ML_COMMENT(); } break; - case 13 : - // InternalTestLanguage.g:1:103: RULE_SL_COMMENT + case 14 : + // InternalTestLanguage.g:1:109: RULE_SL_COMMENT { mRULE_SL_COMMENT(); } break; - case 14 : - // InternalTestLanguage.g:1:119: RULE_WS + case 15 : + // InternalTestLanguage.g:1:125: RULE_WS { mRULE_WS(); } break; - case 15 : - // InternalTestLanguage.g:1:127: RULE_ANY_OTHER + case 16 : + // InternalTestLanguage.g:1:133: RULE_ANY_OTHER { mRULE_ANY_OTHER(); @@ -822,64 +851,72 @@ public class InternalTestLanguageLexer extends Lexer { protected DFA12 dfa12 = new DFA12(this); static final String DFA12_eotS = - "\1\uffff\1\22\4\uffff\3\22\1\20\2\uffff\3\20\2\uffff\1\22\5\uffff\3\22\5\uffff\2\22\1\45\1\22\1\47\1\22\1\uffff\1\22\1\uffff\2\22\1\54\1\22\1\uffff\1\56\1\uffff"; + "\1\uffff\2\23\4\uffff\3\23\1\21\2\uffff\3\21\2\uffff\1\23\1\uffff\1\23\4\uffff\3\23\5\uffff\3\23\1\51\1\23\1\53\2\23\1\uffff\1\23\1\uffff\4\23\1\63\1\23\1\65\1\uffff\1\66\2\uffff"; static final String DFA12_eofS = - "\57\uffff"; + "\67\uffff"; static final String DFA12_minS = - "\1\0\1\171\4\uffff\1\164\1\156\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\160\5\uffff\1\162\1\164\1\157\5\uffff\1\145\1\151\1\60\1\154\1\60\1\156\1\uffff\1\145\1\uffff\1\147\1\141\1\60\1\156\1\uffff\1\60\1\uffff"; + "\1\0\1\171\1\170\4\uffff\1\164\1\156\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\160\1\uffff\1\164\4\uffff\1\162\1\164\1\157\5\uffff\2\145\1\151\1\60\1\154\1\60\2\156\1\uffff\1\145\1\uffff\1\144\1\147\1\141\1\163\1\60\1\156\1\60\1\uffff\1\60\2\uffff"; static final String DFA12_maxS = - "\1\uffff\1\171\4\uffff\1\164\1\156\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\160\5\uffff\1\162\1\164\1\157\5\uffff\1\145\1\151\1\172\1\154\1\172\1\156\1\uffff\1\145\1\uffff\1\147\1\141\1\172\1\156\1\uffff\1\172\1\uffff"; + "\1\uffff\1\171\1\170\4\uffff\1\164\1\156\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\160\1\uffff\1\164\4\uffff\1\162\1\164\1\157\5\uffff\2\145\1\151\1\172\1\154\1\172\2\156\1\uffff\1\145\1\uffff\1\144\1\147\1\141\1\163\1\172\1\156\1\172\1\uffff\1\172\2\uffff"; static final String DFA12_acceptS = - "\2\uffff\1\2\1\3\1\4\1\5\4\uffff\1\11\1\12\3\uffff\1\16\1\17\1\uffff\1\11\1\2\1\3\1\4\1\5\3\uffff\1\12\1\13\1\14\1\15\1\16\6\uffff\1\7\1\uffff\1\1\4\uffff\1\6\1\uffff\1\10"; + "\3\uffff\1\3\1\4\1\5\1\6\4\uffff\1\12\1\13\3\uffff\1\17\1\20\1\uffff\1\12\1\uffff\1\3\1\4\1\5\1\6\3\uffff\1\13\1\14\1\15\1\16\1\17\10\uffff\1\10\1\uffff\1\1\7\uffff\1\7\1\uffff\1\2\1\11"; static final String DFA12_specialS = - "\1\1\13\uffff\1\2\1\0\41\uffff}>"; + "\1\2\14\uffff\1\0\1\1\50\uffff}>"; static final String[] DFA12_transitionS = { - "\11\20\2\17\2\20\1\17\22\20\1\17\1\20\1\14\4\20\1\15\7\20\1\16\12\13\7\20\32\12\1\4\1\20\1\5\1\11\1\12\1\20\1\12\1\10\6\12\1\7\11\12\1\6\1\1\6\12\1\2\1\20\1\3\uff82\20", - "\1\21", + "\11\21\2\20\2\21\1\20\22\21\1\20\1\21\1\15\4\21\1\16\7\21\1\17\12\14\7\21\32\13\1\5\1\21\1\6\1\12\1\13\1\21\1\13\1\11\2\13\1\2\3\13\1\10\11\13\1\7\1\1\6\13\1\3\1\21\1\4\uff82\21", + "\1\22", + "\1\24", "", "", "", "", - "\1\27", - "\1\30", "\1\31", - "\32\22\4\uffff\1\22\1\uffff\32\22", + "\1\32", + "\1\33", + "\32\23\4\uffff\1\23\1\uffff\32\23", "", "", - "\0\33", - "\0\33", - "\1\34\4\uffff\1\35", + "\0\35", + "\0\35", + "\1\36\4\uffff\1\37", "", "", - "\1\37", - "", - "", - "", - "", - "", - "\1\40", "\1\41", - "\1\42", "", + "\1\42", "", "", "", "", "\1\43", "\1\44", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", + "\1\45", + "", + "", + "", + "", + "", "\1\46", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", + "\1\47", "\1\50", - "", - "\1\51", - "", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", "\1\52", - "\1\53", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "\1\54", "\1\55", "", - "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22", + "\1\56", + "", + "\1\57", + "\1\60", + "\1\61", + "\1\62", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "\1\64", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "", + "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23", + "", "" }; @@ -913,7 +950,7 @@ public class InternalTestLanguageLexer extends Lexer { this.transition = DFA12_transition; } public String getDescription() { - return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );"; + return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { IntStream input = _input; @@ -923,57 +960,59 @@ public class InternalTestLanguageLexer extends Lexer { int LA12_13 = input.LA(1); s = -1; - if ( ((LA12_13>='\u0000' && LA12_13<='\uFFFF')) ) {s = 27;} + if ( ((LA12_13>='\u0000' && LA12_13<='\uFFFF')) ) {s = 29;} - else s = 16; + else s = 17; if ( s>=0 ) return s; break; case 1 : + int LA12_14 = input.LA(1); + + s = -1; + if ( ((LA12_14>='\u0000' && LA12_14<='\uFFFF')) ) {s = 29;} + + else s = 17; + + if ( s>=0 ) return s; + break; + case 2 : int LA12_0 = input.LA(1); s = -1; if ( (LA12_0=='t') ) {s = 1;} - else if ( (LA12_0=='{') ) {s = 2;} + else if ( (LA12_0=='e') ) {s = 2;} - else if ( (LA12_0=='}') ) {s = 3;} + else if ( (LA12_0=='{') ) {s = 3;} - else if ( (LA12_0=='[') ) {s = 4;} + else if ( (LA12_0=='}') ) {s = 4;} - else if ( (LA12_0==']') ) {s = 5;} + else if ( (LA12_0=='[') ) {s = 5;} - else if ( (LA12_0=='s') ) {s = 6;} + else if ( (LA12_0==']') ) {s = 6;} - else if ( (LA12_0=='i') ) {s = 7;} + else if ( (LA12_0=='s') ) {s = 7;} - else if ( (LA12_0=='b') ) {s = 8;} + else if ( (LA12_0=='i') ) {s = 8;} - else if ( (LA12_0=='^') ) {s = 9;} + else if ( (LA12_0=='b') ) {s = 9;} - else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='a'||(LA12_0>='c' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='r')||(LA12_0>='u' && LA12_0<='z')) ) {s = 10;} + else if ( (LA12_0=='^') ) {s = 10;} - else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 11;} + else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='a'||(LA12_0>='c' && LA12_0<='d')||(LA12_0>='f' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='r')||(LA12_0>='u' && LA12_0<='z')) ) {s = 11;} - else if ( (LA12_0=='\"') ) {s = 12;} + else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 12;} - else if ( (LA12_0=='\'') ) {s = 13;} + else if ( (LA12_0=='\"') ) {s = 13;} - else if ( (LA12_0=='/') ) {s = 14;} + else if ( (LA12_0=='\'') ) {s = 14;} - else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 15;} + else if ( (LA12_0=='/') ) {s = 15;} - else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='.')||(LA12_0>=':' && LA12_0<='@')||LA12_0=='\\'||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 16;} + else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 16;} - if ( s>=0 ) return s; - break; - case 2 : - int LA12_12 = input.LA(1); - - s = -1; - if ( ((LA12_12>='\u0000' && LA12_12<='\uFFFF')) ) {s = 27;} - - else s = 16; + else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='.')||(LA12_0>=':' && LA12_0<='@')||LA12_0=='\\'||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 17;} if ( s>=0 ) return s; break; diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageParser.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageParser.java index 555282b76..68bd313a3 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageParser.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/parser/antlr/internal/InternalTestLanguageParser.java @@ -21,24 +21,25 @@ import java.util.ArrayList; @SuppressWarnings("all") public class InternalTestLanguageParser extends AbstractInternalAntlrParser { public static final String[] tokenNames = new String[] { - "", "", "", "", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'type'", "'{'", "'}'", "'['", "']'", "'string'", "'int'", "'boolean'" + "", "", "", "", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'type'", "'extends'", "'{'", "'}'", "'['", "']'", "'string'", "'int'", "'boolean'" }; - public static final int RULE_ID=4; - public static final int RULE_WS=9; public static final int RULE_STRING=6; - public static final int RULE_ANY_OTHER=10; public static final int RULE_SL_COMMENT=8; + public static final int T__19=19; public static final int T__15=15; public static final int T__16=16; public static final int T__17=17; - public static final int RULE_INT=5; public static final int T__18=18; public static final int T__11=11; - public static final int RULE_ML_COMMENT=7; public static final int T__12=12; public static final int T__13=13; public static final int T__14=14; public static final int EOF=-1; + public static final int RULE_ID=4; + public static final int RULE_WS=9; + public static final int RULE_ANY_OTHER=10; + public static final int RULE_INT=5; + public static final int RULE_ML_COMMENT=7; // delegates // delegators @@ -235,26 +236,28 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleTypeDeclaration" - // InternalTestLanguage.g:111:1: ruleTypeDeclaration returns [EObject current=null] : (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_properties_3_0= ruleProperty ) )* otherlv_4= '}' ) ; + // InternalTestLanguage.g:111:1: ruleTypeDeclaration returns [EObject current=null] : (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_properties_5_0= ruleProperty ) )* otherlv_6= '}' ) ; public final EObject ruleTypeDeclaration() throws RecognitionException { EObject current = null; Token otherlv_0=null; Token lv_name_1_0=null; Token otherlv_2=null; + Token otherlv_3=null; Token otherlv_4=null; - EObject lv_properties_3_0 = null; + Token otherlv_6=null; + EObject lv_properties_5_0 = null; enterRule(); try { - // InternalTestLanguage.g:117:2: ( (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_properties_3_0= ruleProperty ) )* otherlv_4= '}' ) ) - // InternalTestLanguage.g:118:2: (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_properties_3_0= ruleProperty ) )* otherlv_4= '}' ) + // InternalTestLanguage.g:117:2: ( (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_properties_5_0= ruleProperty ) )* otherlv_6= '}' ) ) + // InternalTestLanguage.g:118:2: (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_properties_5_0= ruleProperty ) )* otherlv_6= '}' ) { - // InternalTestLanguage.g:118:2: (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_properties_3_0= ruleProperty ) )* otherlv_4= '}' ) - // InternalTestLanguage.g:119:3: otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_properties_3_0= ruleProperty ) )* otherlv_4= '}' + // InternalTestLanguage.g:118:2: (otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_properties_5_0= ruleProperty ) )* otherlv_6= '}' ) + // InternalTestLanguage.g:119:3: otherlv_0= 'type' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_properties_5_0= ruleProperty ) )* otherlv_6= '}' { otherlv_0=(Token)match(input,11,FOLLOW_4); @@ -286,33 +289,75 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } - otherlv_2=(Token)match(input,12,FOLLOW_6); + // InternalTestLanguage.g:141:3: (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? + int alt2=2; + int LA2_0 = input.LA(1); - newLeafNode(otherlv_2, grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_2()); + if ( (LA2_0==12) ) { + alt2=1; + } + switch (alt2) { + case 1 : + // InternalTestLanguage.g:142:4: otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) + { + otherlv_2=(Token)match(input,12,FOLLOW_4); + + newLeafNode(otherlv_2, grammarAccess.getTypeDeclarationAccess().getExtendsKeyword_2_0()); + + // InternalTestLanguage.g:146:4: ( (otherlv_3= RULE_ID ) ) + // InternalTestLanguage.g:147:5: (otherlv_3= RULE_ID ) + { + // InternalTestLanguage.g:147:5: (otherlv_3= RULE_ID ) + // InternalTestLanguage.g:148:6: otherlv_3= RULE_ID + { + + if (current==null) { + current = createModelElement(grammarAccess.getTypeDeclarationRule()); + } + + otherlv_3=(Token)match(input,RULE_ID,FOLLOW_6); + + newLeafNode(otherlv_3, grammarAccess.getTypeDeclarationAccess().getSuperTypeTypeDeclarationCrossReference_2_1_0()); + + + } + + + } + + + } + break; + + } + + otherlv_4=(Token)match(input,13,FOLLOW_7); + + newLeafNode(otherlv_4, grammarAccess.getTypeDeclarationAccess().getLeftCurlyBracketKeyword_3()); - // InternalTestLanguage.g:145:3: ( (lv_properties_3_0= ruleProperty ) )* - loop2: + // InternalTestLanguage.g:164:3: ( (lv_properties_5_0= ruleProperty ) )* + loop3: do { - int alt2=2; - int LA2_0 = input.LA(1); + int alt3=2; + int LA3_0 = input.LA(1); - if ( (LA2_0==RULE_ID||(LA2_0>=16 && LA2_0<=18)) ) { - alt2=1; + if ( (LA3_0==RULE_ID||(LA3_0>=17 && LA3_0<=19)) ) { + alt3=1; } - switch (alt2) { + switch (alt3) { case 1 : - // InternalTestLanguage.g:146:4: (lv_properties_3_0= ruleProperty ) + // InternalTestLanguage.g:165:4: (lv_properties_5_0= ruleProperty ) { - // InternalTestLanguage.g:146:4: (lv_properties_3_0= ruleProperty ) - // InternalTestLanguage.g:147:5: lv_properties_3_0= ruleProperty + // InternalTestLanguage.g:165:4: (lv_properties_5_0= ruleProperty ) + // InternalTestLanguage.g:166:5: lv_properties_5_0= ruleProperty { - newCompositeNode(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_3_0()); + newCompositeNode(grammarAccess.getTypeDeclarationAccess().getPropertiesPropertyParserRuleCall_4_0()); - pushFollow(FOLLOW_6); - lv_properties_3_0=ruleProperty(); + pushFollow(FOLLOW_7); + lv_properties_5_0=ruleProperty(); state._fsp--; @@ -323,7 +368,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { add( current, "properties", - lv_properties_3_0, + lv_properties_5_0, "org.eclipse.xtext.ide.tests.testlanguage.TestLanguage.Property"); afterParserOrEnumRuleCall(); @@ -335,13 +380,13 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { break; default : - break loop2; + break loop3; } } while (true); - otherlv_4=(Token)match(input,13,FOLLOW_2); + otherlv_6=(Token)match(input,14,FOLLOW_2); - newLeafNode(otherlv_4, grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_4()); + newLeafNode(otherlv_6, grammarAccess.getTypeDeclarationAccess().getRightCurlyBracketKeyword_5()); } @@ -366,7 +411,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRuleProperty" - // InternalTestLanguage.g:172:1: entryRuleProperty returns [EObject current=null] : iv_ruleProperty= ruleProperty EOF ; + // InternalTestLanguage.g:191:1: entryRuleProperty returns [EObject current=null] : iv_ruleProperty= ruleProperty EOF ; public final EObject entryRuleProperty() throws RecognitionException { EObject current = null; @@ -374,8 +419,8 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { try { - // InternalTestLanguage.g:172:49: (iv_ruleProperty= ruleProperty EOF ) - // InternalTestLanguage.g:173:2: iv_ruleProperty= ruleProperty EOF + // InternalTestLanguage.g:191:49: (iv_ruleProperty= ruleProperty EOF ) + // InternalTestLanguage.g:192:2: iv_ruleProperty= ruleProperty EOF { newCompositeNode(grammarAccess.getPropertyRule()); pushFollow(FOLLOW_1); @@ -402,7 +447,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleProperty" - // InternalTestLanguage.g:179:1: ruleProperty returns [EObject current=null] : ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) ; + // InternalTestLanguage.g:198:1: ruleProperty returns [EObject current=null] : ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) ; public final EObject ruleProperty() throws RecognitionException { EObject current = null; @@ -414,17 +459,17 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalTestLanguage.g:185:2: ( ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) ) - // InternalTestLanguage.g:186:2: ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) + // InternalTestLanguage.g:204:2: ( ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) ) + // InternalTestLanguage.g:205:2: ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) { - // InternalTestLanguage.g:186:2: ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) - // InternalTestLanguage.g:187:3: ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) + // InternalTestLanguage.g:205:2: ( ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) ) + // InternalTestLanguage.g:206:3: ( (lv_type_0_0= ruleType ) ) ( (lv_name_1_0= RULE_ID ) ) { - // InternalTestLanguage.g:187:3: ( (lv_type_0_0= ruleType ) ) - // InternalTestLanguage.g:188:4: (lv_type_0_0= ruleType ) + // InternalTestLanguage.g:206:3: ( (lv_type_0_0= ruleType ) ) + // InternalTestLanguage.g:207:4: (lv_type_0_0= ruleType ) { - // InternalTestLanguage.g:188:4: (lv_type_0_0= ruleType ) - // InternalTestLanguage.g:189:5: lv_type_0_0= ruleType + // InternalTestLanguage.g:207:4: (lv_type_0_0= ruleType ) + // InternalTestLanguage.g:208:5: lv_type_0_0= ruleType { newCompositeNode(grammarAccess.getPropertyAccess().getTypeTypeParserRuleCall_0_0()); @@ -451,11 +496,11 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } - // InternalTestLanguage.g:206:3: ( (lv_name_1_0= RULE_ID ) ) - // InternalTestLanguage.g:207:4: (lv_name_1_0= RULE_ID ) + // InternalTestLanguage.g:225:3: ( (lv_name_1_0= RULE_ID ) ) + // InternalTestLanguage.g:226:4: (lv_name_1_0= RULE_ID ) { - // InternalTestLanguage.g:207:4: (lv_name_1_0= RULE_ID ) - // InternalTestLanguage.g:208:5: lv_name_1_0= RULE_ID + // InternalTestLanguage.g:226:4: (lv_name_1_0= RULE_ID ) + // InternalTestLanguage.g:227:5: lv_name_1_0= RULE_ID { lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_2); @@ -500,7 +545,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRuleType" - // InternalTestLanguage.g:228:1: entryRuleType returns [EObject current=null] : iv_ruleType= ruleType EOF ; + // InternalTestLanguage.g:247:1: entryRuleType returns [EObject current=null] : iv_ruleType= ruleType EOF ; public final EObject entryRuleType() throws RecognitionException { EObject current = null; @@ -508,8 +553,8 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { try { - // InternalTestLanguage.g:228:45: (iv_ruleType= ruleType EOF ) - // InternalTestLanguage.g:229:2: iv_ruleType= ruleType EOF + // InternalTestLanguage.g:247:45: (iv_ruleType= ruleType EOF ) + // InternalTestLanguage.g:248:2: iv_ruleType= ruleType EOF { newCompositeNode(grammarAccess.getTypeRule()); pushFollow(FOLLOW_1); @@ -536,7 +581,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleType" - // InternalTestLanguage.g:235:1: ruleType returns [EObject current=null] : ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) ; + // InternalTestLanguage.g:254:1: ruleType returns [EObject current=null] : ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) ; public final EObject ruleType() throws RecognitionException { EObject current = null; @@ -551,36 +596,36 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalTestLanguage.g:241:2: ( ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) ) - // InternalTestLanguage.g:242:2: ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) + // InternalTestLanguage.g:260:2: ( ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) ) + // InternalTestLanguage.g:261:2: ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) { - // InternalTestLanguage.g:242:2: ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) - // InternalTestLanguage.g:243:3: (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* + // InternalTestLanguage.g:261:2: ( (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* ) + // InternalTestLanguage.g:262:3: (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* { - // InternalTestLanguage.g:243:3: (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) - int alt3=2; - int LA3_0 = input.LA(1); + // InternalTestLanguage.g:262:3: (this_TypeReference_0= ruleTypeReference | this_PrimitiveType_1= rulePrimitiveType ) + int alt4=2; + int LA4_0 = input.LA(1); - if ( (LA3_0==RULE_ID) ) { - alt3=1; + if ( (LA4_0==RULE_ID) ) { + alt4=1; } - else if ( ((LA3_0>=16 && LA3_0<=18)) ) { - alt3=2; + else if ( ((LA4_0>=17 && LA4_0<=19)) ) { + alt4=2; } else { NoViableAltException nvae = - new NoViableAltException("", 3, 0, input); + new NoViableAltException("", 4, 0, input); throw nvae; } - switch (alt3) { + switch (alt4) { case 1 : - // InternalTestLanguage.g:244:4: this_TypeReference_0= ruleTypeReference + // InternalTestLanguage.g:263:4: this_TypeReference_0= ruleTypeReference { newCompositeNode(grammarAccess.getTypeAccess().getTypeReferenceParserRuleCall_0_0()); - pushFollow(FOLLOW_7); + pushFollow(FOLLOW_8); this_TypeReference_0=ruleTypeReference(); state._fsp--; @@ -593,12 +638,12 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalTestLanguage.g:253:4: this_PrimitiveType_1= rulePrimitiveType + // InternalTestLanguage.g:272:4: this_PrimitiveType_1= rulePrimitiveType { newCompositeNode(grammarAccess.getTypeAccess().getPrimitiveTypeParserRuleCall_0_1()); - pushFollow(FOLLOW_7); + pushFollow(FOLLOW_8); this_PrimitiveType_1=rulePrimitiveType(); state._fsp--; @@ -613,28 +658,28 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } - // InternalTestLanguage.g:262:3: ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* - loop4: + // InternalTestLanguage.g:281:3: ( ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' )* + loop5: do { - int alt4=2; - int LA4_0 = input.LA(1); + int alt5=2; + int LA5_0 = input.LA(1); - if ( (LA4_0==14) ) { - alt4=1; + if ( (LA5_0==15) ) { + alt5=1; } - switch (alt4) { + switch (alt5) { case 1 : - // InternalTestLanguage.g:263:4: ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' + // InternalTestLanguage.g:282:4: ( (lv_arrayDiemensions_2_0= '[' ) ) otherlv_3= ']' { - // InternalTestLanguage.g:263:4: ( (lv_arrayDiemensions_2_0= '[' ) ) - // InternalTestLanguage.g:264:5: (lv_arrayDiemensions_2_0= '[' ) + // InternalTestLanguage.g:282:4: ( (lv_arrayDiemensions_2_0= '[' ) ) + // InternalTestLanguage.g:283:5: (lv_arrayDiemensions_2_0= '[' ) { - // InternalTestLanguage.g:264:5: (lv_arrayDiemensions_2_0= '[' ) - // InternalTestLanguage.g:265:6: lv_arrayDiemensions_2_0= '[' + // InternalTestLanguage.g:283:5: (lv_arrayDiemensions_2_0= '[' ) + // InternalTestLanguage.g:284:6: lv_arrayDiemensions_2_0= '[' { - lv_arrayDiemensions_2_0=(Token)match(input,14,FOLLOW_8); + lv_arrayDiemensions_2_0=(Token)match(input,15,FOLLOW_9); newLeafNode(lv_arrayDiemensions_2_0, grammarAccess.getTypeAccess().getArrayDiemensionsLeftSquareBracketKeyword_1_0_0()); @@ -650,7 +695,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } - otherlv_3=(Token)match(input,15,FOLLOW_7); + otherlv_3=(Token)match(input,16,FOLLOW_8); newLeafNode(otherlv_3, grammarAccess.getTypeAccess().getRightSquareBracketKeyword_1_1()); @@ -659,7 +704,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { break; default : - break loop4; + break loop5; } } while (true); @@ -686,7 +731,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRuleTypeReference" - // InternalTestLanguage.g:286:1: entryRuleTypeReference returns [EObject current=null] : iv_ruleTypeReference= ruleTypeReference EOF ; + // InternalTestLanguage.g:305:1: entryRuleTypeReference returns [EObject current=null] : iv_ruleTypeReference= ruleTypeReference EOF ; public final EObject entryRuleTypeReference() throws RecognitionException { EObject current = null; @@ -694,8 +739,8 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { try { - // InternalTestLanguage.g:286:54: (iv_ruleTypeReference= ruleTypeReference EOF ) - // InternalTestLanguage.g:287:2: iv_ruleTypeReference= ruleTypeReference EOF + // InternalTestLanguage.g:305:54: (iv_ruleTypeReference= ruleTypeReference EOF ) + // InternalTestLanguage.g:306:2: iv_ruleTypeReference= ruleTypeReference EOF { newCompositeNode(grammarAccess.getTypeReferenceRule()); pushFollow(FOLLOW_1); @@ -722,7 +767,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleTypeReference" - // InternalTestLanguage.g:293:1: ruleTypeReference returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ; + // InternalTestLanguage.g:312:1: ruleTypeReference returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ; public final EObject ruleTypeReference() throws RecognitionException { EObject current = null; @@ -732,14 +777,14 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalTestLanguage.g:299:2: ( ( (otherlv_0= RULE_ID ) ) ) - // InternalTestLanguage.g:300:2: ( (otherlv_0= RULE_ID ) ) + // InternalTestLanguage.g:318:2: ( ( (otherlv_0= RULE_ID ) ) ) + // InternalTestLanguage.g:319:2: ( (otherlv_0= RULE_ID ) ) { - // InternalTestLanguage.g:300:2: ( (otherlv_0= RULE_ID ) ) - // InternalTestLanguage.g:301:3: (otherlv_0= RULE_ID ) + // InternalTestLanguage.g:319:2: ( (otherlv_0= RULE_ID ) ) + // InternalTestLanguage.g:320:3: (otherlv_0= RULE_ID ) { - // InternalTestLanguage.g:301:3: (otherlv_0= RULE_ID ) - // InternalTestLanguage.g:302:4: otherlv_0= RULE_ID + // InternalTestLanguage.g:320:3: (otherlv_0= RULE_ID ) + // InternalTestLanguage.g:321:4: otherlv_0= RULE_ID { if (current==null) { @@ -776,7 +821,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRulePrimitiveType" - // InternalTestLanguage.g:316:1: entryRulePrimitiveType returns [EObject current=null] : iv_rulePrimitiveType= rulePrimitiveType EOF ; + // InternalTestLanguage.g:335:1: entryRulePrimitiveType returns [EObject current=null] : iv_rulePrimitiveType= rulePrimitiveType EOF ; public final EObject entryRulePrimitiveType() throws RecognitionException { EObject current = null; @@ -784,8 +829,8 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { try { - // InternalTestLanguage.g:316:54: (iv_rulePrimitiveType= rulePrimitiveType EOF ) - // InternalTestLanguage.g:317:2: iv_rulePrimitiveType= rulePrimitiveType EOF + // InternalTestLanguage.g:335:54: (iv_rulePrimitiveType= rulePrimitiveType EOF ) + // InternalTestLanguage.g:336:2: iv_rulePrimitiveType= rulePrimitiveType EOF { newCompositeNode(grammarAccess.getPrimitiveTypeRule()); pushFollow(FOLLOW_1); @@ -812,7 +857,7 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { // $ANTLR start "rulePrimitiveType" - // InternalTestLanguage.g:323:1: rulePrimitiveType returns [EObject current=null] : ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) ; + // InternalTestLanguage.g:342:1: rulePrimitiveType returns [EObject current=null] : ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) ; public final EObject rulePrimitiveType() throws RecognitionException { EObject current = null; @@ -824,45 +869,45 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalTestLanguage.g:329:2: ( ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) ) - // InternalTestLanguage.g:330:2: ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) + // InternalTestLanguage.g:348:2: ( ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) ) + // InternalTestLanguage.g:349:2: ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) { - // InternalTestLanguage.g:330:2: ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) - // InternalTestLanguage.g:331:3: ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) + // InternalTestLanguage.g:349:2: ( ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) ) + // InternalTestLanguage.g:350:3: ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) { - // InternalTestLanguage.g:331:3: ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) - // InternalTestLanguage.g:332:4: (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) + // InternalTestLanguage.g:350:3: ( (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) ) + // InternalTestLanguage.g:351:4: (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) { - // InternalTestLanguage.g:332:4: (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) - int alt5=3; + // InternalTestLanguage.g:351:4: (lv_name_0_1= 'string' | lv_name_0_2= 'int' | lv_name_0_3= 'boolean' ) + int alt6=3; switch ( input.LA(1) ) { - case 16: - { - alt5=1; - } - break; case 17: { - alt5=2; + alt6=1; } break; case 18: { - alt5=3; + alt6=2; + } + break; + case 19: + { + alt6=3; } break; default: NoViableAltException nvae = - new NoViableAltException("", 5, 0, input); + new NoViableAltException("", 6, 0, input); throw nvae; } - switch (alt5) { + switch (alt6) { case 1 : - // InternalTestLanguage.g:333:5: lv_name_0_1= 'string' + // InternalTestLanguage.g:352:5: lv_name_0_1= 'string' { - lv_name_0_1=(Token)match(input,16,FOLLOW_2); + lv_name_0_1=(Token)match(input,17,FOLLOW_2); newLeafNode(lv_name_0_1, grammarAccess.getPrimitiveTypeAccess().getNameStringKeyword_0_0()); @@ -876,9 +921,9 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalTestLanguage.g:344:5: lv_name_0_2= 'int' + // InternalTestLanguage.g:363:5: lv_name_0_2= 'int' { - lv_name_0_2=(Token)match(input,17,FOLLOW_2); + lv_name_0_2=(Token)match(input,18,FOLLOW_2); newLeafNode(lv_name_0_2, grammarAccess.getPrimitiveTypeAccess().getNameIntKeyword_0_1()); @@ -892,9 +937,9 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { } break; case 3 : - // InternalTestLanguage.g:355:5: lv_name_0_3= 'boolean' + // InternalTestLanguage.g:374:5: lv_name_0_3= 'boolean' { - lv_name_0_3=(Token)match(input,18,FOLLOW_2); + lv_name_0_3=(Token)match(input,19,FOLLOW_2); newLeafNode(lv_name_0_3, grammarAccess.getPrimitiveTypeAccess().getNameBooleanKeyword_0_2()); @@ -943,9 +988,10 @@ public class InternalTestLanguageParser extends AbstractInternalAntlrParser { public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000000802L}); public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000001000L}); - public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000072010L}); - public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000004002L}); - public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000008000L}); + public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000003000L}); + public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000002000L}); + public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x00000000000E4010L}); + public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000008002L}); + public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000010000L}); } \ No newline at end of file diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/serializer/TestLanguageSemanticSequencer.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/serializer/TestLanguageSemanticSequencer.java index d0c6342b1..ad13ca5dc 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/serializer/TestLanguageSemanticSequencer.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/serializer/TestLanguageSemanticSequencer.java @@ -136,7 +136,7 @@ public class TestLanguageSemanticSequencer extends AbstractDelegatingSemanticSeq * TypeDeclaration returns TypeDeclaration * * Constraint: - * (name=ID properties+=Property*) + * (name=ID superType=[TypeDeclaration|ID]? properties+=Property*) */ protected void sequence_TypeDeclaration(ISerializationContext context, TypeDeclaration semanticObject) { genericSequencer.createSequence(context, semanticObject); diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/services/TestLanguageGrammarAccess.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/services/TestLanguageGrammarAccess.java index 84c111f53..27f658e76 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/services/TestLanguageGrammarAccess.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/services/TestLanguageGrammarAccess.java @@ -48,18 +48,23 @@ public class TestLanguageGrammarAccess extends AbstractGrammarElementFinder { private final Keyword cTypeKeyword_0 = (Keyword)cGroup.eContents().get(0); private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1); private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0); - private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2); - private final Assignment cPropertiesAssignment_3 = (Assignment)cGroup.eContents().get(3); - private final RuleCall cPropertiesPropertyParserRuleCall_3_0 = (RuleCall)cPropertiesAssignment_3.eContents().get(0); - private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4); + private final Group cGroup_2 = (Group)cGroup.eContents().get(2); + private final Keyword cExtendsKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0); + private final Assignment cSuperTypeAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1); + private final CrossReference cSuperTypeTypeDeclarationCrossReference_2_1_0 = (CrossReference)cSuperTypeAssignment_2_1.eContents().get(0); + private final RuleCall cSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1 = (RuleCall)cSuperTypeTypeDeclarationCrossReference_2_1_0.eContents().get(1); + private final Keyword cLeftCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3); + private final Assignment cPropertiesAssignment_4 = (Assignment)cGroup.eContents().get(4); + private final RuleCall cPropertiesPropertyParserRuleCall_4_0 = (RuleCall)cPropertiesAssignment_4.eContents().get(0); + private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5); //TypeDeclaration: - // 'type' name=ID '{' + // 'type' name=ID ('extends' superType=[TypeDeclaration])? '{' // properties+=Property* // '}'; @Override public ParserRule getRule() { return rule; } - //'type' name=ID '{' properties+=Property* '}' + //'type' name=ID ('extends' superType=[TypeDeclaration])? '{' properties+=Property* '}' public Group getGroup() { return cGroup; } //'type' @@ -71,17 +76,32 @@ public class TestLanguageGrammarAccess extends AbstractGrammarElementFinder { //ID public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; } + //('extends' superType=[TypeDeclaration])? + public Group getGroup_2() { return cGroup_2; } + + //'extends' + public Keyword getExtendsKeyword_2_0() { return cExtendsKeyword_2_0; } + + //superType=[TypeDeclaration] + public Assignment getSuperTypeAssignment_2_1() { return cSuperTypeAssignment_2_1; } + + //[TypeDeclaration] + public CrossReference getSuperTypeTypeDeclarationCrossReference_2_1_0() { return cSuperTypeTypeDeclarationCrossReference_2_1_0; } + + //ID + public RuleCall getSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1() { return cSuperTypeTypeDeclarationIDTerminalRuleCall_2_1_0_1; } + //'{' - public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; } + public Keyword getLeftCurlyBracketKeyword_3() { return cLeftCurlyBracketKeyword_3; } //properties+=Property* - public Assignment getPropertiesAssignment_3() { return cPropertiesAssignment_3; } + public Assignment getPropertiesAssignment_4() { return cPropertiesAssignment_4; } //Property - public RuleCall getPropertiesPropertyParserRuleCall_3_0() { return cPropertiesPropertyParserRuleCall_3_0; } + public RuleCall getPropertiesPropertyParserRuleCall_4_0() { return cPropertiesPropertyParserRuleCall_4_0; } //'}' - public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; } + public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; } } public class PropertyElements extends AbstractParserRuleElementFinder { private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.xtext.ide.tests.testlanguage.TestLanguage.Property"); @@ -259,7 +279,7 @@ public class TestLanguageGrammarAccess extends AbstractGrammarElementFinder { } //TypeDeclaration: - // 'type' name=ID '{' + // 'type' name=ID ('extends' superType=[TypeDeclaration])? '{' // properties+=Property* // '}'; public TypeDeclarationElements getTypeDeclarationAccess() { diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TestLanguagePackage.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TestLanguagePackage.java index e71ab11e1..4ebd68ee3 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TestLanguagePackage.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TestLanguagePackage.java @@ -108,6 +108,15 @@ public interface TestLanguagePackage extends EPackage */ int TYPE_DECLARATION__NAME = 0; + /** + * The feature id for the 'Super Type' reference. + * + * + * @generated + * @ordered + */ + int TYPE_DECLARATION__SUPER_TYPE = 1; + /** * The feature id for the 'Properties' containment reference list. * @@ -115,7 +124,7 @@ public interface TestLanguagePackage extends EPackage * @generated * @ordered */ - int TYPE_DECLARATION__PROPERTIES = 1; + int TYPE_DECLARATION__PROPERTIES = 2; /** * The number of structural features of the 'Type Declaration' class. @@ -124,7 +133,7 @@ public interface TestLanguagePackage extends EPackage * @generated * @ordered */ - int TYPE_DECLARATION_FEATURE_COUNT = 2; + int TYPE_DECLARATION_FEATURE_COUNT = 3; /** * The meta object id for the '{@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.impl.PropertyImpl Property}' class. @@ -308,6 +317,17 @@ public interface TestLanguagePackage extends EPackage */ EAttribute getTypeDeclaration_Name(); + /** + * Returns the meta object for the reference '{@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getSuperType Super Type}'. + * + * + * @return the meta object for the reference 'Super Type'. + * @see org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getSuperType() + * @see #getTypeDeclaration() + * @generated + */ + EReference getTypeDeclaration_SuperType(); + /** * Returns the meta object for the containment reference list '{@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getProperties Properties}'. * @@ -473,6 +493,14 @@ public interface TestLanguagePackage extends EPackage */ EAttribute TYPE_DECLARATION__NAME = eINSTANCE.getTypeDeclaration_Name(); + /** + * The meta object literal for the 'Super Type' reference feature. + * + * + * @generated + */ + EReference TYPE_DECLARATION__SUPER_TYPE = eINSTANCE.getTypeDeclaration_SuperType(); + /** * The meta object literal for the 'Properties' containment reference list feature. * diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TypeDeclaration.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TypeDeclaration.java index 8f3267571..6fff177cf 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TypeDeclaration.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/TypeDeclaration.java @@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.EObject; *

*
    *
  • {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getName Name}
  • + *
  • {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getSuperType Super Type}
  • *
  • {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getProperties Properties}
  • *
* @@ -56,6 +57,32 @@ public interface TypeDeclaration extends EObject */ void setName(String value); + /** + * Returns the value of the 'Super Type' reference. + * + *

+ * If the meaning of the 'Super Type' reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Super Type' reference. + * @see #setSuperType(TypeDeclaration) + * @see org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TestLanguagePackage#getTypeDeclaration_SuperType() + * @model + * @generated + */ + TypeDeclaration getSuperType(); + + /** + * Sets the value of the '{@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration#getSuperType Super Type}' reference. + * + * + * @param value the new value of the 'Super Type' reference. + * @see #getSuperType() + * @generated + */ + void setSuperType(TypeDeclaration value); + /** * Returns the value of the 'Properties' containment reference list. * The list contents are of type {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.Property}. diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TestLanguagePackageImpl.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TestLanguagePackageImpl.java index c9803c557..cd3c1bc71 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TestLanguagePackageImpl.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TestLanguagePackageImpl.java @@ -181,11 +181,21 @@ public class TestLanguagePackageImpl extends EPackageImpl implements TestLanguag * * @generated */ - public EReference getTypeDeclaration_Properties() + public EReference getTypeDeclaration_SuperType() { return (EReference)typeDeclarationEClass.getEStructuralFeatures().get(1); } + /** + * + * + * @generated + */ + public EReference getTypeDeclaration_Properties() + { + return (EReference)typeDeclarationEClass.getEStructuralFeatures().get(2); + } + /** * * @@ -311,6 +321,7 @@ public class TestLanguagePackageImpl extends EPackageImpl implements TestLanguag typeDeclarationEClass = createEClass(TYPE_DECLARATION); createEAttribute(typeDeclarationEClass, TYPE_DECLARATION__NAME); + createEReference(typeDeclarationEClass, TYPE_DECLARATION__SUPER_TYPE); createEReference(typeDeclarationEClass, TYPE_DECLARATION__PROPERTIES); propertyEClass = createEClass(PROPERTY); @@ -365,6 +376,7 @@ public class TestLanguagePackageImpl extends EPackageImpl implements TestLanguag initEClass(typeDeclarationEClass, TypeDeclaration.class, "TypeDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getTypeDeclaration_Name(), ecorePackage.getEString(), "name", null, 0, 1, TypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getTypeDeclaration_SuperType(), this.getTypeDeclaration(), null, "superType", null, 0, 1, TypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getTypeDeclaration_Properties(), this.getProperty(), null, "properties", null, 0, -1, TypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(propertyEClass, Property.class, "Property", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); diff --git a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TypeDeclarationImpl.java b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TypeDeclarationImpl.java index e7c0c9349..79e18d2b9 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TypeDeclarationImpl.java +++ b/org.eclipse.xtext.ide.tests/testlang-src-gen/org/eclipse/xtext/ide/tests/testlanguage/testLanguage/impl/TypeDeclarationImpl.java @@ -36,6 +36,7 @@ import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration; *

*
    *
  • {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.impl.TypeDeclarationImpl#getName Name}
  • + *
  • {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.impl.TypeDeclarationImpl#getSuperType Super Type}
  • *
  • {@link org.eclipse.xtext.ide.tests.testlanguage.testLanguage.impl.TypeDeclarationImpl#getProperties Properties}
  • *
* @@ -63,6 +64,16 @@ public class TypeDeclarationImpl extends MinimalEObjectImpl.Container implements */ protected String name = NAME_EDEFAULT; + /** + * The cached value of the '{@link #getSuperType() Super Type}' reference. + * + * + * @see #getSuperType() + * @generated + * @ordered + */ + protected TypeDeclaration superType; + /** * The cached value of the '{@link #getProperties() Properties}' containment reference list. * @@ -117,6 +128,49 @@ public class TypeDeclarationImpl extends MinimalEObjectImpl.Container implements eNotify(new ENotificationImpl(this, Notification.SET, TestLanguagePackage.TYPE_DECLARATION__NAME, oldName, name)); } + /** + * + * + * @generated + */ + public TypeDeclaration getSuperType() + { + if (superType != null && superType.eIsProxy()) + { + InternalEObject oldSuperType = (InternalEObject)superType; + superType = (TypeDeclaration)eResolveProxy(oldSuperType); + if (superType != oldSuperType) + { + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.RESOLVE, TestLanguagePackage.TYPE_DECLARATION__SUPER_TYPE, oldSuperType, superType)); + } + } + return superType; + } + + /** + * + * + * @generated + */ + public TypeDeclaration basicGetSuperType() + { + return superType; + } + + /** + * + * + * @generated + */ + public void setSuperType(TypeDeclaration newSuperType) + { + TypeDeclaration oldSuperType = superType; + superType = newSuperType; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, TestLanguagePackage.TYPE_DECLARATION__SUPER_TYPE, oldSuperType, superType)); + } + /** * * @@ -159,6 +213,9 @@ public class TypeDeclarationImpl extends MinimalEObjectImpl.Container implements { case TestLanguagePackage.TYPE_DECLARATION__NAME: return getName(); + case TestLanguagePackage.TYPE_DECLARATION__SUPER_TYPE: + if (resolve) return getSuperType(); + return basicGetSuperType(); case TestLanguagePackage.TYPE_DECLARATION__PROPERTIES: return getProperties(); } @@ -179,6 +236,9 @@ public class TypeDeclarationImpl extends MinimalEObjectImpl.Container implements case TestLanguagePackage.TYPE_DECLARATION__NAME: setName((String)newValue); return; + case TestLanguagePackage.TYPE_DECLARATION__SUPER_TYPE: + setSuperType((TypeDeclaration)newValue); + return; case TestLanguagePackage.TYPE_DECLARATION__PROPERTIES: getProperties().clear(); getProperties().addAll((Collection)newValue); @@ -200,6 +260,9 @@ public class TypeDeclarationImpl extends MinimalEObjectImpl.Container implements case TestLanguagePackage.TYPE_DECLARATION__NAME: setName(NAME_EDEFAULT); return; + case TestLanguagePackage.TYPE_DECLARATION__SUPER_TYPE: + setSuperType((TypeDeclaration)null); + return; case TestLanguagePackage.TYPE_DECLARATION__PROPERTIES: getProperties().clear(); return; @@ -219,6 +282,8 @@ public class TypeDeclarationImpl extends MinimalEObjectImpl.Container implements { case TestLanguagePackage.TYPE_DECLARATION__NAME: return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); + case TestLanguagePackage.TYPE_DECLARATION__SUPER_TYPE: + return superType != null; case TestLanguagePackage.TYPE_DECLARATION__PROPERTIES: return properties != null && !properties.isEmpty(); } diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtext b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtext index c007c72cc..f96f36804 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtext +++ b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtext @@ -13,7 +13,7 @@ Model: types+=TypeDeclaration*; TypeDeclaration: - 'type' name=ID '{' + 'type' name=ID ('extends' superType=[TypeDeclaration])? '{' properties+=Property* '}'; diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.xtend b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.xtend index a4f102f58..397bc7659 100644 --- a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.xtend +++ b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.xtend @@ -30,11 +30,11 @@ class TestLanguageFormatter extends AbstractFormatter2 { def dispatch void format(TypeDeclaration type, extension IFormattableDocument document) { //type.regionFor.keyword(typeDeclarationAccess.leftCurlyBracketKeyword_2).prepend[oneSpace] - type.regionFor.keyword(typeDeclarationAccess.leftCurlyBracketKeyword_2).append[newLine] - type.regionFor.keyword(typeDeclarationAccess.rightCurlyBracketKeyword_4).prepend[newLine].append[newLine] + type.regionFor.keyword(typeDeclarationAccess.leftCurlyBracketKeyword_3).append[newLine] + type.regionFor.keyword(typeDeclarationAccess.rightCurlyBracketKeyword_5).prepend[newLine].append[newLine] interior( - type.regionFor.keyword(typeDeclarationAccess.leftCurlyBracketKeyword_2), - type.regionFor.keyword(typeDeclarationAccess.rightCurlyBracketKeyword_4) + type.regionFor.keyword(typeDeclarationAccess.leftCurlyBracketKeyword_3), + type.regionFor.keyword(typeDeclarationAccess.rightCurlyBracketKeyword_5) ) [indent] for (property : type.properties) { property.format diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.java index beba47283..e4e46fac9 100644 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.java +++ b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/formatting2/TestLanguageFormatter.java @@ -44,16 +44,16 @@ public class TestLanguageFormatter extends AbstractFormatter2 { protected void _format(final TypeDeclaration type, @Extension final IFormattableDocument document) { ISemanticRegionsFinder _regionFor = this.textRegionExtensions.regionFor(type); TestLanguageGrammarAccess.TypeDeclarationElements _typeDeclarationAccess = this._testLanguageGrammarAccess.getTypeDeclarationAccess(); - Keyword _leftCurlyBracketKeyword_2 = _typeDeclarationAccess.getLeftCurlyBracketKeyword_2(); - ISemanticRegion _keyword = _regionFor.keyword(_leftCurlyBracketKeyword_2); + Keyword _leftCurlyBracketKeyword_3 = _typeDeclarationAccess.getLeftCurlyBracketKeyword_3(); + ISemanticRegion _keyword = _regionFor.keyword(_leftCurlyBracketKeyword_3); final Procedure1 _function = (IHiddenRegionFormatter it) -> { it.newLine(); }; document.append(_keyword, _function); ISemanticRegionsFinder _regionFor_1 = this.textRegionExtensions.regionFor(type); TestLanguageGrammarAccess.TypeDeclarationElements _typeDeclarationAccess_1 = this._testLanguageGrammarAccess.getTypeDeclarationAccess(); - Keyword _rightCurlyBracketKeyword_4 = _typeDeclarationAccess_1.getRightCurlyBracketKeyword_4(); - ISemanticRegion _keyword_1 = _regionFor_1.keyword(_rightCurlyBracketKeyword_4); + Keyword _rightCurlyBracketKeyword_5 = _typeDeclarationAccess_1.getRightCurlyBracketKeyword_5(); + ISemanticRegion _keyword_1 = _regionFor_1.keyword(_rightCurlyBracketKeyword_5); final Procedure1 _function_1 = (IHiddenRegionFormatter it) -> { it.newLine(); }; @@ -64,12 +64,12 @@ public class TestLanguageFormatter extends AbstractFormatter2 { document.append(_prepend, _function_2); ISemanticRegionsFinder _regionFor_2 = this.textRegionExtensions.regionFor(type); TestLanguageGrammarAccess.TypeDeclarationElements _typeDeclarationAccess_2 = this._testLanguageGrammarAccess.getTypeDeclarationAccess(); - Keyword _leftCurlyBracketKeyword_2_1 = _typeDeclarationAccess_2.getLeftCurlyBracketKeyword_2(); - ISemanticRegion _keyword_2 = _regionFor_2.keyword(_leftCurlyBracketKeyword_2_1); + Keyword _leftCurlyBracketKeyword_3_1 = _typeDeclarationAccess_2.getLeftCurlyBracketKeyword_3(); + ISemanticRegion _keyword_2 = _regionFor_2.keyword(_leftCurlyBracketKeyword_3_1); ISemanticRegionsFinder _regionFor_3 = this.textRegionExtensions.regionFor(type); TestLanguageGrammarAccess.TypeDeclarationElements _typeDeclarationAccess_3 = this._testLanguageGrammarAccess.getTypeDeclarationAccess(); - Keyword _rightCurlyBracketKeyword_4_1 = _typeDeclarationAccess_3.getRightCurlyBracketKeyword_4(); - ISemanticRegion _keyword_3 = _regionFor_3.keyword(_rightCurlyBracketKeyword_4_1); + Keyword _rightCurlyBracketKeyword_5_1 = _typeDeclarationAccess_3.getRightCurlyBracketKeyword_5(); + ISemanticRegion _keyword_3 = _regionFor_3.keyword(_rightCurlyBracketKeyword_5_1); final Procedure1 _function_3 = (IHiddenRegionFormatter it) -> { it.indent(); }; From d8dc3ff32885ec433c926ac2897e9fcf17eb4a4c Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Tue, 26 Jul 2016 06:38:52 +0200 Subject: [PATCH 2/2] fixed hoverservice for non self contained cross references #20 Signed-off-by: Christian Dietrich --- .../xtext/ide/tests/server/HoverTest.xtend | 47 ++++++++++++ .../xtext/ide/tests/server/HoverTest.java | 75 +++++++++++++++++++ .../xtext/ide/server/hover/HoverService.xtend | 45 +++++++++-- .../xtext/ide/server/hover/HoverService.java | 65 +++++++++++++--- .../testing/AbstractLanguageServerTest.xtend | 3 +- .../testing/AbstractLanguageServerTest.java | 5 ++ .../xtext/testing/HoverTestConfiguration.java | 13 ++++ 7 files changed, 236 insertions(+), 17 deletions(-) diff --git a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/HoverTest.xtend b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/HoverTest.xtend index d1645998b..97d1e76e5 100644 --- a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/HoverTest.xtend +++ b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/HoverTest.xtend @@ -67,4 +67,51 @@ class HoverTest extends AbstractTestLangLanguageServerTest { ] } + @Test + def void testHover_04() { + testHover[ + model = ''' + /** + * Some documentation. + */ + type Foo { + } + type Bar extends Foo { + } + ''' + line = 5 + column = 'type Bar extends F'.length + expectedHover = ''' + [[5, 17] .. [5, 20]] + Some documentation. + ''' + ] + } + + @Test + def void testHover_05() { + testHover[ + referencedModels = [ + val referenceModel = ''' + /** + * Some documentation. + */ + type Foo { + } + ''' + val fileUri = 'MyModel2.' + fileExtension -> referenceModel + open(fileUri, referenceModel) + ] + model = ''' + type Bar extends Foo { + } + ''' + column = 'type Bar extends F'.length + expectedHover = ''' + [[0, 17] .. [0, 20]] + Some documentation. + ''' + ] + } + } diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/HoverTest.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/HoverTest.java index 4d3bbd1c5..60e456653 100644 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/HoverTest.java +++ b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/HoverTest.java @@ -10,6 +10,7 @@ package org.eclipse.xtext.ide.tests.server; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.ide.tests.server.AbstractTestLangLanguageServerTest; import org.eclipse.xtext.testing.HoverTestConfiguration; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure0; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; import org.junit.Test; @@ -102,4 +103,78 @@ public class HoverTest extends AbstractTestLangLanguageServerTest { }; this.testHover(_function); } + + @Test + public void testHover_04() { + final Procedure1 _function = (HoverTestConfiguration it) -> { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("/**"); + _builder.newLine(); + _builder.append(" "); + _builder.append("* Some documentation."); + _builder.newLine(); + _builder.append(" "); + _builder.append("*/"); + _builder.newLine(); + _builder.append("type Foo {"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.append("type Bar extends Foo {"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + it.setModel(_builder.toString()); + it.setLine(5); + int _length = "type Bar extends F".length(); + it.setColumn(_length); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("[[5, 17] .. [5, 20]]"); + _builder_1.newLine(); + _builder_1.append("Some documentation."); + _builder_1.newLine(); + it.setExpectedHover(_builder_1.toString()); + }; + this.testHover(_function); + } + + @Test + public void testHover_05() { + final Procedure1 _function = (HoverTestConfiguration it) -> { + final Procedure0 _function_1 = () -> { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("/**"); + _builder.newLine(); + _builder.append(" "); + _builder.append("* Some documentation."); + _builder.newLine(); + _builder.append(" "); + _builder.append("*/"); + _builder.newLine(); + _builder.append("type Foo {"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + final String referenceModel = _builder.toString(); + final String fileUri = this.operator_mappedTo(("MyModel2." + this.fileExtension), referenceModel); + this.open(fileUri, referenceModel); + }; + it.setReferencedModels(_function_1); + StringConcatenation _builder = new StringConcatenation(); + _builder.append("type Bar extends Foo {"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + it.setModel(_builder.toString()); + int _length = "type Bar extends F".length(); + it.setColumn(_length); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("[[0, 17] .. [0, 20]]"); + _builder_1.newLine(); + _builder_1.append("Some documentation."); + _builder_1.newLine(); + it.setExpectedHover(_builder_1.toString()); + }; + this.testHover(_function); + } } diff --git a/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/hover/HoverService.xtend b/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/hover/HoverService.xtend index 18bf04c3c..162abfaad 100644 --- a/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/hover/HoverService.xtend +++ b/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/hover/HoverService.xtend @@ -12,11 +12,18 @@ import com.google.inject.Singleton import io.typefox.lsapi.Hover import io.typefox.lsapi.impl.HoverImpl import io.typefox.lsapi.impl.MarkedStringImpl +import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.documentation.IEObjectDocumentationProvider import org.eclipse.xtext.ide.server.DocumentExtensions +import org.eclipse.xtext.nodemodel.ILeafNode +import org.eclipse.xtext.nodemodel.util.NodeModelUtils +import org.eclipse.xtext.parser.IParseResult import org.eclipse.xtext.resource.EObjectAtOffsetHelper import org.eclipse.xtext.resource.ILocationInFileProvider import org.eclipse.xtext.resource.XtextResource +import org.eclipse.xtext.util.ITextRegion +import org.eclipse.xtext.util.Pair +import org.eclipse.xtext.util.Tuples /** * @author kosyakov - Initial contribution and API @@ -38,7 +45,11 @@ class HoverService { extension IEObjectDocumentationProvider def Hover hover(XtextResource resource, int offset) { - val element = resource.resolveElementAt(offset) + val pair = resource.getXtextElementAt(offset) + if (pair === null || pair.first === null || pair.second === null) { + return new HoverImpl(emptyList, null) + } + val element = pair.first if (element === null) return new HoverImpl(emptyList, null) @@ -48,10 +59,7 @@ class HoverService { val contents = #[new MarkedStringImpl(null, documentation)] - val containedElement = resource.resolveContainedElementAt(offset) - val textRegion = containedElement.significantTextRegion - if (textRegion === null) - return new HoverImpl(contents, null) + val ITextRegion textRegion = pair.second if (!textRegion.contains(offset)) return new HoverImpl(emptyList, null) @@ -60,4 +68,31 @@ class HoverService { return new HoverImpl(contents, range) } + protected def Pair getXtextElementAt(XtextResource resource, int offset) { + // check for cross reference + val EObject crossLinkedEObject = resolveCrossReferencedElementAt(resource, offset); + if (crossLinkedEObject != null) { + if (!crossLinkedEObject.eIsProxy()) { + val IParseResult parseResult = resource.getParseResult(); + if (parseResult != null) { + var ILeafNode leafNode = NodeModelUtils.findLeafNodeAtOffset(parseResult.getRootNode(), offset); + if(leafNode != null && leafNode.isHidden() && leafNode.getOffset() == offset) { + leafNode = NodeModelUtils.findLeafNodeAtOffset(parseResult.getRootNode(), offset - 1); + } + if (leafNode != null) { + val ITextRegion leafRegion = leafNode.getTextRegion(); + return Tuples.create(crossLinkedEObject, leafRegion); + } + } + } + } else { + val EObject o = resource.resolveElementAt(offset); + if (o != null) { + val ITextRegion region = o.getSignificantTextRegion(); + return Tuples.create(o, region); + } + } + return null; + } + } diff --git a/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/hover/HoverService.java b/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/hover/HoverService.java index 9b3e80eeb..6994b191d 100644 --- a/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/hover/HoverService.java +++ b/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/hover/HoverService.java @@ -7,6 +7,7 @@ */ package org.eclipse.xtext.ide.server.hover; +import com.google.common.base.Objects; import com.google.inject.Inject; import com.google.inject.Singleton; import io.typefox.lsapi.Hover; @@ -18,10 +19,16 @@ import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.documentation.IEObjectDocumentationProvider; import org.eclipse.xtext.ide.server.DocumentExtensions; +import org.eclipse.xtext.nodemodel.ICompositeNode; +import org.eclipse.xtext.nodemodel.ILeafNode; +import org.eclipse.xtext.nodemodel.util.NodeModelUtils; +import org.eclipse.xtext.parser.IParseResult; import org.eclipse.xtext.resource.EObjectAtOffsetHelper; import org.eclipse.xtext.resource.ILocationInFileProvider; import org.eclipse.xtext.resource.XtextResource; import org.eclipse.xtext.util.ITextRegion; +import org.eclipse.xtext.util.Pair; +import org.eclipse.xtext.util.Tuples; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Extension; @@ -49,30 +56,66 @@ public class HoverService { private IEObjectDocumentationProvider _iEObjectDocumentationProvider; public Hover hover(final XtextResource resource, final int offset) { - final EObject element = this._eObjectAtOffsetHelper.resolveElementAt(resource, offset); - if ((element == null)) { + final Pair pair = this.getXtextElementAt(resource, offset); + if ((((pair == null) || (pair.getFirst() == null)) || (pair.getSecond() == null))) { List _emptyList = CollectionLiterals.emptyList(); return new HoverImpl(_emptyList, null); } - final String documentation = this._iEObjectDocumentationProvider.getDocumentation(element); - if ((documentation == null)) { + final EObject element = pair.getFirst(); + if ((element == null)) { List _emptyList_1 = CollectionLiterals.emptyList(); return new HoverImpl(_emptyList_1, null); } + final String documentation = this._iEObjectDocumentationProvider.getDocumentation(element); + if ((documentation == null)) { + List _emptyList_2 = CollectionLiterals.emptyList(); + return new HoverImpl(_emptyList_2, null); + } MarkedStringImpl _markedStringImpl = new MarkedStringImpl(null, documentation); final List contents = Collections.unmodifiableList(CollectionLiterals.newArrayList(_markedStringImpl)); - final EObject containedElement = this._eObjectAtOffsetHelper.resolveContainedElementAt(resource, offset); - final ITextRegion textRegion = this._iLocationInFileProvider.getSignificantTextRegion(containedElement); - if ((textRegion == null)) { - return new HoverImpl(contents, null); - } + final ITextRegion textRegion = pair.getSecond(); boolean _contains = textRegion.contains(offset); boolean _not = (!_contains); if (_not) { - List _emptyList_2 = CollectionLiterals.emptyList(); - return new HoverImpl(_emptyList_2, null); + List _emptyList_3 = CollectionLiterals.emptyList(); + return new HoverImpl(_emptyList_3, null); } final RangeImpl range = this._documentExtensions.newRange(resource, textRegion); return new HoverImpl(contents, range); } + + protected Pair getXtextElementAt(final XtextResource resource, final int offset) { + final EObject crossLinkedEObject = this._eObjectAtOffsetHelper.resolveCrossReferencedElementAt(resource, offset); + boolean _notEquals = (!Objects.equal(crossLinkedEObject, null)); + if (_notEquals) { + boolean _eIsProxy = crossLinkedEObject.eIsProxy(); + boolean _not = (!_eIsProxy); + if (_not) { + final IParseResult parseResult = resource.getParseResult(); + boolean _notEquals_1 = (!Objects.equal(parseResult, null)); + if (_notEquals_1) { + ICompositeNode _rootNode = parseResult.getRootNode(); + ILeafNode leafNode = NodeModelUtils.findLeafNodeAtOffset(_rootNode, offset); + if ((((!Objects.equal(leafNode, null)) && leafNode.isHidden()) && (leafNode.getOffset() == offset))) { + ICompositeNode _rootNode_1 = parseResult.getRootNode(); + ILeafNode _findLeafNodeAtOffset = NodeModelUtils.findLeafNodeAtOffset(_rootNode_1, (offset - 1)); + leafNode = _findLeafNodeAtOffset; + } + boolean _notEquals_2 = (!Objects.equal(leafNode, null)); + if (_notEquals_2) { + final ITextRegion leafRegion = leafNode.getTextRegion(); + return Tuples.create(crossLinkedEObject, leafRegion); + } + } + } + } else { + final EObject o = this._eObjectAtOffsetHelper.resolveElementAt(resource, offset); + boolean _notEquals_3 = (!Objects.equal(o, null)); + if (_notEquals_3) { + final ITextRegion region = this._iLocationInFileProvider.getSignificantTextRegion(o); + return Tuples.create(o, region); + } + } + return null; + } } diff --git a/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/AbstractLanguageServerTest.xtend b/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/AbstractLanguageServerTest.xtend index cb5f27d52..5ea21e4a5 100644 --- a/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/AbstractLanguageServerTest.xtend +++ b/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/AbstractLanguageServerTest.xtend @@ -265,8 +265,8 @@ abstract class AbstractLanguageServerTest implements Consumer model initialize + configuration.referencedModels?.apply open(fileUri, model) - val hover = languageServer.hover(new TextDocumentPositionParamsBuilder[ textDocument(fileUri) position(line, column) @@ -376,6 +376,7 @@ class DefinitionTestConfiguration extends TextDocumentPositionConfiguration { @Accessors class HoverTestConfiguration extends TextDocumentPositionConfiguration { String expectedHover = '' + Procedures.Procedure0 referencedModels = [] } @Accessors diff --git a/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/AbstractLanguageServerTest.java b/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/AbstractLanguageServerTest.java index 5e009bcdb..8ca523626 100644 --- a/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/AbstractLanguageServerTest.java +++ b/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/AbstractLanguageServerTest.java @@ -85,6 +85,7 @@ import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.Extension; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.ListExtensions; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure0; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; import org.eclipse.xtext.xbase.lib.Pure; import org.eclipse.xtext.xbase.lib.StringExtensions; @@ -505,6 +506,10 @@ public abstract class AbstractLanguageServerTest implements Consumer _function = (TextDocumentPositionParamsBuilder it) -> { diff --git a/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/HoverTestConfiguration.java b/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/HoverTestConfiguration.java index cf5bbf18b..47bbb4b4d 100644 --- a/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/HoverTestConfiguration.java +++ b/org.eclipse.xtext.testing/xtend-gen/org/eclipse/xtext/testing/HoverTestConfiguration.java @@ -9,6 +9,7 @@ package org.eclipse.xtext.testing; import org.eclipse.xtend.lib.annotations.Accessors; import org.eclipse.xtext.testing.TextDocumentPositionConfiguration; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure0; import org.eclipse.xtext.xbase.lib.Pure; @Accessors @@ -16,6 +17,9 @@ import org.eclipse.xtext.xbase.lib.Pure; public class HoverTestConfiguration extends TextDocumentPositionConfiguration { private String expectedHover = ""; + private Procedure0 referencedModels = ((Procedure0) () -> { + }); + @Pure public String getExpectedHover() { return this.expectedHover; @@ -24,4 +28,13 @@ public class HoverTestConfiguration extends TextDocumentPositionConfiguration { public void setExpectedHover(final String expectedHover) { this.expectedHover = expectedHover; } + + @Pure + public Procedure0 getReferencedModels() { + return this.referencedModels; + } + + public void setReferencedModels(final Procedure0 referencedModels) { + this.referencedModels = referencedModels; + } }