2 つの Eclipse プラグイン プロジェクトで構成されるプロジェクトに取り組んでいます。1 つは EMF プロジェクトで、アプリケーションのメタモデルが含まれています。もう 1 つは、そのメタモデルで動作する実際のプラグインです。
現在、メタモデル プロジェクトで利用可能なすべてのタイプのモデルを一覧表示する方法を探しています。基本的に生成されたすべてのクラスが必要なので、リフレクションを使用してメタモデル パッケージを反復処理できますが、より簡単な方法がある場合はもっと簡単な方法を使用したいと思います。
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 パースペクティブが提供されます。プロジェクトのナビゲータ ビューがある場合は、そのプロジェクトを右クリックして を選択できますNew Model Element
。これにより、メタモデルのすべてのモデル要素が一覧表示されるダイアログが開きます。EMFStore のどこか、またはその依存関係の 1 つで実行する必要があります。ソースコードを調べましたが、それがどこで行われたかを見つけることができないようです。
plugin.xml
プロジェクトのは、ソースで見つからないorg.eclipse.emf.emfstore.perspective
クラスを参照しています。org.eclipse.emf.emfstore.emfperspective.EMFStorePerspective
Eclipse Import Plug-Ins and Fragments 機能を使用してプロジェクトをインポートしましたが、ソース フォルダーがありません。EMFStore git リポジトリでは、そのプロジェクトさえ見つかりません。
アップデート
を使用して、生成されたパッケージを含むレジストリを取得しましたEPackage.Registry.INSTANCE
。残念ながら、メタデータ ( ) を含む 1 つのプロジェクトからの複数の EPackages が含まれていますorg.myproject.metamodel
。今、私はそれをフィルタリングする適切な方法を探していますが、まだコツをつかむことができません.
アップデート
フィルタリングは元の質問の一部ではないため、@SpaceTrucker による回答を受け入れました。興味のある方のために、これが私が今やっている方法です:
Registry registry = EPackage.Registry.INSTANCE;
for (String key : new HashSet<String>(registry.keySet())) {
EPackage ePackage = registry.getEPackage(key);
if (ePackage.getClass().getName().startsWith("org.myproject.metamodel")) {
//do stuf
}
}
プロジェクトをフィルタリングする方法が見つかりませんでしたが、幸運にもすべてのパッケージが同じプレフィックスで始まります。