2

假设我想设计一个看起来像这样的 Ecore 元模型,旨在用于“运行”一个类列表:

JavaClassRunnerList
   0..* JavaClass

并假设我有一些 Java 项目,其中包含名为PrintsHelloPrintsSeparator和的类PrintsWorld

我希望能够编写如下所示的模型:

JavaClassRunnerList
   PrintsHello.class
   PrintsSeparator.class
   PrintsWorld.class
   PrintsSeparator.class
   PrintsSeparator.class

我希望我的模型能够包含一个 Java 项目并将其类识别为模型引用的选择(可能位于模型所在的同一个项目中。)

这可能吗?

4

2 回答 2

2

Ed Merks 说如下。请参阅讨论的其余部分的主题。

您可以使用 Ecore 的EJavaClass数据类型来创建多值属性。您最好只使用类名,并使用类加载器将它们转换为实际的类实例。

想要引用IProject;也是如此。您可以使用字符串,然后IProject使用工作区根将其解析为。

于 2012-03-05T19:56:07.697 回答
0

您应该为您想要引用的每个 Java 类定义额外的 EDatatypes 到您的 ecore(使用 'Instance Type Name' = java 类限定名称),并简单地使用这些数据类型来键入您的一些 EAttributes。

请注意,如果要将 EAttribute 值保留在资源文件中,则必须为每个创建的 EDatatype 实现特定的转换器。

使用名为“Date”的 EDatatype 的示例,instanceTypeName='java.util.Date',您必须在工厂实现中为以下两种方法提供实现:

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public Date createDateFromString(EDataType eDataType, String initialValue) {
    // TODO replace with your implementation
    return (Date)super.createFromString(eDataType, initialValue);
}

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public String convertDateToString(EDataType eDataType, Object instanceValue) {
    // TODO replace with your implementation
    return super.convertToString(eDataType, instanceValue);
}
于 2018-04-20T14:35:17.333 回答