Skip to content

Commit 66197c7

Browse files
committed
Improve Connector methods
1 parent 5c96cd8 commit 66197c7

File tree

25 files changed

+233
-164
lines changed

25 files changed

+233
-164
lines changed

harness/tests/src/main/kotlin/godot/tests/FuncRefTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import godot.annotation.RegisterSignal
88
import godot.annotation.Rpc
99
import godot.core.callable0
1010
import godot.core.callable1
11-
import godot.core.connect
1211
import godot.core.signal0
12+
import godot.extension.connectMethod
1313

1414
@RegisterClass
1515
class FuncRefTest : Node() {
@@ -31,7 +31,7 @@ class FuncRefTest : Node() {
3131

3232
@RegisterFunction
3333
override fun _ready() {
34-
test.connect(this, FuncRefTest::testSignalCallback)
34+
test.connectMethod(this, FuncRefTest::testSignalCallback)
3535
}
3636

3737
@Rpc

harness/tests/src/main/kotlin/godot/tests/GodotStaticTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package godot.tests
33
import godot.api.Node
44
import godot.api.PackedScene
55
import godot.api.ResourceLoader
6-
import godot.extension.asStatic
6+
import godot.extension.api.asStatic
77

88
object GodotStaticDelegateTest {
99
var ref = (ResourceLoader.load("res://Spatial.tscn") as PackedScene?).asStatic()

harness/tests/src/main/kotlin/godot/tests/Invocation.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ import godot.core.Vector2
3838
import godot.core.Vector3
3939
import godot.core.dictionaryOf
4040
import godot.core.variantArrayOf
41-
import godot.extension.getNodeAs
4241
import godot.registration.Range
4342
import godot.tests.subpackage.OtherScript
4443
import godot.common.util.RealT
45-
import godot.core.connect
44+
import godot.extension.api.getNodeAs
45+
import godot.extension.connectMethod
4646
import org.joda.time.DateTime
4747

4848
enum class TestEnum {
@@ -371,7 +371,7 @@ class Invocation : Node3D() {
371371
val path = NodePath("CanvasLayer/Button")
372372
val getNode2 = getNodeAs<Button>(path)
373373

374-
(getNodeOrNull(path) as Button?)?.pressed?.connect(
374+
(getNodeOrNull(path) as Button?)?.pressed?.connectMethod(
375375
invocation,
376376
OtherScript::hookNoParam
377377
)

harness/tests/src/main/kotlin/godot/tests/LambdaCallableTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import godot.annotation.RegisterProperty
77
import godot.annotation.RegisterSignal
88
import godot.core.Signal3
99
import godot.core.asCallable
10-
import godot.core.connect
1110
import godot.core.signal0
1211
import godot.core.signal3
12+
import godot.extension.connectLambda
1313

1414
@RegisterClass
1515
class LambdaCallableTest : Node() {
@@ -40,11 +40,11 @@ class LambdaCallableTest : Node() {
4040

4141
@RegisterFunction
4242
override fun _ready() {
43-
signalNoParam.connect {
43+
signalNoParam.connectLambda {
4444
hasSignalNoParamBeenTriggered = true
4545
}
4646

47-
signalWithParams.connect { p0, p1, p2 ->
47+
signalWithParams.connectLambda { p0, p1, p2 ->
4848
signalString = p0
4949
signalLong = p1
5050
signalNode = p2

harness/tests/src/main/kotlin/godot/tests/signal/SignalTest.kt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import godot.core.Signal2
1111
import godot.core.VariantArray
1212
import godot.core.Vector2
1313
import godot.core.asStringName
14-
import godot.core.connect
1514
import godot.core.signal0
1615
import godot.core.signal1
1716
import godot.core.signal2
17+
import godot.extension.connectLambda
18+
import godot.extension.connectMethod
1819
import godot.tests.subpackage.OtherScript
1920

2021
@RegisterClass
@@ -44,34 +45,34 @@ class SignalTest : Node() {
4445
@RegisterFunction
4546
override fun _ready() {
4647

47-
noParamSignalDelegate.connect(otherScript, OtherScript::hookNoParam)
48-
oneParamSignalDelegate.connect(otherScript, OtherScript::hookOneParam)
49-
twoParamSignalDelegate.connect(otherScript, OtherScript::hookTwoParam)
48+
noParamSignalDelegate.connectMethod(otherScript, OtherScript::hookNoParam)
49+
oneParamSignalDelegate.connectMethod(otherScript, OtherScript::hookOneParam)
50+
twoParamSignalDelegate.connectMethod(otherScript, OtherScript::hookTwoParam)
5051

51-
noParamSignalDelegate.connect { println("noParam signal emitted") }
52-
oneParamSignalDelegate.connect { b -> println("oneParam signal emitted with $b") }
53-
twoParamSignalDelegate.connect { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
52+
noParamSignalDelegate.connectLambda { println("noParam signal emitted") }
53+
oneParamSignalDelegate.connectLambda { b -> println("oneParam signal emitted with $b") }
54+
twoParamSignalDelegate.connectLambda { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
5455

5556
noParamSignalDelegate.emit()
5657
oneParamSignalDelegate.emit(false)
5758
twoParamSignalDelegate.emit("My Awesome param !", this)
5859

5960

60-
noParamSignalField.connect(otherScript, OtherScript::hookNoParam)
61-
oneParamSignalField.connect(otherScript, OtherScript::hookOneParam)
62-
twoParamSignalField.connect(otherScript, OtherScript::hookTwoParam)
61+
noParamSignalField.connectMethod(otherScript, OtherScript::hookNoParam)
62+
oneParamSignalField.connectMethod(otherScript, OtherScript::hookOneParam)
63+
twoParamSignalField.connectMethod(otherScript, OtherScript::hookTwoParam)
6364

64-
noParamSignalField.connect { println("noParam signal emitted") }
65-
oneParamSignalField.connect { b -> println("oneParam signal emitted with $b") }
66-
twoParamSignalField.connect { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
65+
noParamSignalField.connectLambda { println("noParam signal emitted") }
66+
oneParamSignalField.connectLambda { b -> println("oneParam signal emitted with $b") }
67+
twoParamSignalField.connectLambda { p0, p1 -> println("twoParam signal emitted with $p0 and $p1") }
6768

6869
noParamSignalField.emit()
6970
oneParamSignalField.emit(false)
7071
twoParamSignalField.emit("My Awesome param !", this)
7172

7273

73-
signalWithMultipleTargets.connect(this, SignalTest::targetFunctionOne)
74-
signalWithMultipleTargets.connect(this, SignalTest::targetFunctionTwo)
74+
signalWithMultipleTargets.connectMethod(this, SignalTest::targetFunctionOne)
75+
signalWithMultipleTargets.connectMethod(this, SignalTest::targetFunctionTwo)
7576
signalWithMultipleTargets.emit(Vector2(0, 0))
7677
}
7778

kt/api-generator/src/main/kotlin/godot/codegen/generationEntry.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import godot.codegen.services.impl.CallableGenerationService
1111
import godot.codegen.services.impl.SignalGenerationService
1212
import java.io.File
1313

14-
fun generateApiFrom(jsonSource: File, coreDir: File, apiDir: File) {
14+
fun generateApiFrom(jsonSource: File, coreDir: File, apiDir: File, extensionDir: File) {
1515
val apiDescription = ObjectMapper().readValue(jsonSource, object : TypeReference<ApiDescription>() {})
1616
val generationService: IApiGenerationService = ApiGenerationService(apiDescription)
1717
generationService.generateApi(coreDir, apiDir)
1818

1919
SignalGenerationService.generate(coreDir)
2020
CallableGenerationService.generate(coreDir)
21-
ConnectorGenerationService.generate(coreDir)
21+
ConnectorGenerationService.generate(extensionDir)
2222
}
2323

2424
fun generateCoroutine(outputDir: File) {

kt/api-generator/src/main/kotlin/godot/codegen/services/IConnectorGenerationService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ package godot.codegen.services
33
import java.io.File
44

55
interface IConnectorGenerationService {
6-
fun generate(output: File)
6+
fun generate(extensionDir: File)
77
}

kt/api-generator/src/main/kotlin/godot/codegen/services/impl/AwaitGenerationService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ import godot.common.constants.Constraints
1717
import godot.tools.common.constants.GodotKotlinJvmTypes.signal
1818
import godot.tools.common.constants.godotCorePackage
1919
import godot.tools.common.constants.godotCoroutinePackage
20+
import godot.tools.common.constants.godotExtensionPackage
2021
import godot.tools.common.constants.kotlinCoroutinePackage
2122
import godot.tools.common.constants.kotlinxCoroutinePackage
2223
import java.io.File
2324

2425
private val cancellableContinuationClass = ClassName(kotlinxCoroutinePackage, "CancellableContinuation")
2526
private val suspendCancellableCoroutine = MemberName(kotlinxCoroutinePackage, "suspendCancellableCoroutine")
26-
private val promise = MemberName(godotCorePackage, "promise")
27+
private val promise = MemberName(godotExtensionPackage, "promise")
2728
private val resume = MemberName(kotlinCoroutinePackage, "resume")
2829
private const val cancel = "cancel"
2930

kt/api-generator/src/main/kotlin/godot/codegen/services/impl/CallableGenerationService.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ object CallableGenerationService : ICallableGenerationService {
138138
.primaryConstructor(
139139
FunSpec
140140
.constructorBuilder()
141-
.addModifiers(KModifier.INTERNAL)
142141
.addParameter(
143142
ParameterSpec
144143
.builder(
@@ -163,7 +162,6 @@ object CallableGenerationService : ICallableGenerationService {
163162
)
164163
.build()
165164
)
166-
.addAnnotation(PublishedApi::class)
167165
.build()
168166
)
169167
.addFunction(

kt/api-generator/src/main/kotlin/godot/codegen/services/impl/ConnectorGenerationService.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,30 @@ import godot.tools.common.constants.GODOT_SIGNAL_CONNECTOR
2020
import godot.tools.common.constants.GODOT_OBJECT
2121
import godot.tools.common.constants.GodotKotlinJvmTypes
2222
import godot.tools.common.constants.TO_GODOT_NAME_UTIL_FUNCTION
23+
import godot.tools.common.constants.godotApiPackage
2324
import godot.tools.common.constants.godotCorePackage
25+
import godot.tools.common.constants.godotExtensionPackage
2426
import java.io.File
2527
import kotlin.reflect.KCallable
2628

2729
object ConnectorGenerationService : IConnectorGenerationService {
2830
private const val LAMBDA_CONTAINER_NAME = "LambdaContainer"
2931
private const val SIGNAL_CLASS_NAME = "Signal"
30-
private const val CONNECT_METHOD_NAME = "connect"
32+
private const val CONNECT_METHOD_METHOD_NAME = "connectMethod"
33+
private const val CONNECT_LAMBDA_METHOD_NAME = "connectLambda"
3134
private const val PROMISE_METHOD_NAME = "promise"
3235
private const val METHOD_PARAMETER_NAME = "method"
3336
private const val CANCEL_PARAMETER_NAME = "cancel"
3437
private const val FLAGS_PARAMETER_NAME = "flags"
3538
private const val TARGET_PARAMETER_NAME = "target"
3639
private val godotObjectBoundTypeVariable = TypeVariableName("T", GODOT_OBJECT)
37-
private val connectFlagClassName = ClassName(godotCorePackage, "Object.ConnectFlags")
40+
private val connectFlagClassName = ClassName(godotApiPackage, "Object.ConnectFlags")
3841
private val variantConverterClassName = ClassName(godotCorePackage, GodotKotlinJvmTypes.variantParser)
3942
private val variantMapperMember = MemberName(godotCorePackage, "variantMapper")
43+
private val asCallableMember= MemberName(godotCorePackage, "asCallable")
4044

4145
override fun generate(output: File) {
42-
val connectorFileSpec = FileSpec.builder(godotCorePackage, "SignalConnectors")
46+
val connectorFileSpec = FileSpec.builder(godotExtensionPackage, "SignalConnectors")
4347

4448
for (argCount in 0..Constraints.MAX_FUNCTION_ARG_COUNT) {
4549
val signalClassName = ClassName(godotCorePackage, "$SIGNAL_CLASS_NAME$argCount")
@@ -53,7 +57,7 @@ object ConnectorGenerationService : IConnectorGenerationService {
5357

5458
connectorFileSpec.addFunction(
5559
genericClassNameInfo
56-
.toReifiedExtensionFunSpecBuilder(CONNECT_METHOD_NAME)
60+
.toReifiedExtensionFunSpecBuilder(CONNECT_LAMBDA_METHOD_NAME)
5761
.addParameters(
5862
listOf(
5963
flagsParameter,
@@ -72,14 +76,15 @@ object ConnectorGenerationService : IConnectorGenerationService {
7276
.addCode(
7377
CodeBlock.of(
7478
"""
75-
val connector = %T(
79+
val connector = %T.createUnsafe(
7680
this,
77-
$METHOD_PARAMETER_NAME.asCallable()
81+
$METHOD_PARAMETER_NAME.%M()
7882
)
7983
connector.connect($FLAGS_PARAMETER_NAME)
8084
return connector
8185
""".trimIndent(),
8286
GODOT_SIGNAL_CONNECTOR,
87+
asCallableMember
8388
)
8489
)
8590
.returns(
@@ -93,7 +98,7 @@ object ConnectorGenerationService : IConnectorGenerationService {
9398

9499
connectorFileSpec.addFunction(
95100
genericClassNameInfo
96-
.toExtensionFunSpecBuilder(CONNECT_METHOD_NAME, listOf(godotObjectBoundTypeVariable))
101+
.toExtensionFunSpecBuilder(CONNECT_METHOD_METHOD_NAME, listOf(godotObjectBoundTypeVariable))
97102
.addParameters(
98103
listOf(
99104
ParameterSpec
@@ -109,7 +114,7 @@ object ConnectorGenerationService : IConnectorGenerationService {
109114
.addCode(
110115
CodeBlock.of(
111116
"""
112-
val connector = %T(
117+
val connector = %T.createUnsafe(
113118
this,
114119
%T($TARGET_PARAMETER_NAME,·($METHOD_PARAMETER_NAME·as·%T<*>).name.%M())
115120
)
@@ -122,6 +127,7 @@ object ConnectorGenerationService : IConnectorGenerationService {
122127
TO_GODOT_NAME_UTIL_FUNCTION,
123128
)
124129
)
130+
.addAnnotation(JvmSynthetic::class)
125131
.build()
126132
)
127133

kt/api-generator/src/main/kotlin/godot/gradle/ApiGeneratorPlugin.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,14 @@ open class GenerateAPI : DefaultTask() {
4242
val apiOutput = apiOutputDir.get().asFile
4343
apiOutput.deleteRecursively()
4444

45+
val extensionOutput = extensionOutputDir.get().asFile
46+
extensionOutput.deleteRecursively()
47+
4548
generateApiFrom(
4649
sourceJson.get().asFile,
4750
coreOutput,
4851
apiOutput,
52+
extensionOutput
4953
)
5054

5155
val coroutineOutput = coroutineOutputDir.get().asFile

0 commit comments

Comments
 (0)