首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过XTend从Metamodel生成代码

通过XTend从Metamodel生成代码
EN

Stack Overflow用户
提问于 2016-08-31 00:09:40
回答 1查看 355关注 0票数 1

我在现有的EMF项目中有一个Ecore模型,并希望通过XTend将所有包含类的名称打印到文本文件中。你是如何做到这一点的?XTend示例没有展示如何使用模型并从中获取信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 11:42:37

如果您只需要元模型的EClasses,那么您可以从您的Model:YourEMFModelPackage.eINSTANCE.getEClassifiers()获得它们,它返回一个EList<EClassifier>。因为EClass是一个EClassifier,所以您可以得到所有的EClass实现org.eclipse.emf.ecore.impl.EClassImpl。出于类型安全方面的考虑,您可能会检查这个列表是否只包含EClasses,因为您的所有EDataTypes也都是EClassifier

所以这应该是诀窍:EcoreUtil.getObjectsByType(YourEMFModelPackage.eINSTANCE.getEClassifiers(), EcorePackage.eINSTANCE.getEClass())

或者:

List<EClass> allEClasses = YourEMFModelPackage.eINSTANCE.getEClassifiers().stream().filter(p -> EClass.class.isInstance(p)).map(m -> EClass.class.cast(m)).collect(Collectors.toList());

更新:如果您没有生成模型代码,您仍然可以这样做,只需要将您的Ecore加载到一个资源中:

代码语言:javascript
复制
    ResourceSet resourceSet = new ResourceSetImpl();
    resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore",
            new EcoreResourceFactoryImpl());
    Resource resource = resourceSet.getResource(
            URI.createFileURI(
                    "../path/to/your/Ecore.ecore"),
            true);
    EPackage model = (EPackage) resource.getContents().get(0);

如果您有EPackage,那么您就会得到上面提到的EClass

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39238860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档