@Override public Boolean caseEnumRule(EnumRule object) { return doSwitch(object.getAlternatives()); }
private boolean isEnumLiteral(EObject object, EStructuralFeature feature) { if (feature == XtextPackage.eINSTANCE.getEnumLiteralDeclaration_EnumLiteral()) { EnumRule rule = GrammarUtil.containingEnumRule(object); return rule.getType() == null || rule.getType().getClassifier() == null; } return false; }
StringConcatenation _builder = new StringConcatenation(); _builder.append("// Rule "); String _name = AntlrGrammarGenUtil.<EnumRule>getOriginalElement(it).getName(); _builder.append(_name); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("\t"); String _ebnf = this.ebnf(it.getAlternatives(), options, false); _builder.append(_ebnf, "\t"); _builder.newLineIfNotEmpty();
@Check public void checkEnumLiteralIsUnique(EnumLiteralDeclaration decl) { EnumRule rule = GrammarUtil.containingEnumRule(decl); List<EnumLiteralDeclaration> declarations = EcoreUtil2.getAllContentsOfType(rule, EnumLiteralDeclaration.class); String literal = decl.getLiteral().getValue(); if (literal != null) { for (EnumLiteralDeclaration otherDecl : declarations) { if (otherDecl != decl && literal.equals(otherDecl.getLiteral().getValue())) { error("Enum literal '" + literal + "' is used multiple times in enum rule '" + rule.getName() + "'.", XtextPackage.Literals.ENUM_LITERAL_DECLARATION__LITERAL); } } } }
@Override public Boolean caseEnumRule(EnumRule object) { return doSwitch(object.getAlternatives()); }
@Check public void checkGeneratedEnumIsValid(EnumLiteralDeclaration decl) { EnumRule rule = GrammarUtil.containingEnumRule(decl); if (!(rule.getType().getMetamodel() instanceof GeneratedMetamodel)) return; if (!(rule.getType().getClassifier() instanceof EEnum)) return; EEnum eEnum = (EEnum) rule.getType().getClassifier(); List<EnumLiteralDeclaration> declarations = EcoreUtil2.getAllContentsOfType(rule, EnumLiteralDeclaration.class); if (declarations.size() == eEnum.getELiterals().size()) return; for (EnumLiteralDeclaration otherDecl : declarations) { if (decl == otherDecl) { return; } if (otherDecl.getEnumLiteral() == decl.getEnumLiteral()) { if (!decl.getEnumLiteral().getLiteral().equals(decl.getLiteral().getValue())) warning("Enum literal '" + decl.getEnumLiteral().getName() + "' has already been defined with literal '" + decl.getEnumLiteral().getLiteral() + "'.", XtextPackage.Literals.ENUM_LITERAL_DECLARATION__ENUM_LITERAL); return; } } }
protected String _localVar(final EnumLiteralDeclaration it) { int _indexOf = this.contentsAsList(GrammarUtil.containingEnumRule(it).getAlternatives()).indexOf(it); return ("enumLiteral_" + Integer.valueOf(_indexOf)); }
public IScope getScope(EObject context, EReference reference) { if (reference == XtextPackage.eINSTANCE.getTypeRef_Classifier()) { if (context instanceof TypeRef) { final TypeRef typeRef = (TypeRef) context; final AbstractMetamodelDeclaration metaModel = typeRef.getMetamodel(); if (metaModel != null) { EPackage pack = metaModel.getEPackage(); if (pack != null) return createClassifierScope(pack.getEClassifiers()); } else { return createReferencedPackagesScope(GrammarUtil.getGrammar(context)); } } else { return createReferencedPackagesScope(GrammarUtil.getGrammar(context)); } return IScope.NULLSCOPE; } if (reference == XtextPackage.eINSTANCE.getEnumLiteralDeclaration_EnumLiteral()) { final EnumRule rule = GrammarUtil.containingEnumRule(context); if (rule.getType() != null && rule.getType().getClassifier() != null && rule.getType().getClassifier() instanceof EEnum) { return createEnumLiteralsScope((EEnum) rule.getType().getClassifier()); } return IScope.NULLSCOPE; } return createScope(context.eResource(), reference.getEReferenceType()); }
protected Keyword getLiteral(EObject context, RuleCall ruleCall, Object value) { EnumRule rule = (EnumRule) ruleCall.getRule(); if (rule.getAlternatives() instanceof EnumLiteralDeclaration) { EnumLiteralDeclaration decl = (EnumLiteralDeclaration) rule.getAlternatives(); if (decl.getEnumLiteral().getInstance().equals(value)) { return decl.getLiteral(); } } else { for (AbstractElement element : ((Alternatives) rule.getAlternatives()).getElements()) { EnumLiteralDeclaration decl = (EnumLiteralDeclaration) element; if (decl.getEnumLiteral().getInstance().equals(value)) { return decl.getLiteral(); } } } return null; }
private void deriveEnums(EnumRule rule) { EEnum returnType = (EEnum) rule.getType().getClassifier(); if (returnType != null) { List<EnumLiteralDeclaration> decls = EcoreUtil2.getAllContentsOfType(rule, EnumLiteralDeclaration.class); String text = node.getText(); EEnumLiteral literal = null; if (rule.getType().getMetamodel() instanceof ReferencedMetamodel) { literal = returnType.getEEnumLiteral(text); } else {
protected Keyword getLiteral(EObject context, RuleCall ruleCall, Object value) { EnumRule rule = (EnumRule) ruleCall.getRule(); if (rule.getAlternatives() instanceof EnumLiteralDeclaration) { EnumLiteralDeclaration decl = (EnumLiteralDeclaration) rule.getAlternatives(); if (decl.getEnumLiteral().getInstance().equals(value)) { return decl.getLiteral(); } } else { for (AbstractElement element : ((Alternatives) rule.getAlternatives()).getElements()) { EnumLiteralDeclaration decl = (EnumLiteralDeclaration) element; if (decl.getEnumLiteral().getInstance().equals(value)) { return decl.getLiteral(); } } } return null; }