From 21096429a256ee5254ba9e11bc1e97a90c3301dd Mon Sep 17 00:00:00 2001 From: akosyakov Date: Tue, 15 Mar 2016 14:53:05 +0100 Subject: [PATCH] [bug 479161] Invalidate boolean assignments of fragments Change-Id: I58de6791ef95e907528bede10124a788ee6b13b8 Signed-off-by: akosyakov --- .../Xtext2EcoreInterpretationContext.java | 1 + .../Xtext2EcoreTransformerTest.xtend | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreInterpretationContext.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreInterpretationContext.java index a437c5d15..23b76b13b 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreInterpretationContext.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreInterpretationContext.java @@ -78,6 +78,7 @@ public class Xtext2EcoreInterpretationContext { EClassifierInfo featureTypeInfo; if (GrammarUtil.isBooleanAssignment(assignment)) { + checkNoFragmentRuleCall(assignment.getTerminal()); EDataType eBoolean = GrammarUtil.findEBoolean(GrammarUtil.getGrammar(assignment)); featureTypeInfo = getEClassifierInfoOrThrowException(eBoolean, assignment); isMultivalue = false; diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreTransformerTest.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreTransformerTest.xtend index 3ae0516cf..600520297 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreTransformerTest.xtend +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/ecoreInference/Xtext2EcoreTransformerTest.xtend @@ -377,6 +377,32 @@ class Xtext2EcoreTransformerTest extends AbstractXtextTests { var EPackage result = getEPackageFromGrammar(grammar, 1) assertEquals(2, result.EClassifiers.size) } + + @Test def void testParserRuleFragment_10() throws Exception { + val grammar = ''' + grammar test with org.eclipse.xtext.common.Terminals + generate test 'http://test' + RuleA: feature+=Fragment; + fragment Fragment returns Fragment: name=ID; + ''' + errorAcceptorMock.acceptError(TransformationErrorCode.InvalidFragmentCall, + TestErrorAcceptor.ANY_STRING, TestErrorAcceptor.ANY_EOBJECT) + var EPackage result = getEPackageFromGrammar(grammar, 1) + assertEquals(2, result.EClassifiers.size) + } + + @Test def void testParserRuleFragment_11() throws Exception { + val grammar = ''' + grammar test with org.eclipse.xtext.common.Terminals + generate test 'http://test' + RuleA: feature?=Fragment; + fragment Fragment returns Fragment: name=ID; + ''' + errorAcceptorMock.acceptError(TransformationErrorCode.InvalidFragmentCall, + TestErrorAcceptor.ANY_STRING, TestErrorAcceptor.ANY_EOBJECT) + var EPackage result = getEPackageFromGrammar(grammar, 1) + assertEquals(2, result.EClassifiers.size) + } @Test def void testTypesOfImplicitSuperGrammar() throws Exception { val xtextGrammar = '''