如何使用 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...)
我的问题是:
- GenModel 处理是否可以考虑 UML 对象的可见性?
- 是否可以设置 UML Ecore 配置文件以强制生成代码的可见性? (我试过至今没有成功)
据我所知,无法设置 getters/setters 的访问修饰符。我认为这里的主要问题是所有接口方法都必须是 public,所以在生成的接口中你真的不能有任何其他可见性。而且您通常不希望我们直接实现 classes。
您可以尝试从界面中删除 getters/setters。显然有 suppressedGetVisibility
和 suppressedSetVisibility
genmodel 注释来抑制接口中的 getter 和 setter 生成(suppressedIsSetVisibility
和 suppressedUnSetVisibility
也存在) .它们只会出现在实现中 class 然后。
另一种选择可能是更改您的元模型并组合您的模型元素,以便它们实现两种不同类型的接口:一个 public 描述您的 public API 的接口和一个内部 API 的内部接口。然后只向用户公开 public 接口。
这些选项当然与在 UML 中定义每个可见性不同,但也许它适合您的用例。
感谢@Kapep,解决方案是查看 EReference 的 visibility
属性(或 EAttribute 如果需要) 构造型应用于 UML 模型的相应 属性。在那里所做的更改不会影响实现的生成,但会更改生成的界面中出现的内容:
- 未指定(默认):setter & getter 方法存在
- None: setter & getter 方法不存在
- 只读:只有getter存在
然后你可以自由地使用你的人造代码将生成的代码扩展到 use/show 你想要的 getter 和 setter!
我希望使用基于 UML 模型的 genmodel 生成 Java 代码。
我正在研究 Eclipse Oxygen,来自 Papyrus 的 UML 模型(使用了一些 Ecore 配置文件)以便使用 GenModel 向导生成 Ecore 最终生成模型 Java 代码(标准 Eclipse 插件) .
我已将生成的源代码与手写的源代码分开,因此可以避免 @Generated NOT
+ 手动修改解决方案:)
无论我是否更改属性的 UML 可见性参数,生成的模型代码都没有任何变化(一切都是 public)。
我没有在我阅读的文档中找到有关这样做的可能性的信息(EMF 帮助、Vogella 博客、opCoach 博客,Google...)
我的问题是:
- GenModel 处理是否可以考虑 UML 对象的可见性?
- 是否可以设置 UML Ecore 配置文件以强制生成代码的可见性? (我试过至今没有成功)
据我所知,无法设置 getters/setters 的访问修饰符。我认为这里的主要问题是所有接口方法都必须是 public,所以在生成的接口中你真的不能有任何其他可见性。而且您通常不希望我们直接实现 classes。
您可以尝试从界面中删除 getters/setters。显然有 suppressedGetVisibility
和 suppressedSetVisibility
genmodel 注释来抑制接口中的 getter 和 setter 生成(suppressedIsSetVisibility
和 suppressedUnSetVisibility
也存在) .它们只会出现在实现中 class 然后。
另一种选择可能是更改您的元模型并组合您的模型元素,以便它们实现两种不同类型的接口:一个 public 描述您的 public API 的接口和一个内部 API 的内部接口。然后只向用户公开 public 接口。
这些选项当然与在 UML 中定义每个可见性不同,但也许它适合您的用例。
感谢@Kapep,解决方案是查看 EReference 的 visibility
属性(或 EAttribute 如果需要) 构造型应用于 UML 模型的相应 属性。在那里所做的更改不会影响实现的生成,但会更改生成的界面中出现的内容:
- 未指定(默认):setter & getter 方法存在
- None: setter & getter 方法不存在
- 只读:只有getter存在
然后你可以自由地使用你的人造代码将生成的代码扩展到 use/show 你想要的 getter 和 setter!