2012-05-19 48 views

回答

2

最簡單的方法是在頂層節點的「模型特徵缺省值」部分設置GenModel選項「抑制EMF類型」...有相關選項的孔集。有關完整的詳細信息,請參閱EMF手冊(第二版)。

您也可以使用JET從ECore模型生成您自己的Java代碼。請參閱「Metamodeling with EMF: Generating concrete, reusable Java snippets」以獲取更詳細的說明。

+0

但是,「抑制EMF類型」不會刪除所有依賴關係。我會看看這本書,謝謝 – seeebown

+1

它也可以服務於其他人:http://wiki.eclipse.org/EMF/Recipes#Recipe:_Generating_Pure_API_With_No_Visible_EMF_Dependencies – seeebown

+0

並非所有東西都可以使用EMF模型編輯器刪除。必須在底層模板中刪除#eSet,#eGet等方法。 eInvoke方法可以通過設置「Operation Reflection」= false來刪除。 util包可以被刪除設置包級配置「Adapter Factory」= false。你是別人。目前正在制定如何使用列表,而不是EList :-( – wmorrison365

0

並非所有東西都可以使用EMF模型編輯器刪除。必須在底層模板中刪除#eSet#eGet等方法。通過設置「Operation Reflection」= false,可以刪除eInvoke方法。 util包可以被刪除設置包級配置「Adapter Factory」= false。還有其他可以通過genmodel config進行管理的更改 - 有關更多詳細信息,請參閱EMF建模框架手冊的第12.3.1節。

注意,「禁止EMF類型」從EOperationEReference getter和setter刪除EMF類型只而不是從宣佈伊娃或在您的getter使用(如果列表爲空)構造函數。這些必須在模板中進行更改 - Class.javajet具體。有關如何更換核心EMF模板的詳細信息,請參閱using-dynamic-templates-in-emf

對於伊娃,使用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 EList impl與ArrayList

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

instead of: 
<%=genFeature.getSafeName()%> = new <%=genClass.getListConstructor(genFeature)%>; 
+1

有人可能會認爲,如果您不得不將模板更改爲這種程度,那麼您不應該使用EMF :-) – wmorrison365