mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 16:58:56 +00:00
[480436] Fixed bug in GrammarFlattener
This commit is contained in:
parent
b542ba8e06
commit
25c3978d98
2 changed files with 36 additions and 8 deletions
|
@ -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
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue