首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECore反射和交叉引用

ECore反射和交叉引用
EN

Stack Overflow用户
提问于 2016-12-16 13:48:32
回答 1查看 224关注 0票数 0

为了具有上下文,我目前正在进行从ecore到java模型的转换。实际上,我正在读取一些ecore文件并生成一个字符串,该字符串恰好是一个有效的java接口源代码。

举个例子,下面是我的代码生成工作流。

projectA.ecore:

定义EClass 'A‘

代码语言:javascript
复制
package projectA : projectA = 'http://www.example.org/projectA'
{
    class A;
}

projectB.ecore:

定义一个EClass 'B‘,它继承自'A’,使用对a.ecore的交叉引用来访问它。

代码语言:javascript
复制
import projectA : '../../projectA/model/projectA.ecore#/';

package projectB : projectB = 'http://www.example.org/projectB'
{
    class B extends projectA::A;
}

我首先从这些ecore中为projectA.ecore生成一个接口:

代码语言:javascript
复制
package projecta;

interface ProjectA<A> {
  // ...
}

现在,我想对projectB.ecore做同样的事情,并获得以下接口:

代码语言:javascript
复制
package projectb;

import projecta.ProjectA;

interface ProjectB<A,B> extends ProjectA<A> {
  // ...
}

为此,我需要检测使用交叉引用访问的A is和EClass,并在projectA.ecore中进行一些分析,以便生成有效的接口扩展、包导入.

我在ecore反射API中环顾四周,没有找到一种干净而明显的方法。这个是可能的吗?是的,怎么做的?

编辑:技术细节

我使用这种代码加载ecore:

代码语言:javascript
复制
final ResourceSetImpl resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new XMIResourceFactoryImpl());
final Resource resource = resourceSet.getResource(uri, true);
final EPackage ePackage = (EPackage) resource.getContents().get(0);
final String fileContent = new GenerateAlgebra().process(ePackage);

GenerateAlgebra是专用于.ecore到字符串转换的类。从技术上讲,它是使用https://github.com/manuelleduc/ecore-oa/blob/master/fr.inria.diverse.ecorealgebragenerator/src/fr/inria/diverse/objectalgebragenerator/popup/actions/GenerateAlgebra.xtend开发的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 14:49:43

如果您只想获得定义EClass的ecore文件的文件路径,请使用资源URI

尝试:

ePackage.eResource().getURI(),它为您提供了定义包及其所有EClasses的ecore文件的实际URI。类似于:file:/Users/../../yourPath/projectA.ecore,您也可以使用getNsURI()getName()来识别两个ecore文件。

如果您像以前一样使用Resourceset,并且在几个ecore文件之间有交叉引用,那么这个集合也会尝试加载所有其他资源。这意味着,通过调用resourceSet.getResource(uri, true),资源集应该包含这两个资源。

尝试遍历resourceSet.getResources()

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

https://stackoverflow.com/questions/41185865

复制
相关文章

相似问题

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