2

クラスのリストを「実行」するために使用するように設計された、次のようなEcoreメタモデルを設計するとします。

JavaClassRunnerList
   0..* JavaClass

そして、、、、およびという名前PrintsHelloのクラスを持つJavaプロジェクトがあると仮定します。PrintsSeparatorPrintsWorld

次に、次のようなモデルを作成できるようにしたいと思います。

JavaClassRunnerList
   PrintsHello.class
   PrintsSeparator.class
   PrintsWorld.class
   PrintsSeparator.class
   PrintsSeparator.class

モデルにJavaプロジェクトを含め、そのクラスをモデル参照の選択肢として認識できるようにしたい(モデルが含まれているのと同じプロジェクトに同じ場所に配置されている可能性があります)。

これは可能ですか?

4

2 に答える 2

2

エド・メルクスは次のように述べています。残りの議論については、スレッドを参照してください。

EcoreのEJavaClassデータ型を使用して、複数値の属性を作成できます。クラス名を使用し、クラスローダーを使用してサームを実際のクラスインスタンスに変換する方がよい場合があります。

IProject;への参照が必要な場合も同様です。IProject文字列を使用してから、ワークスペースルートを使用して文字列をに解決できます。

于 2012-03-05T19:56:07.697 に答える
0

参照するJavaクラスごとにecoreに追加のEDatatypeを定義し(「インスタンスタイプ名」= javaクラス修飾名)、これらのデータ型を使用してEAttributeの一部を入力する必要があります。

リソースファイルにEAttribute値を保持する場合は、作成されたEDatatypeごとに特定のコンバーターを実装する必要があることに注意してください。

'Date'という名前のEDatatypeを使用し、instanceTypeName ='java.util.Date'を使用した例では、ファクトリ実装で次の2つのメソッドの実装を指定する必要があります。

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public Date createDateFromString(EDataType eDataType, String initialValue) {
    // TODO replace with your implementation
    return (Date)super.createFromString(eDataType, initialValue);
}

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public String convertDateToString(EDataType eDataType, Object instanceValue) {
    // TODO replace with your implementation
    return super.convertToString(eDataType, instanceValue);
}
于 2018-04-20T14:35:17.333 に答える