kotlin-codepoints icon indicating copy to clipboard operation
kotlin-codepoints copied to clipboard

Change extension function names to be different from method names?

Open cketti opened this issue 3 years ago • 1 comments

Short of using an import alias I wasn't able to make the following work in a KMP project that has the JVM as one of its targets:

import de.cketti.codepoints.deluxe.CodePoint
import de.cketti.codepoints.deluxe.codePointAt

fun main() {
    val stringBuilder = StringBuilder().append("a")

    // Type mismatch: inferred type is Int but CodePoint was expected
    val codePoint: CodePoint = stringBuilder.codePointAt(0)
}

It looked fine in the IDE, but failed when compiling the JVM project.

Explicitly adding a StringBuilder extension function with the @kotlin.internal.HidesMembers annotation din't work either.

@file:Suppress(
    "INVISIBLE_MEMBER",
    "INVISIBLE_REFERENCE",
    "EXTENSION_SHADOWED_BY_MEMBER",
    "KotlinRedundantDiagnosticSuppress",
)
package separate.package.to.avoid.name.conflicts

import de.cketti.codepoints.deluxe.CodePoint
import de.cketti.codepoints.deluxe.codePointAt

@kotlin.internal.HidesMembers
fun StringBuilder.codePointAt(index: Int): CodePoint {
    return (this as CharSequence).codePointAt(index)
}

Changing the names of the extension functions would avoid this problem. The question is what names to chose.

cketti avatar Mar 05 '23 20:03 cketti

I got nothing.

JakeWharton avatar Mar 06 '23 22:03 JakeWharton