是否可以在 Eclipse/EMF 中将操作参数建模为可变参数?

Is it possible to model operation parameters as vararg in Eclipse/EMF?

我正在尝试寻找一种方法来为具有可变参数输入参数的操作建模。

模型应生成如下所示的界面。

/**
 * ...
 * @generated
 */
public interface Content extends EObject {
    /**
     * ...
     * @generated
     */
    List<Definition> getDefinitionsByLabels(String... label);      


}

请不要回答变通方法,因为我正在尝试更新现有(大型)代码库的模型(那是 "manually" 进一步开发 post 代)。

到目前为止,调查这件事看起来并不乐观,但我不想在这里不问就放弃这方面的问题。

由于EMF的代码生成器不直接支持可变参数,所以有人要求将上限作为可变参数的标记。 错误报告待定,即请求的功能不可用: https://bugs.eclipse.org/bugs/show_bug.cgi?id=337052

如果您想要的是模型 class 上的可变参数 Java 方法 ,而您 不需要正确的EMF操作,则可以解决:

使您的模型 class 实现一个 Java 接口,其中声明了 vararg 方法。

Java 文件:

public interface InterfaceWithVarargMethod {
    public void varArgMethod(String... arg);
}

核心文件:

@GenModel(modelDirectory="/EMF_Trying/src-gen")
package emf_trying

interface InterfaceWithVarargMethod wraps InterfaceWithVarargMethod {}

class ModelObject extends InterfaceWithVarargMethod {
}

将生成不带 var-arg 方法的 ModelObjectImpl 的实现。您必须编辑生成的代码并为要编译的代码添加 var-arg 方法:

public class ModelObjectImpl extends MinimalEObjectImpl.Container implements ModelObject {
    /**
     * @generated NOT
     */
    @Override
    public void m(String... arg) {
        // Implementation of var-arg method
    }

    ...
}

也许可以找到此解决方案的一些变体,您不必编辑生成的代码。例如通过在接口中添加该方法的默认实现,然后在手写的子class中覆盖该方法到EClass.