Как сгенерировать неабстрактный метод интерфейса не по умолчанию с помощью JvmTypesBuilder

Я хочу создать интерфейс с нестандартными методами. Для этой цели я использую JvmTypesBuilder.

Код

meth.toMethod(meth.name, meth.returnType)[]

генерирует, например

public default int meth();

Пытаюсь с

meth.toMethod(meth.name, meth.returnType)[
   it.^default = false
]

ничего не меняет.

Установка его абстрактно работает

meth.toMethod(meth.name, meth.returnType)[
  it.abstract = true
]

но затем я получаю такой метод, как

public abstract int meth();

чего я тоже не хочу.

Есть ли способ использовать JvmTypesBuilder и создать метод без ключевых слов по умолчанию или абстрактных?

public int meth();

Я использую Eclipse 4.5.1 для DSL Developer.


person Mino    schedule 20.10.2015    source источник


Ответы (2)


Пожалуйста, убедитесь, что вы поместили метод в интерфейс, а не в класс. Например. установите флаг интерфейса с JvmGenericType по true. Это должно делать свое дело.

person Sebastian Zarnekow    schedule 20.10.2015
comment
Я использую метод toInterface. Таким образом, сгенерированный код представляет собой интерфейс. - person Mino; 20.10.2015

Что вы ожидаете получить? Метод может иметь реализацию (default) или не иметь (abstract). На самом деле, без каких-либо модификаторов интерфейсный метод неявно abstract.

interface MyInterface
{
    public abstract void foo();
}

компилируется точно в тот же байт-код, что и

interface MyInterface
{
    public void foo();
}
person Clashsoft    schedule 20.10.2015
comment
Я это знаю, но ваш второй код короче и лучше читается. Вопрос только в удобочитаемости и внешнем виде. Я ожидал другого поведения JvmTypesBuilder. - person Mino; 20.10.2015
comment
В этом случае, это просто вопрос красивой печати. - person Clashsoft; 20.10.2015