private constructor shows up in API dump
The following code:
class FooBar private constructor(val id: String) {
class Builder {
fun build() = FooBar("")
}
}
dumps the following API:
public final class com/apollographql/apollo3/api/FooBar {
public synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getId ()Ljava/lang/String;
}
public final class com/apollographql/apollo3/api/FooBar$Builder {
public fun <init> ()V
public final fun build ()Lcom/apollographql/apollo3/api/FooBar;
}
I'm curious as to why <init> is listed in the dump. If I were to remove the id parameter, would that be considered a breaking change even if it should be an implementation detail?
I'm using 0.8.0-RC
Note to self:
class ConstructorMarker constructor(unused: String = "")
and
class ConstructorMarker private constructor(unused: String, i: Int) {
class Builder {
fun build() = ConstructorMarker("", 42)
}
}
both produce public synthetic <init>(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V, the trick is to properly distinguish them as former is part of the ABI, while latter is not
We decided this is a compiler issue: https://youtrack.jetbrains.com/issue/KT-51073
Alas there is not much we can do on BCV side to address it
BCV could at least filter out synthetic constructors with DefaultConstructorMarker but without I