protected void updateOverriddenRules(Grammar grammar, Map<String, AbstractRule> rulePerName) { if (grammar.isDefinesHiddenTokens()) { updateHiddenTokens(grammar.getHiddenTokens(), rulePerName); } for (AbstractRule rule : grammar.getRules()) { if (rule instanceof ParserRule && ((ParserRule) rule).isDefinesHiddenTokens()) { updateHiddenTokens(((ParserRule) rule).getHiddenTokens(), rulePerName); } } final List<RuleCall> allRuleCalls = EcoreUtil2.getAllContentsOfType(grammar, RuleCall.class); for (RuleCall call : allRuleCalls) { if (call.getRule() != null) { AbstractRule rule = rulePerName.get(call.getRule().getName()); if (rule != null) call.setRule(rule); } } }
@Override protected void setDefaultValueImpl(EObject obj, EReference ref, IDiagnosticProducer producer) { if (XtextPackage.eINSTANCE.getTypeRef_Metamodel() == ref) { final TypeRef typeRef = (TypeRef) obj; final String typeRefName = GrammarUtil.getTypeRefName(typeRef); final List<EObject> metamodels = XtextMetamodelReferenceHelper.findBestMetamodelForType(typeRef, "", typeRefName, scopeProvider.getScope(typeRef, ref)); if (metamodels.isEmpty() || metamodels.size() > 1) producer.addDiagnostic(new DiagnosticMessage("Cannot find meta model for type '" + typeRefName + "'", Severity.ERROR, null)); else typeRef.setMetamodel((AbstractMetamodelDeclaration) metamodels.get(0)); } else if (XtextPackage.eINSTANCE.getCrossReference_Terminal() == ref) { AbstractRule rule = GrammarUtil.findRuleForName(GrammarUtil.getGrammar(obj), "ID"); if (rule == null) producer.addDiagnostic(new DiagnosticMessage("Cannot resolve implicit reference to rule 'ID'", Severity.ERROR, null)); else { RuleCall call = XtextFactory.eINSTANCE.createRuleCall(); call.setRule(rule); ((CrossReference) obj).setTerminal(call); } } else { super.setDefaultValueImpl(obj, ref, producer); } }
if (parserRule != null) { RuleCall ruleCall = XtextFactory.eINSTANCE.createRuleCall(); ruleCall.setRule(parserRule); calculator.doSwitch(ruleCall);
if (parserRule != null) { RuleCall ruleCall = XtextFactory.eINSTANCE.createRuleCall(); ruleCall.setRule(parserRule); calculator.doSwitch(ruleCall);