invokenormalmethodfrombuilder_bug657.groovy

来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· GROOVY 代码 · 共 39 行

GROOVY
39
字号
/**
  * <p>
  * Test that ensures that:
  * <ul>
  *   <li>it is possible to write a builder in Groovy</li>
  *   <li>it is possible to call normal methods from the builder,
  *       without the methods being trapped endlessly by createNode()</li>
  * </ul>
  * </p>
  *
  * @author Guillaume Laforge
  */
class InvokeNormalMethodFromBuilder_Bug657 extends GroovyTestCase {
    void testInvokeNormalMethod() {
        def b = new Builder()
        assert b.callNormalMethod() == "first"

        def value = b.someNode() {}
        assert value == "second"
    }
}

class Builder extends BuilderSupport {

    void setParent(Object parent, Object child) {}

    Object createNode(Object name)                 { return createNode(name, [:], null) }
    Object createNode(Object name, Map attributes) { return createNode(name, attributes, null) }
    Object createNode(Object name, Object value)   { return createNode(name, [:], value) }

    Object createNode(Object name, Map attributes, Object value) {
        println "create ${name}"
        return callOtherStaticallyTypedMethod()
    }

    String callNormalMethod()               { println "normalMethod"; return "first" }
    String callOtherStaticallyTypedMethod() { println "otherMethod";  return "second" }
    
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?