Добавить методы к назначенному замыканию с GroovyDSL

Geb использует статическое поле с именем content определить содержимое страницы или модуля. Значение content Поле является закрытием.

 
class GebishOrgHomePage extends Page {
    static content = {
        manualsMenu {
            module MenuModule, $("#header-content ul li", 0)
        }
        links { $('.link-list li a') }
    }
}

Intellij уже имеет поддержку для этого контента DSL, однако он не поддерживает module а также moduleList методы. Это вызывает ограниченную поддержку автозаполнения при работе с модулями.

Чтобы исправить это, я хотел бы написать скрипт GroovyDSL, который добавляет определения отсутствующих методов к замыканию содержимого и его вложенным замыканиям. Однако я не знаю, как добавить методы к замыканию, которое не передается методу, так как enclosingCall требует конкретного имени метода.

И другая вещь заключается в том, что эти методы должны иметь общий тип возвращаемого значения:


<T extends Module> T module(Class<T> m) {
    // return an instance of T
}

1 ответ

Если вы используете последний снимок, то module() звонки будут восприниматься вашей IDE. Это до перехода module() в Navigator именно то, что вам нужно - автозаполнение и строгий набор текста.

Взгляните на текущую версию раздела 6.4 Книги Геба. moduleList() будет пропущен в будущем выпуске, и этот раздел объясняет, что использовать вместо. module() также будет использован метод, принимающий аргумент карты для инициализации свойств модуля, теперь вы сами инициализируете модуль и передаете экземпляр module() и есть пример сделать это в 6.4. Благодаря всему этому вы получите автозаполнение по определениям модулей и их использованию в IntelliJ.

Другие вопросы по тегам