gpt4 book ai didi

xmi - 在XTend中加载EMF模型实例

转载 作者:行者123 更新时间:2023-12-04 03:04:51 25 4
gpt4 key购买 nike

我正在XTend中构建代码生成器,那里已经有输入模型和元模型。也就是说,我使用ATL为我的XTend代码生成器生成输入模型(作为逐渐降低抽象级别的转换序列的一部分,而不是一次;这是我不使用xtext创建语法的原因) 。

很清楚,我的代码生成器输入模型是XMI格式的文件,而不是xtext项目的语法(甚至不使用该文件)!而且我认为这导致了我的问题/困惑。

我使用现有模型创建了一个新的XText项目,右键单击.text文件,运行为,生成伪像,然后对mwe2文件执行相同的操作。

下一步是什么,我做对了吗?如何启动我的代码生成器?所有示例均来自使用XText创建DSL的POV。我有一个EMF元模型,以及一个基于XMI的实例。如何使用XTend进一步处理?

任何对教程的提示或指示都是有帮助的。

解决方案:

该解决方案正如Sven在我接受的答案中所建议的那样,但是我还要指出,您需要使用genmodel从元模型生成Java构件。该链接显示了如何:http://www.vogella.com/articles/EclipseEMF/article.html,请参阅第4节。这看起来似乎太合逻辑了,但是无论如何我都应该注意。

最佳答案

如果您有XMI,并且只想从中生成代码,则根本不需要Xtext。
只需从Java项目开始(我将使用一个插件项目,以重用依赖关系管理)并开始编码:

import org.eclipse.emf.common.util.URI
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.resource.Resource$Factory$Registry
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl

class MyCodeGenerator {

def static void main(String[] args) {
new MyCodeGenerator().generate("mymodel.xmi")
}

def generate(String file) {
doEMFSetup
val resourceSet = new ResourceSetImpl
val resource = resourceSet.getResource(URI.createURI(file), true)
for (content : resource.contents) {
generateCode(content)
}
}

def dispatch generateCode(MySpecialType it) '''
public class «name» {
«FOR member : members»
«ENDFOR»
}
'''

def dispatch generateCode(MyMember it) '''
private «type» «name»;
...
'''

def doEMFSetup() {
// EPackage$Registry.INSTANCE.put(MyPackage.eINSTANCE.nsURI, MyPackage.eINSTANCE)
Resource$Factory.Registry.INSTANCE.extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl);
}

}

您需要添加到 list 中的依赖项:
Require-Bundle: org.eclipse.xtend.lib,
com.google.guava,
org.eclipse.xtext.xbase.lib,
org.eclipse.emf.common,
org.eclipse.emf.ecore,
org.eclipse.emf.ecore.xmi

关于xmi - 在XTend中加载EMF模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com