From f53205ee2bf2a98527e2ac26eafaa5e28f15c1ec Mon Sep 17 00:00:00 2001 From: Roee Hershberg Date: Thu, 9 Jun 2022 21:53:48 +0300 Subject: [PATCH] Add support for external property getter --- .../java/com/squareup/kotlinpoet/FunSpec.kt | 3 ++- .../squareup/kotlinpoet/PropertySpecTest.kt | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt index 28c5ca23e2..05d6e38f3c 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/FunSpec.kt @@ -55,6 +55,7 @@ public class FunSpec private constructor( public val delegateConstructorArguments: List = builder.delegateConstructorArguments.toImmutableList() public val body: CodeBlock = builder.body.build() + private val isExternalGetter = name == GETTER && builder.modifiers.contains(EXTERNAL) private val isEmptySetter = name == SETTER && parameters.isEmpty() init { @@ -155,7 +156,7 @@ public class FunSpec private constructor( codeWriter.emitCode("%N", this) } - if (!isEmptySetter) { + if (!isEmptySetter && !isExternalGetter) { parameters.emit(codeWriter) { param -> param.emit(codeWriter, includeType = name != SETTER) } diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt index ca80ba44ae..057fae1ab5 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt @@ -18,6 +18,7 @@ package com.squareup.kotlinpoet import com.google.common.truth.Truth.assertThat import com.squareup.kotlinpoet.FunSpec.Companion.GETTER import com.squareup.kotlinpoet.FunSpec.Companion.SETTER +import com.squareup.kotlinpoet.KModifier.EXTERNAL import com.squareup.kotlinpoet.KModifier.PRIVATE import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy import java.io.Serializable @@ -74,6 +75,30 @@ class PropertySpecTest { }.hasMessageThat().isEqualTo("parameterless setter cannot have code") } + @Test fun externalGetterAndSetter() { + val prop = PropertySpec.builder("foo", String::class) + .mutable() + .getter( + FunSpec.getterBuilder() + .addModifiers(EXTERNAL) + .build() + ) + .setter( + FunSpec.setterBuilder() + .addModifiers(EXTERNAL) + .build() + ) + .build() + + assertThat(prop.toString()).isEqualTo( + """ + |var foo: kotlin.String + | external get + | external set + |""".trimMargin() + ) + } + @Test fun inlineSingleAccessorVal() { val prop = PropertySpec.builder("foo", String::class) .getter(