Skip to content

Commit 9bdc295

Browse files
committed
feat(plugin): 仅支持公开API
Closes #2
1 parent 45da2c6 commit 9bdc295

File tree

6 files changed

+19
-45
lines changed

6 files changed

+19
-45
lines changed

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/symbol/SuspendTransformSyntheticResolveExtension.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
3030
import org.jetbrains.kotlin.resolve.descriptorUtil.module
3131
import org.jetbrains.kotlin.resolve.descriptorUtil.platform
3232
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
33+
import org.jetbrains.kotlin.synthetic.isVisibleOutside
3334
import org.jetbrains.kotlin.types.KotlinTypeFactory
3435
import org.jetbrains.kotlin.types.TypeAttributes
3536
import org.jetbrains.kotlin.types.Variance
@@ -96,7 +97,7 @@ open class SuspendTransformSyntheticResolveExtension(open val configuration: Sus
9697
) {
9798
if (annotationData == null) return
9899

99-
if (annotationData.asProperty == true) {
100+
if (annotationData.asProperty == true && descriptors.valueParameters.isEmpty()) {
100101
syntheticProperties.addSyntheticDescriptors(
101102
thisDescriptor,
102103
descriptors.transformToProperty(annotationData)
@@ -111,7 +112,7 @@ open class SuspendTransformSyntheticResolveExtension(open val configuration: Sus
111112
result
112113
.asSequence()
113114
.filter { f -> f.isSuspend }
114-
.filter { f -> f.visibility.isPublicAPI }
115+
.filter { f -> f.visibility.isVisibleOutside() }
115116
.forEach { originFunction ->
116117
val resolvedAnnotations =
117118
originFunction.resolveToTransformAnnotations(thisDescriptor, configuration)

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/utils/AnnotationDescriptorUtils.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,15 @@ private operator fun FunctionTransformAnnotations.plus(other: FunctionTransformA
107107
* 后者优先。
108108
*/
109109
private operator fun TransformAnnotationData?.plus(other: TransformAnnotationData?): TransformAnnotationData? {
110+
println("class annotation data: $this")
111+
println("function annotation data: $other")
110112
if (this == null && other == null) return null
111113
if (other == null) return this
112114
if (this == null) return other
113115

114116
val baseName = other.baseName ?: this.baseName
115117
val suffix = other.suffix ?: this.suffix
118+
val asProperty = other.asProperty?.takeIf { it } ?: this.asProperty
116119

117120
val functionName = if (baseName == null) other.functionName else buildString {
118121
append(baseName)
@@ -123,14 +126,14 @@ private operator fun TransformAnnotationData?.plus(other: TransformAnnotationDat
123126
annotationDescriptor = other.annotationDescriptor,
124127
baseName = baseName,
125128
suffix = suffix,
126-
asProperty = other.asProperty ?: this.asProperty,
129+
asProperty = asProperty,
127130
functionName = functionName
128131
)
129132

130133
}
131134

132135

133-
fun Annotations.resolveToTransformAnnotations(
136+
private fun Annotations.resolveToTransformAnnotations(
134137
configuration: SuspendTransformConfiguration,
135138
functionBaseName: String
136139
): FunctionTransformAnnotations {

compiler/suspend-transform-plugin/testData/justTest.kt

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,52 +10,22 @@ annotation class Hi
1010
@JvmBlocking
1111
suspend fun hello(): String = "hello"
1212

13+
@JvmBlocking
14+
@JvmAsync
1315
class JustTest : ITest { // : ITest
1416

1517
@Hi
16-
@JvmBlocking(asProperty = true)
17-
@JvmAsync(asProperty = true)
18-
suspend fun value(): Int = value("111")
19-
20-
@JvmBlocking
21-
@JvmAsync
22-
suspend fun value(value: String): Int = value.toInt()
23-
24-
@JvmBlocking
25-
@JvmAsync
26-
//@kotlin.jvm.JvmOverload
27-
override suspend fun run99(name: String): Int = 1
18+
suspend fun value(): Int = 111
2819

2920
@JvmBlocking(asProperty = true)
3021
@JvmAsync(asProperty = true)
31-
override suspend fun run2(): Int = 1
32-
33-
34-
@JvmBlocking
35-
@JvmAsync
3622
override suspend fun self(): JustTest = this
37-
38-
@JvmBlocking(asProperty = true)
39-
@JvmAsync(asProperty = true)
40-
override suspend fun self2(): JustTest = this
4123
}
4224

25+
@JvmBlocking(asProperty = true)
26+
@JvmAsync(asProperty = true)
4327
interface ITest {
44-
@JvmBlocking
45-
@JvmAsync
46-
suspend fun run99(name: String = "forte"): Int
47-
48-
@JvmBlocking(asProperty = true)
49-
@JvmAsync(asProperty = true)
50-
suspend fun run2(): Int
51-
52-
@JvmBlocking
53-
@JvmAsync
5428
suspend fun self(): ITest
55-
56-
@JvmBlocking(asProperty = true)
57-
@JvmAsync(asProperty = true)
58-
suspend fun self2(): ITest
5929
}
6030

6131
fun main() {

runtime/suspend-transform-annotation/src/commonMain/kotlin/love/forte/plugin/suspendtrans/annotation/SuspendTransformAnnotation.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public expect annotation class Api4Js()
3232
*
3333
*/
3434
@OptIn(ExperimentalMultiplatform::class)
35-
@Target(AnnotationTarget.FUNCTION)
35+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
3636
@Retention(AnnotationRetention.BINARY)
3737
@OptionalExpectation
3838
public expect annotation class JvmBlocking(
@@ -81,7 +81,7 @@ public expect annotation class JvmBlocking(
8181
*
8282
*/
8383
@OptIn(ExperimentalMultiplatform::class)
84-
@Target(AnnotationTarget.FUNCTION)
84+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
8585
@Retention(AnnotationRetention.BINARY)
8686
@OptionalExpectation
8787
public expect annotation class JvmAsync(
@@ -105,7 +105,7 @@ public expect annotation class JvmAsync(
105105

106106

107107
@OptIn(ExperimentalMultiplatform::class)
108-
@Target(AnnotationTarget.FUNCTION)
108+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
109109
@Retention(AnnotationRetention.BINARY)
110110
@OptionalExpectation
111111
public expect annotation class JsPromise()

runtime/suspend-transform-annotation/src/jsMain/kotlin/love.forte.plugin.suspendtrans/annotation/SuspendTransformAnnotationJs.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ public actual annotation class Api4Js
88
@Retention(AnnotationRetention.BINARY)
99
public annotation class ExperimentalJsApi
1010

11-
@Target(AnnotationTarget.FUNCTION)
11+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
1212
@Retention(AnnotationRetention.BINARY)
1313
public actual annotation class JsPromise

runtime/suspend-transform-annotation/src/jvmMain/kotlin/love.forte.plugin.suspendtrans/annotation/SuspendTransformAnnotationJvm.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public annotation class ExperimentalJvmApi
2727
* ```
2828
*
2929
*/
30-
@Target(AnnotationTarget.FUNCTION)
30+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
3131
@Retention(AnnotationRetention.BINARY)
3232
public actual annotation class JvmBlocking(
3333
/**
@@ -74,7 +74,7 @@ public actual annotation class JvmBlocking(
7474
* ```
7575
*
7676
*/
77-
@Target(AnnotationTarget.FUNCTION)
77+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
7878
@Retention(AnnotationRetention.BINARY)
7979
public actual annotation class JvmAsync(
8080
actual val baseName: String,

0 commit comments

Comments
 (0)