如何使用 EMF 生成 private/protected 方法和变量?

How to generate private/protected methods & variables using EMF?

我希望使用基于 UML 模型的 genmodel 生成 Java 代码。

我正在研究 Eclipse Oxygen,来自 Papyrus 的 UML 模型(使用了一些 Ecore 配置文件)以便使用 GenModel 向导生成 Ecore 最终生成模型 Java 代码(标准 Eclipse 插件) .

我已将生成的源代码与手写的源代码分开,因此可以避免 @Generated NOT + 手动修改解决方案:)

无论我是否更改属性的 UML 可见性参数,生成的模型代码都没有任何变化(一切都是 public)。

我没有在我阅读的文档中找到有关这样做的可能性的信息(EMF 帮助、Vogella 博客、opCoach 博客,Google...)

我的问题是:

据我所知,无法设置 getters/setters 的访问修饰符。我认为这里的主要问题是所有接口方法都必须是 public,所以在生成的接口中你真的不能有任何其他可见性。而且您通常不希望我们直接实现 classes。

您可以尝试从界面中删除 getters/setters。显然有 suppressedGetVisibilitysuppressedSetVisibility genmodel 注释来抑制接口中的 getter 和 setter 生成(suppressedIsSetVisibilitysuppressedUnSetVisibility 也存在) .它们只会出现在实现中 class 然后。

另一种选择可能是更改您的元模型并组合您的模型元素,以便它们实现两种不同类型的接口:一个 public 描述您的 public API 的接口和一个内部 API 的内部接口。然后只向用户公开 public 接口。

这些选项当然与在 UML 中定义每个可见性不同,但也许它适合您的用例。

感谢@Kapep,解决方案是查看 EReferencevisibility 属性(或 EAttribute 如果需要) 构造型应用于 UML 模型的相应 属性。在那里所做的更改不会影响实现的生成,但会更改生成的界面中出现的内容:

  • 未指定(默认):setter & getter 方法存在
  • None: setter & getter 方法不存在
  • 只读:只有getter存在

然后你可以自由地使用你的人造代码将生成的代码扩展到 use/show 你想要的 getter 和 setter!