Skip to content

Commit

Permalink
Better compatibility for deprecated builders
Browse files Browse the repository at this point in the history
  • Loading branch information
lukellmann committed Aug 21, 2023
1 parent 6eb9ac1 commit ef18697
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 7 deletions.
6 changes: 5 additions & 1 deletion common/api/common.api
Original file line number Diff line number Diff line change
Expand Up @@ -6245,7 +6245,7 @@ public final class dev/kord/common/entity/DiscordUser$Companion {
}

public final class dev/kord/common/entity/DiscordUserKt {
public static final synthetic fun UserFlags (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/UserFlags;
public static final fun UserFlags (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/UserFlags;
}

public final class dev/kord/common/entity/DiscordVoiceRegion {
Expand Down Expand Up @@ -8091,6 +8091,8 @@ public final class dev/kord/common/entity/PermissionKt {
public static final fun Permissions ([Ldev/kord/common/entity/Permissions;)Ldev/kord/common/entity/Permissions;
public static synthetic fun Permissions$default (Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/kord/common/entity/Permissions;
public static final fun Permissions0 (Ljava/lang/Iterable;)Ldev/kord/common/entity/Permissions;
public static final fun Permissions0 (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/Permissions;
public static synthetic fun Permissions0$default (Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/kord/common/entity/Permissions;
}

public final class dev/kord/common/entity/Permissions {
Expand All @@ -8103,6 +8105,7 @@ public final class dev/kord/common/entity/Permissions {
public final fun copy (Ldev/kord/common/DiscordBitSet;)Ldev/kord/common/entity/Permissions;
public final fun copy (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/Permissions;
public static synthetic fun copy$default (Ldev/kord/common/entity/Permissions;Ldev/kord/common/DiscordBitSet;ILjava/lang/Object;)Ldev/kord/common/entity/Permissions;
public final fun copy0 (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/Permissions;
public fun equals (Ljava/lang/Object;)Z
public final fun getCode ()Ldev/kord/common/DiscordBitSet;
public final fun getValues ()Ljava/util/Set;
Expand Down Expand Up @@ -8776,6 +8779,7 @@ public final class dev/kord/common/entity/UserFlags {
public final fun copy (I)Ldev/kord/common/entity/UserFlags;
public final fun copy (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/UserFlags;
public static synthetic fun copy$default (Ldev/kord/common/entity/UserFlags;IILjava/lang/Object;)Ldev/kord/common/entity/UserFlags;
public final fun copy0 (Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/UserFlags;
public fun equals (Ljava/lang/Object;)Z
public final fun getCode ()I
public final fun getFlags ()Ljava/util/List;
Expand Down
9 changes: 6 additions & 3 deletions common/src/commonMain/kotlin/entity/DiscordUser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonNames
import kotlin.DeprecationLevel.HIDDEN
import kotlin.DeprecationLevel.WARNING
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
Expand Down Expand Up @@ -165,8 +164,12 @@ public data class DiscordOptionallyMemberUser(
val member: Optional<DiscordGuildMember> = Optional.Missing(),
)

@Suppress("DEPRECATION")
@Deprecated("Binary compatibility, keep for some releases.", level = HIDDEN)
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DEPRECATION")
@Deprecated(
"'UserFlags.UserFlagsBuilder' is deprecated, use 'UserFlags.Builder' instead.",
level = WARNING,
)
@kotlin.internal.LowPriorityInOverloadResolution
public inline fun UserFlags(builder: UserFlags.UserFlagsBuilder.() -> Unit): UserFlags {
contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) }
return UserFlags.UserFlagsBuilder().apply(builder).flags()
Expand Down
24 changes: 24 additions & 0 deletions common/src/commonMain/kotlin/entity/Permission.kt
Original file line number Diff line number Diff line change
Expand Up @@ -619,11 +619,23 @@ public class Permissions internal constructor(
/**
* Returns a copy of this instance of [Permissions] modified with [builder].
*/
@JvmName("copy0") // TODO other name when deprecated overload is removed
public inline fun copy(builder: Builder.() -> Unit): Permissions {
contract { callsInPlace(builder, EXACTLY_ONCE) }
return Builder(code.copy()).apply(builder).build()
}

@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DEPRECATION")
@Deprecated(
"'Permissions.PermissionsBuilder' is deprecated, use 'Permissions.Builder' instead.",
level = DeprecationLevel.WARNING,
)
@kotlin.internal.LowPriorityInOverloadResolution
public inline fun copy(block: PermissionsBuilder.() -> Unit): Permissions {
contract { callsInPlace(block, EXACTLY_ONCE) }
return PermissionsBuilder(code).apply(block).permissions()
}

override fun equals(other: Any?): Boolean = this === other ||
(other is Permissions && this.code == other.code)

Expand Down Expand Up @@ -740,11 +752,23 @@ public class Permissions internal constructor(
/**
* Returns an instance of [Permissions] built with [Permissions.Builder].
*/
@JvmName("Permissions0") // TODO other name when deprecated overload is removed
public inline fun Permissions(builder: Permissions.Builder.() -> Unit = {}): Permissions {
contract { callsInPlace(builder, EXACTLY_ONCE) }
return Permissions.Builder().apply(builder).build()
}

@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DEPRECATION")
@Deprecated(
"'Permissions.PermissionsBuilder' is deprecated, use 'Permissions.Builder' instead.",
level = DeprecationLevel.WARNING,
)
@kotlin.internal.LowPriorityInOverloadResolution
public inline fun Permissions(block: Permissions.PermissionsBuilder.() -> Unit = {}): Permissions {
contract { callsInPlace(block, EXACTLY_ONCE) }
return Permissions.PermissionsBuilder(DiscordBitSet(0)).apply(block).permissions()
}

/**
* Returns an instance of [Permissions] that has all bits set that are set in any element of
* [flags].
Expand Down
12 changes: 12 additions & 0 deletions common/src/commonMain/kotlin/entity/UserFlag.kt
Original file line number Diff line number Diff line change
Expand Up @@ -560,11 +560,23 @@ public class UserFlags internal constructor(
/**
* Returns a copy of this instance of [UserFlags] modified with [builder].
*/
@JvmName("copy0") // TODO other name when deprecated overload is removed
public inline fun copy(builder: Builder.() -> Unit): UserFlags {
contract { callsInPlace(builder, EXACTLY_ONCE) }
return Builder(code).apply(builder).build()
}

@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DEPRECATION")
@Deprecated(
"'UserFlags.UserFlagsBuilder' is deprecated, use 'UserFlags.Builder' instead.",
level = DeprecationLevel.WARNING,
)
@kotlin.internal.LowPriorityInOverloadResolution
public inline fun copy(block: UserFlagsBuilder.() -> Unit): UserFlags {
contract { callsInPlace(block, EXACTLY_ONCE) }
return UserFlagsBuilder(code).apply(block).flags()
}

override fun equals(other: Any?): Boolean = this === other ||
(other is UserFlags && this.code == other.code)

Expand Down
4 changes: 2 additions & 2 deletions gateway/src/commonMain/kotlin/Intent.kt
Original file line number Diff line number Diff line change
Expand Up @@ -432,13 +432,13 @@ public class Intents internal constructor(
/**
* Returns a copy of this instance of [Intents] modified with [builder].
*/
@JvmName("copy0") // todo other name when deprecated overload is removed
@JvmName("copy0") // TODO other name when deprecated overload is removed
public inline fun copy(builder: Builder.() -> Unit): Intents {
contract { callsInPlace(builder, EXACTLY_ONCE) }
return Builder(code.copy()).apply(builder).build()
}

@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE","DEPRECATION")
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DEPRECATION")
@Deprecated(
"'Intents.IntentsBuilder' is deprecated, use 'Intents.Builder' instead.",
level = DeprecationLevel.WARNING,
Expand Down
2 changes: 1 addition & 1 deletion gateway/src/commonMain/kotlin/builder/LoginBuilder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class LoginBuilder {
this.presence = PresenceBuilder().apply(builder).toPresence()
}

@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE","DEPRECATION")
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "DEPRECATION")
@Deprecated(
"'Intents.IntentsBuilder' is deprecated, use 'Intents.Builder' instead.",
level = DeprecationLevel.WARNING,
Expand Down

0 comments on commit ef18697

Please sign in to comment.