我已经开始使用Eclipse了,我还是初学者。所以我想从这里得到一些帮助。 我使用Xtext来读取我的DSL。然后我想用图表显示实例,我已经用GMF定义了这个图表。但是Xtext中的ecore(MFilesystem)和GMF中的ecore(Filesystem)是不同的。所以我使用Xtend来更改模型并创建一个EObject(文件系统)。但我不知道,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)创建diagramm。
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:但它不起作用。我想,我做错了什么。所以我想知道,我如何才能让GMF使用myfilesystem
来创建图表。
感谢。
答案 0 :(得分:1)
Xtext指令
generate filesystem "http://www.xtext.org/Filesystem"
生成新的元模型,而不是导入现有的元模型。相反,请指定
import "platform:/resource/org.gmf.filesystem/model/filesystem.ecore"
引用您的GMF编辑器正在使用的元模型。有关详细信息,请参阅this post。