我在现有的EMF项目中有一个Ecore模型,并希望通过XTend将所有包含类的名称打印到文本文件中。你是如何做到这一点的?XTend示例没有展示如何使用模型并从中获取信息。
发布于 2016-08-31 11:42:37
如果您只需要元模型的EClasses,那么您可以从您的Model: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
https://stackoverflow.com/questions/39238860
复制相似问题