@Override public List<EObject> getLinkedObjects(EObject context, EReference ref, INode node) throws IllegalNodeException { if (ref == XtextPackage.eINSTANCE.getGrammar_UsedGrammars()) return getUsedGrammar((Grammar) context, node); if (ref == XtextPackage.eINSTANCE.getTypeRef_Metamodel()) return getLinkedMetaModel((TypeRef)context, ref, (ILeafNode) node); if (ref == XtextPackage.eINSTANCE.getAbstractMetamodelDeclaration_EPackage() && context instanceof GeneratedMetamodel) return createPackage((GeneratedMetamodel) context, (ILeafNode) node); if (ref == XtextPackage.eINSTANCE.getAbstractMetamodelDeclaration_EPackage() && context instanceof ReferencedMetamodel) return getPackage((ReferencedMetamodel)context, (ILeafNode) node); return super.getLinkedObjects(context, ref, node); }
@Check public void checkTerminalRuleNamingConventions(TerminalRule terminalRule){ if(!terminalRule.getName().equals(terminalRule.getName().toUpperCase())) warning("TerminalRule must be written in uppercase.", terminalRule, XtextPackage.eINSTANCE.getAbstractRule_Name(),INVALID_TERMINALRULE_NAME, terminalRule.getName()); }
@Override public boolean isTransient(EObject owner, EStructuralFeature feature, int index) { if (feature == XtextPackage.eINSTANCE.getTypeRef_Metamodel()) { final TypeRef typeRef = (TypeRef) owner; final AbstractMetamodelDeclaration m = typeRef.getMetamodel(); return true; else if (feature == XtextPackage.eINSTANCE.getAbstractRule_Type()) { final AbstractRule rule = (AbstractRule) owner; if (rule instanceof ParserRule || rule instanceof EnumRule) { return true; else if (rule.getName().equals(returnType.getClassifier().getName())) { return isTransient(returnType, XtextPackage.eINSTANCE.getTypeRef_Metamodel(), -1); } else if (GrammarUtil.isDatatypeRule(rule)) { return NodeModelUtils.getNode(returnType) == null; else if (feature == XtextPackage.eINSTANCE.getCrossReference_Terminal()) { final CrossReference ref = (CrossReference) owner; if (ref.getTerminal() instanceof RuleCall && ((RuleCall) ref.getTerminal()).getRule() != null && return true; else if (feature == XtextPackage.eINSTANCE.getEnumLiteralDeclaration_Literal()) { final EnumLiteralDeclaration decl = (EnumLiteralDeclaration) owner; return decl.getEnumLiteral() != null && decl.getLiteral() != null &&
initEReference(getCodetemplates_Language(), theXtextPackage.getGrammar(), null, "language", null, 0, 1, Codetemplates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getCodetemplates_Templates(), this.getCodetemplate(), null, "templates", null, 0, -1, Codetemplates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCodetemplate_Id(), theEcorePackage.getEString(), "id", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCodetemplate_Description(), theEcorePackage.getEString(), "description", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getCodetemplate_Context(), theXtextPackage.getAbstractRule(), null, "context", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCodetemplate_KeywordContext(), theEcorePackage.getEString(), "keywordContext", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getCodetemplate_Body(), this.getTemplateBody(), null, "body", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
XtextPackage.eINSTANCE.eClass();
@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); } }
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()); }
private boolean isGeneratedPackage(EObject object, EStructuralFeature feature) { return (feature == XtextPackage.eINSTANCE.getAbstractMetamodelDeclaration_EPackage() && (object instanceof GeneratedMetamodel)); }
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; }
@Override public ValueTransient isValueTransient(EObject owner, EStructuralFeature feature) { if (feature == XtextPackage.eINSTANCE.getTypeRef_Metamodel()) { final TypeRef typeRef = (TypeRef) owner; final AbstractMetamodelDeclaration m = typeRef.getMetamodel(); if (m == null || Strings.isEmpty(m.getAlias())) return YES; } else if (feature == XtextPackage.eINSTANCE.getAbstractRule_Type()) { final AbstractRule rule = (AbstractRule) owner; if (!GrammarUtil.isDatatypeRule(rule) && (rule instanceof ParserRule || rule instanceof EnumRule)) { return YES; else if (rule.getName().equals(returnType.getClassifier().getName())) { if (isValueTransient(returnType, XtextPackage.eINSTANCE.getTypeRef_Metamodel()) == YES) return PREFERABLY; else return NO; } else if (feature == XtextPackage.eINSTANCE.getCrossReference_Terminal()) { final CrossReference ref = (CrossReference) owner; if (ref.getTerminal() instanceof RuleCall && ((RuleCall) ref.getTerminal()).getRule() != null) { } else if (feature == XtextPackage.eINSTANCE.getEnumLiteralDeclaration_Literal()) { final EnumLiteralDeclaration decl = (EnumLiteralDeclaration) owner; if (decl.getEnumLiteral() != null && decl.getLiteral() != null) {
initEReference(getCodetemplates_Language(), theXtextPackage.getGrammar(), null, "language", null, 0, 1, Codetemplates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getCodetemplates_Templates(), this.getCodetemplate(), null, "templates", null, 0, -1, Codetemplates.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCodetemplate_Id(), theEcorePackage.getEString(), "id", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCodetemplate_Description(), theEcorePackage.getEString(), "description", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getCodetemplate_Context(), theXtextPackage.getAbstractRule(), null, "context", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getCodetemplate_KeywordContext(), theEcorePackage.getEString(), "keywordContext", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getCodetemplate_Body(), this.getTemplateBody(), null, "body", null, 0, 1, Codetemplate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
XtextPackage.eINSTANCE.eClass();
@Override protected String getUnconvertedLinkText(EObject object, EReference reference, EObject context) { if (reference == XtextPackage.eINSTANCE.getGrammar_UsedGrammars()) return ((Grammar) object).getName(); if (reference == XtextPackage.eINSTANCE.getTypeRef_Metamodel()) return aliasResolver.getValue(object); if (reference == XtextPackage.eINSTANCE.getAbstractMetamodelDeclaration_EPackage()) return ((EPackage) object).getNsURI(); if (object instanceof AbstractRule) return ((AbstractRule) object).getName(); return super.getUnconvertedLinkText(object, reference, context); } }