Add KModifier.VALUE (#1050)
diff --git a/interop/kotlinx-metadata/specs-tests/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/test/KotlinPoetMetadataSpecsTest.kt b/interop/kotlinx-metadata/specs-tests/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/test/KotlinPoetMetadataSpecsTest.kt
index 3caa57e..b0a758b 100644
--- a/interop/kotlinx-metadata/specs-tests/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/test/KotlinPoetMetadataSpecsTest.kt
+++ b/interop/kotlinx-metadata/specs-tests/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/test/KotlinPoetMetadataSpecsTest.kt
@@ -367,7 +367,7 @@
"""
@kotlin.jvm.JvmInline
public inline class InlineClass(
- public val value: kotlin.String
+ public val `value`: kotlin.String
)
""".trimIndent()
)
@@ -523,7 +523,7 @@
assertThat(typeSpec.trimmedToString()).isEqualTo(
"""
public enum class ComplexEnum(
- public val value: kotlin.String
+ public val `value`: kotlin.String
) {
FOO {
public override fun toString(): kotlin.String = throw NotImplementedError("Stub!")
@@ -587,7 +587,7 @@
assertThat(typeSpec.trimmedToString()).isEqualTo(
"""
public enum class ComplexEnumWithAnnotation(
- public val value: kotlin.String
+ public val `value`: kotlin.String
) {
FOO {
public override fun toString(): kotlin.String = throw NotImplementedError("Stub!")
@@ -795,7 +795,7 @@
assertThat(typeSpec.trimmedToString()).isEqualTo(
"""
public annotation class MyAnnotation(
- public val value: kotlin.String
+ public val `value`: kotlin.String
)
""".trimIndent()
)
@@ -894,7 +894,7 @@
public var setter: kotlin.String? = null
@com.squareup.kotlinpoet.metadata.specs.test.KotlinPoetMetadataSpecsTest.ConstructorAnnotation
- public constructor(value: kotlin.String)
+ public constructor(`value`: kotlin.String)
@com.squareup.kotlinpoet.metadata.specs.test.KotlinPoetMetadataSpecsTest.FunctionAnnotation
public fun function(): kotlin.Unit {
diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/KModifier.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/KModifier.kt
index 936dde0..af2e82a 100644
--- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/KModifier.kt
+++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/KModifier.kt
@@ -54,6 +54,7 @@
ENUM("enum", Target.CLASS),
ANNOTATION("annotation", Target.CLASS),
+ VALUE("value", Target.CLASS),
FUN("fun", Target.INTERFACE),
COMPANION("companion", Target.CLASS),
diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt
index 405e200..44afec0 100644
--- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt
+++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/TypeSpec.kt
@@ -25,8 +25,10 @@
import com.squareup.kotlinpoet.KModifier.INLINE
import com.squareup.kotlinpoet.KModifier.INTERNAL
import com.squareup.kotlinpoet.KModifier.PRIVATE
+import com.squareup.kotlinpoet.KModifier.PROTECTED
import com.squareup.kotlinpoet.KModifier.PUBLIC
import com.squareup.kotlinpoet.KModifier.SEALED
+import com.squareup.kotlinpoet.KModifier.VALUE
import java.lang.reflect.Type
import javax.lang.model.element.Element
import kotlin.reflect.KClass
@@ -462,7 +464,8 @@
internal val isEnum get() = kind == Kind.CLASS && ENUM in modifiers
internal val isAnnotation get() = kind == Kind.CLASS && ANNOTATION in modifiers
internal val isCompanion get() = kind == Kind.OBJECT && COMPANION in modifiers
- internal val isInlineClass get() = kind == Kind.CLASS && INLINE in modifiers
+ internal val isInlineOrValClass get() = kind == Kind.CLASS &&
+ (INLINE in modifiers || VALUE in modifiers)
internal val isSimpleClass get() = kind == Kind.CLASS && !isEnum && !isAnnotation
internal val isFunInterface get() = kind == Kind.INTERFACE && FUN in modifiers
@@ -530,9 +533,9 @@
"expected a constructor but was ${primaryConstructor.name}"
}
- if (isInlineClass) {
+ if (isInlineOrValClass) {
check(primaryConstructor.parameters.size == 1) {
- "Inline classes must have 1 parameter in constructor"
+ "value/inline classes must have 1 parameter in constructor"
}
}
}
@@ -549,8 +552,8 @@
check(isSimpleClass || kind == Kind.OBJECT) {
"only classes can have super classes, not $kind"
}
- check(!isInlineClass) {
- "Inline classes cannot have super classes"
+ check(!isInlineOrValClass) {
+ "value/inline classes cannot have super classes"
}
}
@@ -731,8 +734,8 @@
}
when {
kind == Kind.INTERFACE -> {
- requireNoneOf(funSpec.modifiers, KModifier.INTERNAL, KModifier.PROTECTED)
- requireNoneOrOneOf(funSpec.modifiers, KModifier.ABSTRACT, KModifier.PRIVATE)
+ requireNoneOf(funSpec.modifiers, INTERNAL, PROTECTED)
+ requireNoneOrOneOf(funSpec.modifiers, ABSTRACT, PRIVATE)
}
isAnnotation -> require(funSpec.modifiers == kind.implicitFunctionModifiers(modifiers)) {
"annotation class $name.${funSpec.name} " +
@@ -751,29 +754,29 @@
}
}
- if (isInlineClass) {
+ if (isInlineOrValClass) {
primaryConstructor?.let {
check(it.parameters.size == 1) {
- "Inline classes must have 1 parameter in constructor"
+ "value/inline classes must have 1 parameter in constructor"
}
}
check(propertySpecs.size > 0) {
- "Inline classes must have at least 1 property"
+ "value/inline classes must have at least 1 property"
}
val constructorParamName = primaryConstructor?.parameters?.firstOrNull()?.name
constructorParamName?.let { paramName ->
val underlyingProperty = propertySpecs.find { it.name == paramName }
requireNotNull(underlyingProperty) {
- "Inline classes must have a single read-only (val) property parameter."
+ "value/inline classes must have a single read-only (val) property parameter."
}
check(!underlyingProperty.mutable) {
- "Inline classes must have a single read-only (val) property parameter."
+ "value/inline classes must have a single read-only (val) property parameter."
}
}
check(superclass == Any::class.asTypeName()) {
- "Inline classes cannot have super classes"
+ "value/inline classes cannot have super classes"
}
}
@@ -815,6 +818,9 @@
@JvmStatic public fun expectClassBuilder(className: ClassName): Builder =
expectClassBuilder(className.simpleName)
+ @JvmStatic public fun valueClassBuilder(name: String): Builder =
+ Builder(Kind.CLASS, name, VALUE)
+
@JvmStatic public fun objectBuilder(name: String): Builder = Builder(Kind.OBJECT, name)
@JvmStatic public fun objectBuilder(className: ClassName): Builder =
diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/Util.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/Util.kt
index 2c64f00..728f6c4 100644
--- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/Util.kt
+++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/Util.kt
@@ -245,6 +245,7 @@
"sealed",
"suspend",
"tailrec",
+ "value",
"vararg",
)
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/AnnotationSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/AnnotationSpecTest.kt
index 704ffe6..11ec928 100644
--- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/AnnotationSpecTest.kt
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/AnnotationSpecTest.kt
@@ -556,7 +556,7 @@
import kotlin.Unit
public class ExternalClass(
- public val value: Int
+ public val `value`: Int
)
public object ExternalClassParceler : Parceler<ExternalClass> {
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/CrossplatformTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/CrossplatformTest.kt
index b4bd213..9aa71e0 100644
--- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/CrossplatformTest.kt
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/CrossplatformTest.kt
@@ -76,15 +76,15 @@
|import kotlin.Unit
|
|internal expect class AtomicRef<V>(
- | value: V
+ | `value`: V
|) {
- | public val value: V
+ | public val `value`: V
|
| public fun `get`(): V
|
- | public fun `set`(value: V): Unit
+ | public fun `set`(`value`: V): Unit
|
- | public fun getAndSet(value: V): V
+ | public fun getAndSet(`value`: V): V
|
| public fun compareAndSet(`expect`: V, update: V): Boolean
|}
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/KotlinPoetTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/KotlinPoetTest.kt
index 7c67136..e816d30 100644
--- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/KotlinPoetTest.kt
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/KotlinPoetTest.kt
@@ -602,7 +602,7 @@
| println("getter")
| return field
| }
- | set(value) {
+ | set(`value`) {
| println("setter")
| field = value
| }
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt
index 3679efb..b72384d 100644
--- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/PropertySpecTest.kt
@@ -108,7 +108,7 @@
"""
|inline var foo: kotlin.String
| get() = "foo"
- | set(value) {
+ | set(`value`) {
| }
|""".trimMargin()
)
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt
index fd0d6e0..bd03e7e 100644
--- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/TypeSpecTest.kt
@@ -21,7 +21,6 @@
import com.squareup.kotlinpoet.KModifier.ABSTRACT
import com.squareup.kotlinpoet.KModifier.DATA
import com.squareup.kotlinpoet.KModifier.IN
-import com.squareup.kotlinpoet.KModifier.INLINE
import com.squareup.kotlinpoet.KModifier.INNER
import com.squareup.kotlinpoet.KModifier.INTERNAL
import com.squareup.kotlinpoet.KModifier.PRIVATE
@@ -718,7 +717,6 @@
.build()
)
.build()
- println(toString(taco))
assertThat(toString(taco)).isEqualTo(
"""
|package com.squareup.tacos
@@ -729,7 +727,7 @@
| contents: String
|) {
| public var contents: String = contents
- | set(value) {
+ | set(`value`) {
| println("contents changed!")
| field = value
| }
@@ -1084,7 +1082,7 @@
|import kotlin.Int
|
|public enum class Sort(
- | value: Int
+ | `value`: Int
|) {
| `open`(0),
| closed(1),
@@ -2526,216 +2524,6 @@
)
}
- @Test fun validInlineClass() {
- val guacamole = TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avacado", String::class)
- .build()
- )
- .addProperty(
- PropertySpec.builder("avacado", String::class)
- .initializer("avacado")
- .build()
- )
- .addModifiers(INLINE)
- .build()
-
- assertThat(guacamole.toString()).isEqualTo(
- """
- |public inline class Guacamole(
- | public val avacado: kotlin.String
- |)
- |""".trimMargin()
- )
- }
-
- @Test fun inlineClassWithInitBlock() {
- val guacamole = TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avacado", String::class)
- .build()
- )
- .addProperty(
- PropertySpec.builder("avacado", String::class)
- .initializer("avacado")
- .build()
- )
- .addInitializerBlock(CodeBlock.EMPTY)
- .addModifiers(INLINE)
- .build()
-
- assertThat(guacamole.toString()).isEqualTo(
- """
- |public inline class Guacamole(
- | public val avacado: kotlin.String
- |) {
- | init {
- | }
- |}
- |""".trimMargin()
- )
- }
-
- class InlineSuperClass
-
- @Test fun inlineClassWithSuperClass() {
- assertThrows<IllegalStateException> {
- TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avocado", String::class)
- .build()
- )
- .addProperty(
- PropertySpec.builder("avocado", String::class)
- .initializer("avocado")
- .build()
- )
- .superclass(InlineSuperClass::class)
- .addModifiers(INLINE)
- .build()
- }.hasMessageThat().isEqualTo("Inline classes cannot have super classes")
- }
-
- interface InlineSuperInterface
-
- @Test fun inlineClassInheritsFromInterface() {
- val guacamole = TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avocado", String::class)
- .build()
- )
- .addProperty(
- PropertySpec.builder("avocado", String::class)
- .initializer("avocado")
- .build()
- )
- .addSuperinterface(InlineSuperInterface::class)
- .addModifiers(INLINE)
- .build()
-
- assertThat(guacamole.toString()).isEqualTo(
- """
- |public inline class Guacamole(
- | public val avocado: kotlin.String
- |) : com.squareup.kotlinpoet.TypeSpecTest.InlineSuperInterface
- |""".trimMargin()
- )
- }
-
- @Test fun inlineClassWithoutBackingProperty() {
- assertThrows<IllegalArgumentException> {
- TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avocado", String::class)
- .build()
- )
- .addProperty("garlic", String::class)
- .addModifiers(INLINE)
- .build()
- }.hasMessageThat().isEqualTo("Inline classes must have a single read-only (val) property parameter.")
- }
-
- @Test fun inlineClassWithoutProperties() {
- assertThrows<IllegalStateException> {
- TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avocado", String::class)
- .build()
- )
- .addModifiers(INLINE)
- .build()
- }.hasMessageThat().isEqualTo("Inline classes must have at least 1 property")
- }
-
- @Test fun inlineClassWithMutableProperties() {
- assertThrows<IllegalStateException> {
- TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avocado", String::class)
- .build()
- )
- .addProperty(
- PropertySpec.builder("avocado", String::class)
- .initializer("avocado")
- .mutable()
- .build()
- )
- .addModifiers(INLINE)
- .build()
- }.hasMessageThat().isEqualTo("Inline classes must have a single read-only (val) property parameter.")
- }
-
- @Test fun inlineClassWithPrivateConstructor() {
- val guacamole = TypeSpec.classBuilder("Guacamole")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("avocado", String::class)
- .addModifiers(PRIVATE)
- .build()
- )
- .addProperty(
- PropertySpec.builder("avocado", String::class)
- .initializer("avocado")
- .build()
- )
- .addModifiers(INLINE)
- .build()
-
- assertThat(guacamole.toString()).isEqualTo(
- """
- |public inline class Guacamole private constructor(
- | public val avocado: kotlin.String
- |)
- |""".trimMargin()
- )
- }
-
- @Test fun inlineEnumClass() {
- val guacamole = TypeSpec.enumBuilder("Foo")
- .primaryConstructor(
- FunSpec.constructorBuilder()
- .addParameter("x", Int::class)
- .build()
- )
- .addEnumConstant(
- "A",
- TypeSpec.anonymousClassBuilder()
- .addSuperclassConstructorParameter("%L", 1)
- .build()
- )
- .addEnumConstant(
- "B",
- TypeSpec.anonymousClassBuilder()
- .addSuperclassConstructorParameter("%L", 2)
- .build()
- )
- .addProperty(
- PropertySpec.builder("x", Int::class)
- .initializer("x")
- .build()
- )
- .addModifiers(INLINE)
- .build()
- assertThat(guacamole.toString()).isEqualTo(
- """
- |public enum inline class Foo(
- | public val x: kotlin.Int
- |) {
- | A(1),
- | B(2),
- | ;
- |}
- |""".trimMargin()
- )
- }
-
@Test fun doublePropertyInitialization() {
assertThrows<IllegalStateException> {
PropertySpec.builder("listA", String::class)
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/ValueTypeSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/ValueTypeSpecTest.kt
new file mode 100644
index 0000000..e385ebf
--- /dev/null
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/ValueTypeSpecTest.kt
@@ -0,0 +1,236 @@
+package com.squareup.kotlinpoet
+
+import com.google.common.truth.Truth.assertThat
+import com.squareup.kotlinpoet.KModifier.INLINE
+import com.squareup.kotlinpoet.KModifier.PRIVATE
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@RunWith(Parameterized::class)
+class ValueTypeSpecTest(private val useValue: Boolean) {
+
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "value={0}")
+ fun data(): Collection<Array<Any>> {
+ return listOf(
+ arrayOf(true),
+ arrayOf(false)
+ )
+ }
+ }
+
+ private val modifier = if (useValue) KModifier.VALUE else INLINE
+ private val modifierString = modifier.keyword
+
+ private fun classBuilder() = if (useValue) {
+ TypeSpec.valueClassBuilder("Guacamole")
+ } else {
+ TypeSpec.classBuilder("Guacamole")
+ .addModifiers(modifier)
+ }
+
+ @Test fun validInlineClass() {
+ val guacamole = classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avacado", String::class)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("avacado", String::class)
+ .initializer("avacado")
+ .build()
+ )
+ .build()
+
+ assertThat(guacamole.toString()).isEqualTo(
+ """
+ |public $modifierString class Guacamole(
+ | public val avacado: kotlin.String
+ |)
+ |""".trimMargin()
+ )
+ }
+
+ @Test fun inlineClassWithInitBlock() {
+ val guacamole = classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avacado", String::class)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("avacado", String::class)
+ .initializer("avacado")
+ .build()
+ )
+ .addInitializerBlock(CodeBlock.EMPTY)
+ .build()
+
+ assertThat(guacamole.toString()).isEqualTo(
+ """
+ |public $modifierString class Guacamole(
+ | public val avacado: kotlin.String
+ |) {
+ | init {
+ | }
+ |}
+ |""".trimMargin()
+ )
+ }
+
+ class InlineSuperClass
+
+ @Test fun inlineClassWithSuperClass() {
+ assertThrows<IllegalStateException> {
+ classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avocado", String::class)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("avocado", String::class)
+ .initializer("avocado")
+ .build()
+ )
+ .superclass(InlineSuperClass::class)
+ .build()
+ }.hasMessageThat().isEqualTo("value/inline classes cannot have super classes")
+ }
+
+ interface InlineSuperInterface
+
+ @Test fun inlineClassInheritsFromInterface() {
+ val guacamole = classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avocado", String::class)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("avocado", String::class)
+ .initializer("avocado")
+ .build()
+ )
+ .addSuperinterface(InlineSuperInterface::class)
+ .build()
+
+ assertThat(guacamole.toString()).isEqualTo(
+ """
+ |public $modifierString class Guacamole(
+ | public val avocado: kotlin.String
+ |) : com.squareup.kotlinpoet.ValueTypeSpecTest.InlineSuperInterface
+ |""".trimMargin()
+ )
+ }
+
+ @Test fun inlineClassWithoutBackingProperty() {
+ assertThrows<IllegalArgumentException> {
+ classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avocado", String::class)
+ .build()
+ )
+ .addProperty("garlic", String::class)
+ .build()
+ }.hasMessageThat().isEqualTo("value/inline classes must have a single read-only (val) property parameter.")
+ }
+
+ @Test fun inlineClassWithoutProperties() {
+ assertThrows<IllegalStateException> {
+ classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avocado", String::class)
+ .build()
+ )
+ .build()
+ }.hasMessageThat().isEqualTo("value/inline classes must have at least 1 property")
+ }
+
+ @Test fun inlineClassWithMutableProperties() {
+ assertThrows<IllegalStateException> {
+ classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avocado", String::class)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("avocado", String::class)
+ .initializer("avocado")
+ .mutable()
+ .build()
+ )
+ .build()
+ }.hasMessageThat().isEqualTo("value/inline classes must have a single read-only (val) property parameter.")
+ }
+
+ @Test
+ fun inlineClassWithPrivateConstructor() {
+ val guacamole = classBuilder()
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("avocado", String::class)
+ .addModifiers(PRIVATE)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("avocado", String::class)
+ .initializer("avocado")
+ .build()
+ )
+ .build()
+
+ assertThat(guacamole.toString()).isEqualTo(
+ """
+ |public $modifierString class Guacamole private constructor(
+ | public val avocado: kotlin.String
+ |)
+ |""".trimMargin()
+ )
+ }
+
+ @Test fun inlineEnumClass() {
+ val guacamole = TypeSpec.enumBuilder("Foo")
+ .addModifiers(modifier)
+ .primaryConstructor(
+ FunSpec.constructorBuilder()
+ .addParameter("x", Int::class)
+ .build()
+ )
+ .addEnumConstant(
+ "A",
+ TypeSpec.anonymousClassBuilder()
+ .addSuperclassConstructorParameter("%L", 1)
+ .build()
+ )
+ .addEnumConstant(
+ "B",
+ TypeSpec.anonymousClassBuilder()
+ .addSuperclassConstructorParameter("%L", 2)
+ .build()
+ )
+ .addProperty(
+ PropertySpec.builder("x", Int::class)
+ .initializer("x")
+ .build()
+ )
+ .build()
+ assertThat(guacamole.toString()).isEqualTo(
+ """
+ |public enum $modifierString class Foo(
+ | public val x: kotlin.Int
+ |) {
+ | A(1),
+ | B(2),
+ | ;
+ |}
+ |""".trimMargin()
+ )
+ }
+}
diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/jvm/JvmAnnotationsTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/jvm/JvmAnnotationsTest.kt
index 18b7d19..241dfec 100644
--- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/jvm/JvmAnnotationsTest.kt
+++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/jvm/JvmAnnotationsTest.kt
@@ -235,7 +235,7 @@
| public companion object {
| public var foo: String = "foo"
| @JvmStatic
- | set(value) {
+ | set(`value`) {
| }
| }
|}
@@ -380,7 +380,7 @@
|
|public var foo: String
| @Throws(IOException::class)
- | set(value) {
+ | set(`value`) {
| print("foo")
| }
|""".trimMargin()
@@ -561,7 +561,7 @@
|
|public var foo: String = "foo"
| @JvmName("foo")
- | set(value) {
+ | set(`value`) {
| }
|""".trimMargin()
)
@@ -808,7 +808,7 @@
|
|public var foo: String = "foo"
| @Synchronized
- | set(value) {
+ | set(`value`) {
| }
|""".trimMargin()
)
@@ -1043,7 +1043,7 @@
|
|public var foo: String
| @Strictfp
- | set(value) {
+ | set(`value`) {
| print("foo")
| }
|""".trimMargin()