Open
Description
Describe the bug
Using KotlinPoet 1.16.0 to generate the index-access operator overloads for get / set escapes the function name producing:
public operator fun `get`(index: Int): Int = values[index]
instead of:
public operator fun get(index: Int): Int = values[index]
To Reproduce
This code generates a half-baked collection to reproduce the issue:
val file = FileSpec.builder("", "MyCollectionExample")
.addType(
TypeSpec.classBuilder(ClassName("", "MyCollectionExample"))
.primaryConstructor(
FunSpec.constructorBuilder()
.addParameter("values", typeNameOf<IntArray>())
.build()
).addProperty(
PropertySpec.builder("values", typeNameOf<IntArray>(), KModifier.PRIVATE)
.initializer("values")
.build()
)
.addFunction(
FunSpec.builder("get")
.addModifiers(KModifier.OPERATOR)
.returns(Int::class)
.addParameter("index", Int::class)
.addStatement("return values[index]")
.build()
)
.build()
)
.build()
file.writeTo(System.out)
produces:
public class MyCollectionExample(
private val values: IntArray,
) {
public operator fun `get`(index: Int): Int = values[index]
}
Notice the function name.
Expected behavior
I would expect the function name not to be escaped when overloading the index access operator.
Additional context
This was probably introduced by:
#994
Skimming through the code, it's interesting that MemberName.emit tries to account for this scenario by only escaping the name when the operator is null. I wonder if we can remove the get / set soft-keywords from Util.KEYWORDS or if that would introduce any other side-effects.
Activity