Skip to content

Commit f5eedad

Browse files
committed
Native. Avoid annotation using
1 parent 6b9a260 commit f5eedad

3 files changed

Lines changed: 24 additions & 25 deletions

File tree

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,37 @@
11
package seskar.compiler.native.backend
22

33
import org.jetbrains.kotlin.ir.declarations.IrFunction
4-
import org.jetbrains.kotlin.ir.util.hasAnnotation
4+
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
55
import org.jetbrains.kotlin.name.ClassId
66
import org.jetbrains.kotlin.name.FqName
77
import org.jetbrains.kotlin.name.Name
8+
import org.jetbrains.kotlin.util.OperatorNameConventions.GET
9+
import org.jetbrains.kotlin.util.OperatorNameConventions.INVOKE
10+
import org.jetbrains.kotlin.util.OperatorNameConventions.SET
811

9-
private class Mapper(
10-
className: String
11-
) {
12-
val marker = FqName("seskar.js.$className")
13-
14-
val annotation = ClassId(
12+
private fun nativeAnnotation(
13+
className: String,
14+
): ClassId =
15+
ClassId(
1516
FqName("seskar.js.internal"),
1617
Name.identifier("${className}Internal"),
1718
)
18-
}
1919

20-
private val MAPPERS = listOf(
21-
Mapper("JsNativeGetter"),
22-
Mapper("JsNativeSetter"),
23-
Mapper("JsNativeInvoke"),
20+
private val ANNOTATION_MAP = mapOf(
21+
GET to nativeAnnotation("JsNativeGetter"),
22+
SET to nativeAnnotation("JsNativeSetter"),
23+
INVOKE to nativeAnnotation("JsNativeInvoke"),
2424
)
2525

26-
internal fun IrFunction.nativeAnnotation(): ClassId? =
27-
MAPPERS.asSequence()
28-
.filter { hasAnnotation(it.marker) }
29-
.map { it.annotation }
30-
.firstOrNull()
26+
internal fun IrFunction.nativeAnnotation(): ClassId? {
27+
if (!isExternal)
28+
return null
29+
30+
if (this !is IrSimpleFunction)
31+
return null
32+
33+
if (!isOperator)
34+
return null
35+
36+
return ANNOTATION_MAP[name]
37+
}
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.test.example
22

3-
import seskar.js.JsNativeInvoke
4-
53
sealed external interface MyHandler {
6-
@JsNativeInvoke
74
operator fun invoke(x: Int, y: Int): Int
85
}

tests/native/src/commonMain/kotlin/com/test/example/MyRecord.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
package com.test.example
22

3-
import seskar.js.JsNativeGetter
4-
import seskar.js.JsNativeSetter
5-
63
sealed external interface MyRecord {
7-
@JsNativeGetter
84
operator fun get(
95
key: String,
106
): Int
117

12-
@JsNativeSetter
138
operator fun set(
149
key: String,
1510
value: Int,

0 commit comments

Comments
 (0)