use of org.eclipse.xtext.AbstractElement in project xtext-core by eclipse.
the class Xtext2EcoreInterpretationContext method addFeature.
public void addFeature(Assignment assignment) throws TransformationException {
final String featureName = assignment.getFeature();
boolean isMultivalue = GrammarUtil.isMultipleAssignment(assignment);
boolean isContainment = true;
EClassifierInfo featureTypeInfo;
if (GrammarUtil.isBooleanAssignment(assignment)) {
checkNoFragmentRuleCall(assignment.getTerminal());
EDataType eBoolean = GrammarUtil.findEBoolean(GrammarUtil.getGrammar(assignment));
featureTypeInfo = getEClassifierInfoOrThrowException(eBoolean, assignment);
isMultivalue = false;
} else {
AbstractElement terminal = assignment.getTerminal();
if (terminal == null) {
throw new TransformationException(TransformationErrorCode.NoSuchTypeAvailable, "Cannot derive type from incomplete assignment.", assignment);
}
checkNoFragmentRuleCall(terminal);
EClassifier type = getTerminalType(terminal);
isContainment = isContainmentAssignment(assignment);
featureTypeInfo = getEClassifierInfoOrThrowException(type, assignment);
}
addFeature(featureName, featureTypeInfo, isMultivalue, isContainment, assignment);
}
use of org.eclipse.xtext.AbstractElement in project xtext-core by eclipse.
the class XtextLinkerTest method testGuardLinking.
@Test
public void testGuardLinking() throws Exception {
StringConcatenation _builder = new StringConcatenation();
_builder.append("grammar test.Lang with org.eclipse.xtext.common.Terminals");
_builder.newLine();
_builder.append("generate test \'http://test\'");
_builder.newLine();
_builder.append("Root<MyArg>: <MyArg> name=ID | <!MyArg> name=STRING;");
_builder.newLine();
final String grammarAsString = _builder.toString();
EObject _model = this.getModel(grammarAsString);
final Grammar grammar = ((Grammar) _model);
AbstractRule _head = IterableExtensions.<AbstractRule>head(grammar.getRules());
final ParserRule rootRule = ((ParserRule) _head);
AbstractElement _alternatives = rootRule.getAlternatives();
final Alternatives alternatives = ((Alternatives) _alternatives);
AbstractElement _head_1 = IterableExtensions.<AbstractElement>head(alternatives.getElements());
Condition _guardCondition = ((Group) _head_1).getGuardCondition();
final ParameterReference firstGuard = ((ParameterReference) _guardCondition);
Assert.assertEquals(IterableExtensions.<Parameter>head(rootRule.getParameters()), firstGuard.getParameter());
AbstractElement _last = IterableExtensions.<AbstractElement>last(alternatives.getElements());
Condition _guardCondition_1 = ((Group) _last).getGuardCondition();
final Negation secondGuard = ((Negation) _guardCondition_1);
Condition _value = secondGuard.getValue();
Assert.assertEquals(IterableExtensions.<Parameter>head(rootRule.getParameters()), ((ParameterReference) _value).getParameter());
}
use of org.eclipse.xtext.AbstractElement in project xtext-core by eclipse.
the class XtextLinkerTest method testNamedParameterLinking.
@Test
public void testNamedParameterLinking() throws Exception {
StringConcatenation _builder = new StringConcatenation();
_builder.append("grammar test.Lang with org.eclipse.xtext.common.Terminals");
_builder.newLine();
_builder.append("generate test \'http://test\'");
_builder.newLine();
_builder.append("Root<MyArg>: rule=Rule<MyArg>;");
_builder.newLine();
_builder.append("Rule<MyParam>: name=ID child=Root<MyArg=MyParam>?;");
_builder.newLine();
final String grammarAsString = _builder.toString();
EObject _model = this.getModel(grammarAsString);
final Grammar grammar = ((Grammar) _model);
AbstractRule _head = IterableExtensions.<AbstractRule>head(grammar.getRules());
final ParserRule rootRule = ((ParserRule) _head);
AbstractRule _last = IterableExtensions.<AbstractRule>last(grammar.getRules());
final ParserRule lastRule = ((ParserRule) _last);
AbstractElement _alternatives = lastRule.getAlternatives();
AbstractElement _last_1 = IterableExtensions.<AbstractElement>last(((Group) _alternatives).getElements());
final Assignment lastAssignment = ((Assignment) _last_1);
AbstractElement _terminal = lastAssignment.getTerminal();
final RuleCall ruleCall = ((RuleCall) _terminal);
final NamedArgument argument = IterableExtensions.<NamedArgument>head(ruleCall.getArguments());
Assert.assertEquals(IterableExtensions.<Parameter>head(rootRule.getParameters()), argument.getParameter());
Condition _value = argument.getValue();
Assert.assertEquals(IterableExtensions.<Parameter>head(lastRule.getParameters()), ((ParameterReference) _value).getParameter());
}
use of org.eclipse.xtext.AbstractElement in project xtext-core by eclipse.
the class XtextLinkerTest method testQualifiedRuleCall_02.
@Test
public void testQualifiedRuleCall_02() throws Exception {
StringConcatenation _builder = new StringConcatenation();
_builder.append("grammar test with org.eclipse.xtext.common.Terminals");
_builder.newLine();
_builder.append("generate test \'http://test\'");
_builder.newLine();
_builder.append("Rule: name=ID;");
_builder.newLine();
_builder.append("terminal STRING: super;");
_builder.newLine();
final String grammarAsString = _builder.toString();
final XtextResource resource = this.getResourceFromString(grammarAsString);
EObject _get = resource.getContents().get(0);
Grammar grammar = ((Grammar) _get);
AbstractRule _get_1 = grammar.getRules().get(1);
final TerminalRule string = ((TerminalRule) _get_1);
AbstractElement _alternatives = string.getAlternatives();
final RuleCall callToSuper = ((RuleCall) _alternatives);
Assert.assertEquals(GrammarUtil.findRuleForName(IterableExtensions.<Grammar>head(grammar.getUsedGrammars()), "STRING"), callToSuper.getRule());
}
use of org.eclipse.xtext.AbstractElement in project xtext-core by eclipse.
the class PartialParsingHelper method isInvalidLastChildNode.
protected boolean isInvalidLastChildNode(ICompositeNode candidate, INode lastChild) {
if (lastChild != null && lastChild.getSyntaxErrorMessage() != null) {
EObject lastChildGrammarElement = lastChild.getGrammarElement();
if (lastChildGrammarElement == null)
return true;
AbstractElement candidateElement = getCandidateElement(candidate.getGrammarElement());
if (candidateElement != null) {
if (isCalledBy(lastChildGrammarElement, candidateElement)) {
while (candidate != null) {
if (candidateElement != null && hasMandatoryFollowElements(candidateElement))
return true;
candidate = candidate.getParent();
if (candidate != null)
candidateElement = getCandidateElement(candidate.getGrammarElement());
}
}
return true;
}
}
return false;
}
Aggregations