Как сгенерировать `ленивым` с помощью KotlinPoet - PullRequest
0 голосов
/ 02 июля 2018

Я хочу сгенерировать такой код:

class B private constructor() : A {

    companion object {
        val instance: B by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            B()
        }
    }
}

Использование KotlinPoet:

private fun genCompanionObject() = TypeSpec.companionObjectBuilder()
        .addProperty(PropertySpec.builder("instance", A::class.java).build()).build()

Как сгенерировать by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED)? Я не могу найти некоторые полезные API в документе .

1 Ответ

0 голосов
/ 02 июля 2018

Вы ищете PropertySpec.Builder.delegate методы. Вы предоставляете CodeBlock, представляющий инициализатор, который представляет делегат.

Специально для кода, который вы хотите:

.delegate(CodeBlock.builder()
    .beginControlFlow("lazy(mode = %T.SYNCHRONIZED)", LazyThreadSafetyMode::class.asTypeName())
    .add("B()") // Or however you want to implement this
    .endControlFlow()
    .build())
...