@Override public Boolean caseAbstractElement(AbstractElement object) { return !GrammarUtil.isOptionalCardinality(object); }
@Override public Boolean caseAssignment(Assignment object) { if (GrammarUtil.isOptionalCardinality(object)) return Boolean.FALSE; return Boolean.TRUE; }
private boolean isAlternativeWithEmptyPath(AbstractElement abstractElement) { if (abstractElement instanceof Alternatives) { Alternatives alternatives = (Alternatives) abstractElement; for(AbstractElement path: alternatives.getElements()) { if (GrammarUtil.isOptionalCardinality(path)) return true; } } return false; } }
protected ConstraintElement(EObject context, ConstraintElementType type, AbstractElement element) { this(context, type, element, type != ConstraintElementType.ASSIGNED_ACTION_CALL && GrammarUtil.isMultipleCardinality(element), type != ConstraintElementType.ASSIGNED_ACTION_CALL && GrammarUtil.isOptionalCardinality(element)); }
private boolean isAlternativeWithEmptyPath(AbstractElement abstractElement) { if (abstractElement instanceof Alternatives) { Alternatives alternatives = (Alternatives) abstractElement; for(AbstractElement path: alternatives.getElements()) { if (GrammarUtil.isOptionalCardinality(path)) return true; } } return false; }
@Override public Pair<Boolean, Boolean> caseAssignment(Assignment object) { return Tuples.create(true, !GrammarUtil.isOptionalCardinality(object)); }
@Override public List<String> caseKeyword(Keyword object) { if (GrammarUtil.isMultipleCardinality(object)) { return Collections.emptyList(); } if (GrammarUtil.isOptionalCardinality(object)) { return Lists.newArrayList("", object.getValue()); } return Lists.newArrayList(object.getValue()); } @Override
@Override public Boolean caseCompoundElement(CompoundElement object) { if (GrammarUtil.isOptionalCardinality(object)) return false; for (AbstractElement child : object.getElements()) { if (doSwitch(child)) { return true; } } return false; }
@Override public Boolean caseAlternatives(Alternatives object) { if (GrammarUtil.isOptionalCardinality(object)) return false; for (AbstractElement child : object.getElements()) { if (!doSwitch(child)) { return false; } } return true; }
@Override public Boolean caseUnorderedGroup(UnorderedGroup object) { Boolean result = Boolean.TRUE; for(AbstractElement element: object.getElements()) { if (!doSwitch(element)) result = Boolean.FALSE; } return result || GrammarUtil.isOptionalCardinality(object); }
@Override public Boolean caseAssignment(Assignment object) { Boolean result = doSwitch(object.getTerminal()); return result || GrammarUtil.isOptionalCardinality(object); }
@Override public Boolean caseCrossReference(CrossReference object) { Boolean result = doSwitch(object.getTerminal()); return result || GrammarUtil.isOptionalCardinality(object); }
@Override public Boolean caseCompoundElement(CompoundElement object) { if (GrammarUtil.isOptionalCardinality(object)) return Boolean.FALSE; for(AbstractElement element: object.getElements()) { if (doSwitch(element)) return Boolean.TRUE; } return Boolean.FALSE; }
@Override public Boolean caseUnorderedGroup(UnorderedGroup object) { boolean result = true; for(AbstractElement element: object.getElements()) { if (!doSwitch(element)) { result = false; } } return result || GrammarUtil.isOptionalCardinality(object); }
@Override public Boolean caseAlternatives(Alternatives object) { Boolean result = Boolean.FALSE; for(AbstractElement element: object.getElements()) { if (doSwitch(element)) result = Boolean.TRUE; } return result || GrammarUtil.isOptionalCardinality(object); }
@Override public Boolean caseGroup(Group object) { for(AbstractElement element: object.getElements()) { if (!doSwitch(element)) { return GrammarUtil.isOptionalCardinality(object); } } return Boolean.TRUE; }
@Override public Xtext2EcoreInterpretationContext caseGroup(Group object) { Xtext2EcoreInterpretationContext result = deriveFeatures(context.spawnContextForGroup(), object.getElements()); if (GrammarUtil.isOptionalCardinality(object)) { result = result.mergeSpawnedContexts(Arrays.asList(context, result)); } return result; }
@Override public Boolean caseRuleCall(RuleCall object) { if (object.getRule() == null) return assignedActionAllowed; assignedActionAllowed = assignedActionAllowed || doSwitch(object.getRule()) && !GrammarUtil.isOptionalCardinality(object); return assignedActionAllowed; }
@Override public Pair<Boolean, Boolean> caseAlternatives(Alternatives object) { boolean valid = true; boolean instantiated = !GrammarUtil.isOptionalCardinality(object); for(AbstractElement element: object.getElements()) { Pair<Boolean, Boolean> elementResult = doSwitch(element); valid &= elementResult.getFirst().booleanValue(); instantiated &= elementResult.getSecond().booleanValue(); } return Tuples.create(valid, instantiated); }
@Override public Boolean caseRuleCall(RuleCall object) { if (GrammarUtil.isOptionalCardinality(object)) return Boolean.FALSE; return object.getRule() == null || (object.getRule() instanceof ParserRule && !GrammarUtil.isDatatypeRule((ParserRule) object.getRule())); }