1

gradle ScalaTest プラグインを使用するときに、新しい構成オプションを追加しようとしています。

https://github.com/maiflai/gradle-scalatest

そのソース コードでは、config が動的拡張として Test クラスに挿入されました。

    static void configure(Test test) {
        ...
        Map<String, ?> config = [:]
        test.extensions.add(ScalaTestAction.CONFIG, config)
        test.extensions.add("config", { String name, value -> config.put(name, value) })
        test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
        ...
    }

groovy を DSL として使用している場合、このプロパティを呼び出すのは簡単です。

test {
    configMap([
        'db.name': 'testdb'
        'server': '192.168.1.188'
        ])
}

残念ながら、kotlin DSL は静的型付けのためにこのメソッドを使用できません。テスト プラグインとして呼び出されると、extensions.getByName を使用する場合など、テスト スコープ内で明確に表示されます。

tasks {

    test {

        val map = extensions.getByName("configMap")
        println(map)
    }
}

次の出力が得られます。

...


> Configure project :
com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac

しかし、コンパイル時にその型を取得またはアサートする方法はなく、結局役に立たなくなります (リフレクションが使用されない限り、これは kotlin DSL の設計哲学に反します)。kotlin dsl が同じことを達成する簡単な方法はありますか?

4

1 に答える 1