Skip to content

Commit 1af9ab2

Browse files
authored
Merge pull request #1017 from simple-robot/offlineimage-subclass-optin
为OfflineImage增加 subclass opt-in 标记,并为几个未来弃用的 resolver 类型增加 opt 标记
2 parents b22a8ab + 7992dee commit 1af9ab2

File tree

6 files changed

+75
-6
lines changed

6 files changed

+75
-6
lines changed

simbot-api/api/simbot-api.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2199,6 +2199,9 @@ public final class love/forte/simbot/message/OfflineImage$Companion {
21992199
public final fun ofResource (Llove/forte/simbot/resource/Resource;)Llove/forte/simbot/message/OfflineImage;
22002200
}
22012201

2202+
public abstract interface annotation class love/forte/simbot/message/OfflineImageImplementation : java/lang/annotation/Annotation {
2203+
}
2204+
22022205
public abstract interface class love/forte/simbot/message/OfflineImageResolver {
22032206
public static final field Companion Llove/forte/simbot/message/OfflineImageResolver$Companion;
22042207
public static fun resolve (Llove/forte/simbot/message/OfflineImageResolver;Llove/forte/simbot/message/OfflineImage;Ljava/lang/Object;)V
@@ -2335,6 +2338,9 @@ public abstract interface class love/forte/simbot/message/RemoteUrlAwareImage :
23352338
public abstract interface class love/forte/simbot/message/RichMediaMessage : love/forte/simbot/message/StandardMessage {
23362339
}
23372340

2341+
public abstract interface annotation class love/forte/simbot/message/ScheduledDeprecatedOfflineImageResolverApi : java/lang/annotation/Annotation {
2342+
}
2343+
23382344
public final class love/forte/simbot/message/SimpleOfflineResourceImage : love/forte/simbot/message/OfflineResourceImage {
23392345
public static final field Companion Llove/forte/simbot/message/SimpleOfflineResourceImage$Companion;
23402346
public fun <init> (Llove/forte/simbot/resource/Resource;)V

simbot-api/build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ kotlin {
6767
freeCompilerArgs.addAll(
6868
"-Xexpect-actual-classes"
6969
)
70-
optIn.add(
71-
"love.forte.simbot.resource.ResourceImplementation"
70+
optIn.addAll(
71+
"love.forte.simbot.resource.ResourceImplementation",
72+
"love.forte.simbot.message.OfflineImageImplementation",
7273
)
7374
}
7475

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright (c) 2025. ForteScarlet.
3+
*
4+
* Project https://github.com/simple-robot/simpler-robot
5+
6+
*
7+
* This file is part of the Simple Robot Library (Alias: simple-robot, simbot, etc.).
8+
*
9+
* This program is free software: you can redistribute it and/or modify
10+
* it under the terms of the GNU Lesser General Public License as published by
11+
* the Free Software Foundation, either version 3 of the License, or
12+
* (at your option) any later version.
13+
*
14+
* This program is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
* Lesser GNU General Public License for more details.
18+
*
19+
* You should have received a copy of the Lesser GNU General Public License
20+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
21+
*
22+
*/
23+
24+
package love.forte.simbot.message
25+
26+
/**
27+
* [OfflineImage] 的外部实现是不稳定的,
28+
* [OfflineImage] 的实现应该是内部的,目前 [OfflineImage] 不保证第三方实现未来的稳定与兼容。
29+
*
30+
* @since 4.11.0
31+
*/
32+
@Target(AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS)
33+
@RequiresOptIn(
34+
message = "`OfflineImage` implementation is unstable. " +
35+
"The implementation of `OfflineImage` should be internal. " +
36+
"Currently, `OfflineImage` does not guarantee the stability " +
37+
"and compatibility of third-party implementations in the future.",
38+
level = RequiresOptIn.Level.WARNING
39+
)
40+
@MustBeDocumented
41+
public annotation class OfflineImageImplementation

simbot-api/src/commonMain/kotlin/love/forte/simbot/message/OfflineImageResolver.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2024. ForteScarlet.
2+
* Copyright (c) 2024-2025. ForteScarlet.
33
*
44
* Project https://github.com/simple-robot/simpler-robot
55
@@ -25,8 +25,25 @@ package love.forte.simbot.message
2525

2626
import love.forte.simbot.resource.*
2727
import love.forte.simbot.resource.ResourceResolver.Companion.resolve
28+
import kotlin.annotation.AnnotationRetention.BINARY
29+
import kotlin.annotation.AnnotationTarget.CLASS
30+
import kotlin.annotation.AnnotationTarget.FUNCTION
2831
import kotlin.jvm.JvmStatic
2932

33+
/**
34+
* 计划被废弃的与 [OfflineImageResolver] 相关的API
35+
*
36+
* @since 4.11.0
37+
*/
38+
@RequiresOptIn(
39+
message = "计划被废弃的与 `OfflineImageResolver` 相关的API. 详见 " +
40+
"`love.forte.simbot.message.OfflineImageResolver` 中的有关说明。",
41+
level = RequiresOptIn.Level.ERROR
42+
)
43+
@Retention(BINARY)
44+
@Target(CLASS, FUNCTION)
45+
@MustBeDocumented
46+
public annotation class ScheduledDeprecatedOfflineImageResolverApi
3047

3148
/**
3249
* 使用 [OfflineImageResolver] 分析处理一个 [OfflineImage].
@@ -37,6 +54,7 @@ import kotlin.jvm.JvmStatic
3754
*
3855
* @author ForteScarlet
3956
*/
57+
@ScheduledDeprecatedOfflineImageResolverApi
4058
public interface OfflineImageResolver<C> {
4159

4260
/**
@@ -63,7 +81,6 @@ public interface OfflineImageResolver<C> {
6381
when (image) {
6482
is OfflineByteArrayImage -> resolveByteArray(image, context)
6583
is OfflineResourceImage -> resolveResource(image, context)
66-
else -> resolveUnknown(image, context)
6784
}
6885
}
6986
}
@@ -74,6 +91,7 @@ public interface OfflineImageResolver<C> {
7491
* 对其中可能出现的实际内容物(例如 [ByteArray] 或 [String])进行处理。
7592
*/
7693
@ScheduledDeprecatedResourceApi
94+
@ScheduledDeprecatedOfflineImageResolverApi
7795
public interface OfflineImageValueResolver<C> :
7896
OfflineImageResolver<C>,
7997
ResourceResolver<C> {

simbot-api/src/commonMain/kotlin/love/forte/simbot/message/StandardMessages.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2024. ForteScarlet.
2+
* Copyright (c) 2024-2025. ForteScarlet.
33
*
44
* Project https://github.com/simple-robot/simpler-robot
55
@@ -380,6 +380,7 @@ public sealed interface OfflineImage : Image {
380380
/**
381381
* 一个基于 [Resource] 的 [OfflineImage] 实现。
382382
*/
383+
@SubclassOptInRequired(OfflineImageImplementation::class)
383384
public interface OfflineResourceImage : OfflineImage {
384385
/**
385386
* 关联的资源对象

simbot-api/src/jvmMain/kotlin/love/forte/simbot/message/OfflineImageResolver.jvm.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2024. ForteScarlet.
2+
* Copyright (c) 2024-2025. ForteScarlet.
33
*
44
* Project https://github.com/simple-robot/simpler-robot
55
@@ -32,6 +32,7 @@ import kotlin.io.path.toPath
3232
/**
3333
* JVM 平台下的 [OfflineImageResolver] 扩展类型。
3434
*/
35+
@ScheduledDeprecatedOfflineImageResolverApi
3536
public interface JvmOfflineImageResolver<C> : OfflineImageResolver<C> {
3637
/**
3738
* 处理类型为 [OfflineFileImage] 的 resource.
@@ -72,6 +73,7 @@ public interface JvmOfflineImageResolver<C> : OfflineImageResolver<C> {
7273
* 对其中可能出现的实际内容物(例如 [File] 或 [Path])进行处理。
7374
*/
7475
@ScheduledDeprecatedResourceApi
76+
@ScheduledDeprecatedOfflineImageResolverApi
7577
public abstract class JvmOfflineImageValueResolver<C> :
7678
OfflineImageValueResolver<C>,
7779
JvmOfflineImageResolver<C>,

0 commit comments

Comments
 (0)