Добавить методы к назначенному замыканию с 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.