0

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が拡張EPackageorg.myproject.metamodel.MyModelれ、リストする必要がある他のすべての生成されたクラスも含まれています。私はその情報を使用できると推測していますが、まだ方法がわかりません。

アップデート

私が取り組んでいるプロジェクトはEMFStoreに基づいています。それを実行すると、EMFStore パースペクティブが提供されます。プロジェクトのナビゲータ ビューがある場合は、そのプロジェクトを右クリックして を選択できますNew Model Element。これにより、メタモデルのすべてのモデル要素が一覧表示されるダイアログが開きます。EMFStore のどこか、またはその依存関係の 1 つで実行する必要があります。ソースコードを調べましたが、それがどこで行われたかを見つけることができないようです。

plugin.xmlプロジェクトのは、ソースで見つからないorg.eclipse.emf.emfstore.perspectiveクラスを参照しています。org.eclipse.emf.emfstore.emfperspective.EMFStorePerspectiveEclipse 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
    }
}

プロジェクトをフィルタリングする方法が見つかりませんでしたが、幸運にもすべてのパッケージが同じプレフィックスで始まります。

4

1 に答える 1

2

EPackagesは、 EPackage.Registryを介して登録できます。ECorePlugin.getDefaultRegistryImplementation()を介して利用できるグローバルに使用されるインスタンスがあるようです。しかし、私はそれについて100%確信していません。

MoDiscoにはEMFモデルブラウザーが付属しており、登録済みのEMFモデルを選択することもできます。したがって、これらのソースも確認できます。

于 2013-03-12T14:22:39.720 に答える