Можно ли смоделировать рабочие параметры как Vararg в Eclipse / EMF? - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь найти способ смоделировать операцию с помощью входного параметра vararg.

Модель должна генерировать интерфейс, как показано ниже.

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


}

Пожалуйста, не отвечайте с обходными путями, потому что я пытаюсь обновить модель существующей (большой) кодовой базы (которая была "вручную" разработана для последующего генерирования).

Пока что расследование этого вопроса не выглядело многообещающим, но я не хотел сдаваться по этому аспекту, не задав здесь вопроса.

Example Class Diagram

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Если вам нужен var-arg Java-метод в классе вашей модели, и вам не требуется правильная операция EMF , то это можно решить:

Заставьте ваш класс модели реализовать интерфейс Java, где объявлен метод vararg.

Java-файл:

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

Файл Xcore:

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

interface InterfaceWithVarargMethod wraps InterfaceWithVarargMethod {}

class ModelObject extends InterfaceWithVarargMethod {
}

Будет сгенерирована реализация ModelObjectImpl без метода var-arg. Вы должны отредактировать сгенерированный код и добавить метод var-arg для кода для компиляции:

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

    ...
}

Возможно, можно найти вариант этого решения, в котором вам не нужно редактировать сгенерированный код. Например, добавив реализацию метода по умолчанию в интерфейсе, затем переопределив метод в рукописном подклассе для класса EClass.

0 голосов
/ 12 ноября 2018

Поскольку varargs не поддерживается напрямую генератором кода EMF, кто-то попросил сделать верхний предел маркером для varargs. Отчет об ошибке находится на рассмотрении, то есть запрошенная функция недоступна: https://bugs.eclipse.org/bugs/show_bug.cgi?id=337052

...