Skip to content

Commit f0a914a

Browse files
committedJan 23, 2025·
Use the better workaround found by @radstevee
1 parent 897ecc3 commit f0a914a

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed
 

‎interfaces/src/main/kotlin/com/noxcrew/interfaces/interfaces/InterfaceBuilder.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@ public abstract class InterfaceBuilder<P : Pane, I : Interface<I, P>> : Interfac
2222

2323
/** Adds a new transform to the interface that updates whenever [triggers] change. */
2424
public fun withTransform(vararg triggers: Trigger, transform: Transform<P>) {
25-
// Passing ::invoke is a workaround for a K2 issue where suspending + generic functional interfaces
26-
// cannot be passed as a function argument properly without triggering a runtime exception.
27-
_transforms += AppliedTransform(transformCounter, triggers.toSet(), transform::invoke)
25+
_transforms += AppliedTransform(transformCounter, triggers.toSet(), transform)
2826
}
2927

3028
/** Adds a new reactive transform to the interface. */
3129
public fun addTransform(reactiveTransform: ReactiveTransform<P>) {
32-
_transforms += AppliedTransform(transformCounter, reactiveTransform.triggers.toSet(), reactiveTransform::invoke)
30+
_transforms += AppliedTransform(transformCounter, reactiveTransform.triggers.toSet(), reactiveTransform)
3331
}
3432
}

‎interfaces/src/main/kotlin/com/noxcrew/interfaces/transform/Transform.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@ import com.noxcrew.interfaces.pane.Pane
44
import com.noxcrew.interfaces.view.InterfaceView
55

66
/** A transform which edits (transforms) a page in a view. */
7-
public fun interface Transform<P : Pane> : suspend (P, InterfaceView) -> Unit
7+
public fun interface Transform<P : Pane> {
8+
// Defined differently to work around KT-74673: https://youtrack.jetbrains.com/issue/KT-74673/K2-ClassCastException-when-passing-suspending-functional-interface-with-generic
9+
public suspend operator fun invoke(pane: P, view: InterfaceView)
10+
}

0 commit comments

Comments
 (0)
Please sign in to comment.