Skip to content

Commit 0e92e0a

Browse files
committed
Fixes
1 parent b7d51be commit 0e92e0a

File tree

15 files changed

+425
-556
lines changed

15 files changed

+425
-556
lines changed

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,8 @@ object AwaitGenerationService : IAwaitGenerationService {
136136
.beginControlFlow("return·%M", suspendCancellableCoroutine)
137137
.addStatement("cont:·%T<%T>·->", cancellableContinuationClass, returnType)
138138
.addStatement("%M(", promise)
139-
.beginControlFlow("")
140-
.addStatement("$lambdaParametersWithType·->")
141-
.addStatement("cont.%M($resumeParameters)", resume)
142-
.endControlFlow()
143-
.beginControlFlow(",")
144-
.addStatement("cont.%L()", cancel)
145-
.endControlFlow()
139+
.addStatement("$lambdaParametersWithType·->·cont.%M($resumeParameters)·},", resume)
140+
.addStatement("{·cont.%L()·},", cancel)
146141
.addStatement(")")
147142
.endControlFlow()
148143
}

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ object CallableGenerationService : ICallableGenerationService {
2929
private const val LAMBDA_CALLABLE_NAME = "LambdaCallable"
3030
private const val LAMBDA_CONTAINER_NAME = "LambdaContainer"
3131
private const val CONTAINER_ARGUMENT_NAME = "container"
32+
private const val BOUND_ARGS_ARGUMENT_NAME = "boundArgs"
3233
private const val CALLABLE_FUNCTION_NAME = "callable"
3334
private const val VARIANT_TYPE_RETURN_NAME = "returnConverter"
3435
private const val VARIANT_TYPE_ARGUMENT_NAME = "typeConverters"
@@ -42,15 +43,14 @@ object CallableGenerationService : ICallableGenerationService {
4243
val containerFileSpec = FileSpec.builder(godotCorePackage, "LambdaContainers")
4344

4445
for (argCount in 0..Constraints.MAX_FUNCTION_ARG_COUNT) {
45-
val argumentRange = 0..<argCount
46-
val genericParameters = argumentRange.map { TypeVariableName("P$it") }
4746

4847
val lambdaContainerClassName = ClassName(godotCorePackage, "$LAMBDA_CONTAINER_NAME$argCount")
4948
val lambdaCallableClassName = ClassName(godotCorePackage, "$LAMBDA_CALLABLE_NAME$argCount")
5049

5150
val containerInfo = GenericClassNameInfo(lambdaContainerClassName, argCount)
5251
val callableInfo = GenericClassNameInfo(lambdaCallableClassName, argCount)
5352

53+
val genericParameters = containerInfo.genericTypes
5454
val lambdaTypeName = callableInfo.toLambdaTypeName(returnType = returnTypeParameter)
5555

5656

@@ -135,10 +135,19 @@ object CallableGenerationService : ICallableGenerationService {
135135
)
136136
.build()
137137
)
138+
.addParameter(
139+
ParameterSpec
140+
.builder(
141+
BOUND_ARGS_ARGUMENT_NAME,
142+
ARRAY.parameterizedBy(ANY.copy(nullable = true))
143+
)
144+
.defaultValue("emptyArray()")
145+
.build()
146+
)
138147
.addAnnotation(PublishedApi::class)
139148
.build()
140149
)
141-
.addSuperclassConstructorParameter(CONTAINER_ARGUMENT_NAME)
150+
.addSuperclassConstructorParameter(CONTAINER_ARGUMENT_NAME, BOUND_ARGS_ARGUMENT_NAME)
142151
.addFunction(
143152
FunSpec
144153
.builder("call")
@@ -204,17 +213,16 @@ object CallableGenerationService : ICallableGenerationService {
204213
)
205214
.addCode(
206215
buildString {
207-
append("return·%T($CONTAINER_ARGUMENT_NAME).bindUnsafe(")
216+
append("return·%T($CONTAINER_ARGUMENT_NAME, arrayOf(")
208217

209218
for (index in (0..<typeVariables.size)) {
210219
if (index != 0) append("")
211220
append("p${index + remainingParameters}")
212221
}
213222

214-
append(")·as·%T")
223+
append("))")
215224
},
216225
bindClassName.parameterizedBy(listOf(returnTypeParameter) + bindInfo.genericTypes),
217-
bindClassName.parameterizedBy(listOf(returnTypeParameter) + bindInfo.genericTypes),
218226
)
219227
.build()
220228
)

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.squareup.kotlinpoet.CodeBlock
66
import com.squareup.kotlinpoet.FileSpec
77
import com.squareup.kotlinpoet.KModifier
88
import com.squareup.kotlinpoet.LambdaTypeName
9+
import com.squareup.kotlinpoet.MemberName
910
import com.squareup.kotlinpoet.ParameterSpec
1011
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
1112
import com.squareup.kotlinpoet.TypeVariableName
@@ -35,14 +36,15 @@ object ConnectorGenerationService : IConnectorGenerationService {
3536
private val godotObjectBoundTypeVariable = TypeVariableName("T", GODOT_OBJECT)
3637
private val connectFlagClassName = ClassName(godotCorePackage, "Object.ConnectFlags")
3738
private val variantConverterClassName = ClassName(godotCorePackage, GodotKotlinJvmTypes.variantParser)
39+
private val variantMapperMember = MemberName(godotCorePackage, "variantMapper")
3840

3941
override fun generate(output: File) {
4042
val connectorFileSpec = FileSpec.builder(godotCorePackage, "SignalConnectors")
4143

4244
for (argCount in 0..Constraints.MAX_FUNCTION_ARG_COUNT) {
4345
val signalClassName = ClassName(godotCorePackage, "$SIGNAL_CLASS_NAME$argCount")
4446
val genericClassNameInfo = GenericClassNameInfo(signalClassName, argCount)
45-
47+
val genericParameters = genericClassNameInfo.genericTypes
4648

4749
val flagsParameter = ParameterSpec.builder(FLAGS_PARAMETER_NAME, connectFlagClassName)
4850
.defaultValue("%T.%L", connectFlagClassName, "DEFAULT")
@@ -127,7 +129,7 @@ object ConnectorGenerationService : IConnectorGenerationService {
127129
val containerInfo = GenericClassNameInfo(lambdaContainerClassName, argCount)
128130
connectorFileSpec.addFunction(
129131
genericClassNameInfo
130-
.toExtensionFunSpecBuilder(PROMISE_METHOD_NAME)
132+
.toReifiedExtensionFunSpecBuilder(PROMISE_METHOD_NAME)
131133
.addParameters(
132134
listOf(
133135
ParameterSpec
@@ -138,22 +140,36 @@ object ConnectorGenerationService : IConnectorGenerationService {
138140
returnType = UNIT
139141
)
140142
)
143+
.addModifiers(KModifier.NOINLINE)
141144
.build(),
142145
ParameterSpec
143146
.builder(
144147
CANCEL_PARAMETER_NAME, LambdaTypeName.get(
145148
returnType = UNIT
146149
)
147150
)
151+
.addModifiers(KModifier.NOINLINE)
148152
.build(),
149153

150154
)
151155
)
152156
.addCode(
153157
CodeBlock.of(
154-
"%T(%T.NIL, emptyArray(), $METHOD_PARAMETER_NAME).setAsCancellable(this, $CANCEL_PARAMETER_NAME)",
158+
buildString {
159+
append("%T(%T.NIL,·arrayOf(")
160+
genericParameters.forEachIndexed { index, _ ->
161+
if (index != 0) append("")
162+
append("%M[%T::class]!!")
163+
}
164+
append("),·$METHOD_PARAMETER_NAME).setAsCancellable(this,·$CANCEL_PARAMETER_NAME)")
165+
},
155166
containerInfo.className.parameterizedBy(listOf(UNIT) + containerInfo.genericTypes),
156-
variantConverterClassName
167+
variantConverterClassName,
168+
*genericParameters
169+
.flatMap {
170+
listOf(variantMapperMember, it)
171+
}
172+
.toTypedArray()
157173
)
158174
)
159175
.build()

0 commit comments

Comments
 (0)