Search in sources :

Example 6 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class TreeConstTest method testSingleAssignmentOrNull.

@Test
public void testSingleAssignmentOrNull() throws Exception {
    AbstractRule rule = parseRule("Model: 'foo' name=ID?;");
    Group group = (Group) rule.getAlternatives();
    assertTypes(nfa.getNFA(group).getTypes(), "Model", "null");
    assertTypes(nfa.getNFA(group.getElements().get(0)).getTypesToCheck());
}
Also used : Group(org.eclipse.xtext.Group) AbstractRule(org.eclipse.xtext.AbstractRule) Test(org.junit.Test)

Example 7 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class XtextValidationTest method testRuleCallAllowed_10.

@Test
public void testRuleCallAllowed_10() throws Exception {
    String grammarAsText = "grammar test with org.eclipse.xtext.common.Terminals\n" + "generate test 'http://test'\n" + "Model: name=ID Fragment;\n" + "fragment Fragment: value=STRING;";
    Grammar grammar = (Grammar) getModel(grammarAsText);
    ParserRule rule = (ParserRule) grammar.getRules().get(0);
    RuleCall ruleCall = (RuleCall) ((Group) rule.getAlternatives()).getElements().get(1);
    XtextValidator validator = get(XtextValidator.class);
    ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(null, false, false);
    validator.setMessageAcceptor(messageAcceptor);
    validator.checkUnassignedRuleCallAllowed(ruleCall);
    messageAcceptor.validate();
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) Group(org.eclipse.xtext.Group) UnorderedGroup(org.eclipse.xtext.UnorderedGroup) Grammar(org.eclipse.xtext.Grammar) RuleCall(org.eclipse.xtext.RuleCall) Test(org.junit.Test)

Example 8 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class PartialParsingHelper method hasMandatoryFollowElements.

private boolean hasMandatoryFollowElements(AbstractElement lastParsedElement) {
    if (lastParsedElement.eContainer() instanceof AbstractElement) {
        AbstractElement directParent = (AbstractElement) lastParsedElement.eContainer();
        if (directParent instanceof Group) {
            Group group = (Group) directParent;
            int idx = group.getElements().indexOf(lastParsedElement) + 1;
            for (int i = idx; i < group.getElements().size(); i++) {
                if (isMandatory(group.getElements().get(i)))
                    return true;
            }
        }
        return hasMandatoryFollowElements(directParent);
    }
    return false;
}
Also used : Group(org.eclipse.xtext.Group) AbstractElement(org.eclipse.xtext.AbstractElement)

Example 9 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class XtextValidationTest method testPredicatedUnorderedGroup_04.

@Test
public void testPredicatedUnorderedGroup_04() throws Exception {
    String grammarAsText = "grammar test with org.eclipse.xtext.common.Terminals\n" + "generate test 'http://test'\n" + "A: =>(name=ID value=B);\n" + "B: name=ID & value=STRING;";
    Grammar grammar = (Grammar) getModel(grammarAsText);
    XtextValidator validator = get(XtextValidator.class);
    ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(null, true, false);
    Group predicatedGroup = (Group) grammar.getRules().get(0).getAlternatives();
    Group groupContent = (Group) predicatedGroup.getElements().get(0);
    Assignment valueAssignment = (Assignment) groupContent.getElements().get(1);
    messageAcceptor.expectedContext(grammar.getRules().get(0).getAlternatives(), valueAssignment.getTerminal(), grammar.getRules().get(1).getAlternatives());
    validator.setMessageAcceptor(messageAcceptor);
    validator.checkUnorderedGroupIsNotPredicated(grammar);
    messageAcceptor.validate();
}
Also used : Assignment(org.eclipse.xtext.Assignment) Group(org.eclipse.xtext.Group) UnorderedGroup(org.eclipse.xtext.UnorderedGroup) Grammar(org.eclipse.xtext.Grammar) Test(org.junit.Test)

Example 10 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class XtextValidationTest method testRuleCallAllowed_09_335692.

@Test
public void testRuleCallAllowed_09_335692() throws Exception {
    String grammarAsText = "grammar test with org.eclipse.xtext.common.Terminals\n" + "generate test 'http://test'\n" + "Model : value=ID FRAGMENT;\n" + "SubModel : FRAGMENT;\n" + "terminal fragment FRAGMENT: ';';";
    Grammar grammar = (Grammar) getModel(grammarAsText);
    ParserRule rule = (ParserRule) grammar.getRules().get(0);
    RuleCall ruleCall = (RuleCall) ((Group) rule.getAlternatives()).getElements().get(1);
    XtextValidator validator = get(XtextValidator.class);
    ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(ruleCall, true, false);
    validator.setMessageAcceptor(messageAcceptor);
    validator.checkUnassignedRuleCallAllowed(ruleCall);
    validator.checkTerminalFragmentCalledFromTerminalRule(ruleCall);
    messageAcceptor.validate();
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) Group(org.eclipse.xtext.Group) UnorderedGroup(org.eclipse.xtext.UnorderedGroup) Grammar(org.eclipse.xtext.Grammar) RuleCall(org.eclipse.xtext.RuleCall) Test(org.junit.Test)

Aggregations

Group (org.eclipse.xtext.Group)34 AbstractElement (org.eclipse.xtext.AbstractElement)16 RuleCall (org.eclipse.xtext.RuleCall)16 UnorderedGroup (org.eclipse.xtext.UnorderedGroup)15 Test (org.junit.Test)14 AbstractRule (org.eclipse.xtext.AbstractRule)13 Assignment (org.eclipse.xtext.Assignment)13 ParserRule (org.eclipse.xtext.ParserRule)13 EObject (org.eclipse.emf.ecore.EObject)10 Grammar (org.eclipse.xtext.Grammar)10 Alternatives (org.eclipse.xtext.Alternatives)9 Action (org.eclipse.xtext.Action)6 Parameter (org.eclipse.xtext.Parameter)5 TerminalRule (org.eclipse.xtext.TerminalRule)5 CompoundElement (org.eclipse.xtext.CompoundElement)4 ArrayList (java.util.ArrayList)3 Keyword (org.eclipse.xtext.Keyword)3 NamedArgument (org.eclipse.xtext.NamedArgument)3 ParameterReference (org.eclipse.xtext.ParameterReference)3 XtextSwitch (org.eclipse.xtext.util.XtextSwitch)3