3

EMFの依存関係なしに、EcoreメタモデルからJavaコードを生成することは可能ですか?UMLモデルからの生成であるかのように、「クリーンなコード」を生成します。

4

2 に答える 2

2

簡単な方法は、最上位ノードの「モデル機能のデフォルト」セクションでGenModelオプション「EMFタイプの抑制」を設定することです...関連するオプションの穴セットがあります。詳細については、EMFブック(第2版)を参照してください。

JETを使用して、ECoreモデルから独自のJavaコードを生成することもできます。かなり詳細な説明については、「EMFを使用したメタモデリング:具体的で再利用可能なJavaスニペットの生成」を参照してください。

于 2012-05-19T20:59:36.757 に答える
0

EMFモデルエディターを使用してすべてを削除できるわけではありません。、、などのメソッドは#eSet#eGet基になるテンプレートで削除する必要があります。このeInvokeメソッドは、「OperationReflection」=falseを設定することで削除できます。utilパッケージは、パッケージレベルのconfig "Adapter Factory"=falseを設定して削除できます。genmodel configから管理できる他の変更があります。詳細については、EMFModelingFrameworkの本のセクション12.3.1を参照してください。

「EMFタイプの抑制」は、EMFタイプEOperationEReferenceゲッターとセッターからのみ削除しますが、宣言されたivarまたはゲッターで使用されるコンストラクター(リストがnullの場合)からは削除しないことに注意してください。これらはテンプレートで変更する必要があります-具体的にはClass.javajet。コアEMFテンプレートを置き換える方法の詳細については、using-dynamic-templates-in-emfを参照してください。

ivarにはFeature#getImportedType、ではなく、を使用しFeature#getImportedInternalTypeます。

protected <%=genFeature.getImportedType(genClass)%> <%=genFeature.getSafeName()%>;

この行は、isListTypeテスト内にある以下を含むコメントセクションの後に続きます。

<%} else if (genFeature.isListType() || genFeature.isReferenceType()) {%>
  <%if (genClass.isField(genFeature)) {%>
/**
 * The cached value of the '{@link #<%=genFeature.getGetAccessor()%>() <em><%=genFeature.getFormattedName()%></em>}' <%=genFeature.getFeatureKind()%>.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->

アクセサの場合は、次のようなものを使用して、EMF EListimplをArrayList:に置き換えます。

<%=genFeature.getSafeName()%> = new <%=genModel.getImportedName("java.util.ArrayList")%><<%=genFeature.getListItemTy‌​pe()%>>();

instead of:
<%=genFeature.getSafeName()%> = new <%=genClass.getListConstructor(genFeature)%>;
于 2012-09-13T14:10:13.927 に答える