我正在开发一个由两个Eclipse插件项目组成的项目。一个是EMF项目,包含应用程序的元模型。另一个是处理该元模型的acctual插件。
我现在正在寻找一种方法来列出元模型项目中可用的所有类型的模型。因为我基本上需要所有生成的类,所以我可以使用反射来遍历元模型包,但如果有的话,我更喜欢更简单的方法。
模型已在plugin.xml
中列为扩展名,如下所示:
<plugin>
<extension point="org.eclipse.emf.ecore.generated_package">
<package
uri="MyModel"
class="org.myproject.metamodel.MyModel.MyModelPackage"
genModel="model/MetaModel.genmodel"/>
</extension>
</plugin>
其中类MyModelPackage
扩展EPackage
,org.myproject.metamodel.MyModel
也包含我需要列出的所有其他生成的类。我猜我可以使用那些信息,但我仍然不知道如何。
更新
我正在开展的项目基于EMFStore。运行它提供了EMFStore透视图。如果我有一个项目的Navigator视图,我可以右键单击该项目并选择New Model Element
。这将打开一个对话框,其中列出了元模型中的所有模型元素,因此可以实现。它必须在EMFStore中的某个地方或其中一个依赖项中完成。我查看了源代码,但似乎无法找到它的位置。
项目plugin.xml
的{{1}}是指我在源代码中找不到的类org.eclipse.emf.emfstore.perspective
。我通过Eclipse Import Plug-Ins和Fragments功能导入了项目,它没有源文件夹。在EMFStore git存储库中,我甚至找不到该项目。
更新
我现在使用org.eclipse.emf.emfstore.emfperspective.EMFStorePerspective
获得了包含生成的包的注册表。不幸的是,它包含的内容超过了包含元数据(EPackage.Registry.INSTANCE
)的一个项目中的EPackages。现在我只是想找到一种适当的方法来过滤它,但仍然无法掌握它。
更新
由于过滤不是我原始问题的一部分,我接受了@SpaceTrucker的回答。对于那些好奇的人来说,这就是我现在的表现:
org.myproject.metamodel
我发现没有办法过滤项目,但幸运的是所有的包都以相同的前缀开头。
答案 0 :(得分:2)
可以通过EPackage.Registry注册EPackages。似乎有一个全球使用的实例可通过ECorePlugin.getDefaultRegistryImplementation()获得。但是我不是百分百肯定的。
MoDisco附带EMF模型浏览器,您还可以在其中选择任何已注册的EMF模型。所以你也可以看看这些来源。