[480436] Fixed bug in GrammarFlattener

This commit is contained in:
Sebastian Zarnekow 2015-10-22 18:10:10 +02:00
parent b542ba8e06
commit 25c3978d98
2 changed files with 36 additions and 8 deletions

View file

@ -153,7 +153,6 @@ class FlattenedGrammarAccess {
var result = super.copy(eObject)
if (result instanceof CompoundElement) {
var List<AbstractElement> elements = result.getElements()
// while (elements !== null && elements.size() === 1) {
if (elements.size() === 1) {
if (!result.isFirstSetPredicated && !result.isPredicated) {
var element = elements.get(0)
@ -162,16 +161,9 @@ class FlattenedGrammarAccess {
return element
} else {
var element = elements.get(0)
result.mergeCardinalities(element)
result.mergePredicates(element)
element.firstSetPredicated = false
element.predicated = false
// if (element instanceof CompoundElement && element.eClass == result.eClass) {
// elements.clear
// elements.addAll((element as CompoundElement).getElements)
// } else {
// elements = null
// }
}
}
}

View file

@ -529,4 +529,40 @@ class GrammarFlatteningTest extends AbstractXtextTests {
terminal RULE_ANY_OTHER:
.;'''.toString, serialized)
}
@Test def void test_12() throws Exception {
var Grammar flattened = getModel(
'''
grammar com.foo.bar with org.eclipse.xtext.common.Terminals
generate myPack 'http://myURI'
Rule: =>(name+=ID*);
''', true)
var String serialized = getSerializer().serialize(flattened)
assertEquals('''
grammar com.foo.bar hidden(RULE_WS, RULE_ML_COMMENT, RULE_SL_COMMENT)
ruleRule:
=> (name+=RULE_ID*);
terminal RULE_ID:
"^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
terminal RULE_INT:
"0".."9"+;
terminal RULE_STRING:
"\"" ("\\" . | !("\\" | "\""))* "\"" | "\'" ("\\" . | !("\\" | "\'"))* "\'";
terminal RULE_ML_COMMENT:
"/*"->"*/";
terminal RULE_SL_COMMENT:
"//" !("\n" | "\r")* ("\r"? "\n")?;
terminal RULE_WS:
" " | "\t" | "\r" | "\n"+;
terminal RULE_ANY_OTHER:
.;'''.toString, serialized)
}
}