我已经开始使用 Eclipse,但我还是个初学者。所以我想从这里得到一些帮助。我使用 Xtext 来阅读我的 DSL。然后我想用我已经用 GMF 定义的图表来展示实例。但是Xtext中的ecore(MFilesystem)和GMF中的ecore(Filesystem)是不同的。所以我使用 Xtend 来改变模型并创建一个 EObject(Filesystem)。但我不知道 GMF 如何使用 Xtent 的资源来创建图表。我在这里展示我的问题:
1:我在 xtext(Grammmar) 中定义了 ecore:
grammar org.xtext.Filesystem with org.eclipse.xtext.common.Terminals
generate filesystem "http://www.xtext.org/Filesystem"
MFilesystem:
(mfiles+=MFile | mfolder+=MFolder)* ;
MFile:
'myfile' name=ID ';'
;
MFolder:
'myfolder' name = ID ';'
;
2:我在GMF中定义了ecore
3:我尝试运行 Xtext 的运行时
并从我的 DSL 文件(test.filesystem)创建图表。
4:那我有这个问题
5:所以我尝试使用 Xtend 在 Xtext 中更改我的模型
package org.xtext.generator
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.IFileSystemAccess
import org.eclipse.xtext.generator.IGenerator
import org.gmf.filesystem.filesystem.Filesystem
import org.gmf.filesystem.filesystem.FilesystemFactory
import org.gmf.filesystem.filesystem.impl.FilesystemFactoryImpl
import org.xtext.filesystem.MFile
import org.xtext.filesystem.MFolder
class FilesystemGenerator implements IGenerator {
Filesystem myfilesystem
FilesystemFactory myfilesystemFactory
override void doGenerate(Resource resource, IFileSystemAccess fsa) {
//TODO implement me
val ast = resource.contents.get(0)
myfilesystemFactory = new FilesystemFactoryImpl()
myfilesystem = myfilesystemFactory.createFilesystem()
val fi = myfilesystemFactory.createFile()
var astFi = (ast.eContents.get(0)) as MFile
fi.name = astFi.name
val fo = myfilesystemFactory.createFolder()
var astFo = (ast.eContents.get(1)) as MFolder
fo.name = astFo.name
}
}
6:但它不起作用。我想,我做错了什么。所以我想知道,我怎样才能让 GMFmyfilesystem
用来创建图表。
谢谢。