Skip to content

Change extension function names to be different from method names? #23

@cketti

Description

@cketti

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions