使用GroovyDSL将方法添加到指定的闭包

时间:2015-06-09 18:26:55

标签: intellij-idea geb 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,但它不支持modulemoduleList方法。使用模块时,这会导致有限的自动完成支持。

为了解决这个问题,我想编写一个GroovyDSL脚本,将缺少的方法定义添加到内容闭包及其嵌套闭包中。但是,我不知道如何将方法添加到未传递给方法的闭包中,因为enclosingCall需要具体的方法名称。

另一件事是这些方法必须具有这样的通用返回类型:


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

1 个答案:

答案 0 :(得分:1)

如果使用latest snapshot,则IDE会理解module()次调用。这完全取决于你所追求的moving module() to Navigator - 自动完成和强类型。

查看Book of Geb的当前版本section 6.4moduleList()将在未来版本中消失,该部分将说明要使用的内容。使用map参数初始化模块属性的module()方法也将继续,您现在自己初始化模块并将实例传递给module(),并且在6.4中有一个示例。多亏了这一切,您将获得有关IntelliJ中模块定义和使用的自动完成。