我在現有的EMF項目中使用Ecore模型,並希望通過XTend將所有包含類的名稱打印到文本文件中。你如何做到這一點? XTend的例子沒有說明如何使用模型並從中獲取信息。通過XTend從Metamodel生成代碼
1
A
回答
1
如果你只需要你的元模型的EClass,那麼你可以從你的模型包中得到它們: YourEMFModelPackage.eINSTANCE.getEClassifiers()
它返回EList<EClassifier>
。由於EClass
是EClassifier
,所以您可以獲得您所有的EClass實現org.eclipse.emf.ecore.impl.EClassImpl
。 對於類型安全問題,您可能會檢查此列表是否僅包含EClasses,因爲您所有的EDataTypes
也是EClassifier
。
所以這應該給絕招: EcoreUtil.getObjectsByType(YourEMFModelPackage.eINSTANCE.getEClassifiers(), EcorePackage.eINSTANCE.getEClass())
或:
List<EClass> allEClasses = YourEMFModelPackage.eINSTANCE.getEClassifiers().stream().filter(p -> EClass.class.isInstance(p)).map(m -> EClass.class.cast(m)).collect(Collectors.toList());
更新: 如果你沒有你的模型的代碼生成您仍然可以做到這一點,您只需將您的Ecore加載到資源中:
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore",
new EcoreResourceFactoryImpl());
Resource resource = resourceSet.getResource(
URI.createFileURI(
"../path/to/your/Ecore.ecore"),
true);
EPackage model = (EPackage) resource.getContents().get(0);
如果您擁有EPackage
那麼你得到你的EClass
像上面提到
相關問題
- 1. XTEND代碼生成從XTEXT語法
- 2. Xtend:在代碼生成過程中刪除活動註釋
- 3. 調試:使用生成的Java代碼而不是Xtend代碼
- 4. 通過代碼生成trx文件
- 5. PDF通過Javascript生成HTML代碼
- 6. 在xtext項目中使用xtend生成代碼
- 7. XTEND代碼生成文件輸出(訂貨文件放入包)
- 8. 如何使用Xtext和Xtend生成代碼?
- 9. 是否可以從Xtend字符串動態生成Java代碼字符串?
- 10. 如何從Java調用Xtend代碼?
- 11. 代碼生成 - 通過引用數據庫表生成DTO。
- 12. Android:通過代碼生成動畫但不通過xml
- 13. 保存自寫代碼 - xtend
- 14. 代碼從Selenium IDE生成的代碼
- 15. 從C#代碼生成彙編代碼?
- 16. 試圖從Axis2生成的代碼生成代碼
- 17. 從HTML生成Emmet代碼
- 18. 從生成的代碼
- 19. 從* .slx生成C++代碼
- 20. 從Emacs生成代碼
- 21. 從INTEGER代碼生成int
- 22. 從Java生成LLVM代碼
- 23. 從wsdl生成AS3代碼
- 24. 從C#生成XML代碼
- 25. 從AST生成源代碼
- 26. 從XSD生成代碼
- 27. 從WSDL生成Java代碼
- 28. 從Swagger生成Rails代碼
- 29. 從python生成MATLAB代碼
- 30. 生成不生成代碼
看看[中的Xtend加載EMF模型實例(http://stackoverflow.com/questions/12458852/load-emf-model-instance-in-xtend) –
我不需要模型的一個實例。我只需要元模型的類。 – landunder