Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Move signals parameter names to annotation #750

Merged
merged 3 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/src/doc/user-guide/advanced/abstract-classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ abstract class AbstractClassInheritanceParent: Node() {
@RegisterProperty
var registeredExportedPropertyInAbstractClass = false

@RegisterSignal
val signalInAbstractClass by signal<String>("blubb")
@RegisterSignal("blubb")
val signalInAbstractClass by signal<String>()

@RegisterFunction
fun functionInAbstractClassWithDefaultImplementation() {
Expand Down
22 changes: 11 additions & 11 deletions docs/src/doc/user-guide/signals_and_callables.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ The delegate is the recommended way, it is lightweight and doesn't store the sig
You can opt to directly create a signal and store it in your script, but it uses more memory.
Signals are not stateful so it's usually a waste to store them directly per instance, unless you have a high rate of connection/disconnection.

In both case, you have to provide the name of the signal parameters as strings for the registration to Godot.
In both case, you have to provide the name of the signal parameters as strings arguments of the `@RegisterSignal` annotation for the registration to Godot. If you do not provide them, a parameter name is set by default (`p0` for the first, `p1` for the second and so on).

/// tab | Kotlin
```kotlin
@RegisterClass
class MyScript: Node() {
@RegisterSignal
val mySignal by signal1<Boolean>("reverse")
@RegisterSignal("reverse")
val mySignal by signal1<Boolean>()

@RegisterSignal
val mySignal = Signal1<Boolean>("mySignal", "reverse")
@RegisterSignal("reverse")
val mySignal = Signal1<Boolean>("mySignal")
}
```
///
Expand All @@ -29,8 +29,8 @@ class MyScript: Node() {
```java
@RegisterClass
public MyScript extends Node {
@RegisterSignal
public Signal1<Boolean> mySignal = Signal1.create(this, "mySignal", "reverse"); // Only one way to do it in Java.
@RegisterSignal("reverse")
public Signal1<Boolean> mySignal = Signal1.create(this, "mySignal"); // Only one way to do it in Java.
}
```
///
Expand Down Expand Up @@ -100,8 +100,8 @@ class SomeObject: Object() {

@RegisterClass
class AnotherObject: Object() {
@RegisterSignal
val mySignal by signal1<Boolean>("reverse")
@RegisterSignal("reverse")
val mySignal by signal1<Boolean>()

private val targetObject = SomeObject()

Expand All @@ -128,8 +128,8 @@ public class SomeObject extends Object {

@RegisterClass
public class AnotherObject extends Object {
@RegisterSignal
public Signal1<Boolean> mySignal = Signal1.create(this, "mySignal", "reverse");
@RegisterSignal("reverse")
public Signal1<Boolean> mySignal = Signal1.create(this, "mySignal");

private SomeObject targetObject = new SomeObject();

Expand Down
4 changes: 2 additions & 2 deletions harness/tests/src/main/java/godot/tests/JavaTestClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public class JavaTestClass extends Node {
@RegisterSignal
public Signal0 testSignal = Signal0.create(this, "test_signal");

@RegisterSignal
public Signal2<String, String> testSignal2 = Signal2.create(this, "test_signal_2", "param1", "param2");
@RegisterSignal(parameters = {"param1", "param2"})
public Signal2<String, String> testSignal2 = Signal2.create(this, "test_signal_2");

// The following should NOT work as we cannot extract parameter names. The compiler checks should catch that and throw a build error
// @RegisterSignal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ class LambdaCallableTest : Node() {
@RegisterProperty
var hasSignalNoParamBeenTriggered = false

@RegisterSignal
val signalWithParams: Signal3<String, Long, Node> by signal3("str", "long", "node")
@RegisterSignal("str", "long", "node")
val signalWithParams: Signal3<String, Long, Node> by signal3()

@RegisterProperty
var signalString: String = ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ class CoroutineTest : Object() {
@RegisterSignal
val signalWithoutParameter by signal0()

@RegisterSignal
val signalWithOneParameter by signal1<Int>("int")
@RegisterSignal("int")
val signalWithOneParameter by signal1<Int>()

@RegisterSignal
val signalWithManyParameters by signal4<Int, Float, Vector2, String>("int", "float", "vector2", "string")
@RegisterSignal("int", "float", "vector2", "string")
val signalWithManyParameters by signal4<Int, Float, Vector2, String>()

@RegisterProperty
var step: Int = 0
Expand Down Expand Up @@ -79,8 +79,8 @@ class CoroutineTest : Object() {
}
}

@RegisterSignal
val runOnMainThreadFromBackgroundThreadFinished by signal1<Boolean>("is_test_successful")
@RegisterSignal("is_test_successful")
val runOnMainThreadFromBackgroundThreadFinished by signal1<Boolean>()

@RegisterFunction
fun runOnMainThreadFromBackgroundThread() {
Expand Down Expand Up @@ -109,8 +109,8 @@ class CoroutineTest : Object() {
}
}

@RegisterSignal
val asyncLoadResourceFinished by signal1<Boolean>("is_test_successful")
@RegisterSignal("is_test_successful")
val asyncLoadResourceFinished by signal1<Boolean>()

@RegisterFunction
fun asyncLoadResource() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import godot.core.signal2
@RegisterClass
class AbstractClassInheritanceChild : AbstractClassInheritanceParent() {

@RegisterSignal
override val testOverridden by signal2<String, Int>("blubb", "habbalubbb")
@RegisterSignal("blubb", "habbalubbb")
override val testOverridden by signal2<String, Int>()

//---------------- Here to check ------------------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ abstract class AbstractClassInheritanceParent : Node() {
@RegisterProperty
var registeredExportedPropertyInParent = false

@RegisterSignal
val testNotOverridden by signal1<String>("blubb")
@RegisterSignal("blubb")
val testNotOverridden by signal1<String>()

@RegisterSignal
open val testOverridden by signal2<String, Int>("blubb", "habbalubb")
@RegisterSignal("blubb", "habbalubb")
open val testOverridden by signal2<String, Int>()

//---------------- Here to check ------------------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import godot.global.GD
@RegisterClass
class ClassInheritanceChild : ClassInheritanceParent() {

@RegisterSignal
override val testOverridden by signal2<String, Int>("blubb", "habbalubbb")
@RegisterSignal("blubb", "habbalubbb")
override val testOverridden by signal2<String, Int>()

//---------------- Here to check ------------------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ import godot.global.GD
@RegisterClass
open class ClassInheritanceParent : Node() {

@RegisterSignal
val testNotOverridden by signal1<String>("blubb")
@RegisterSignal("blubb")
val testNotOverridden by signal1<String>()

@RegisterSignal
open val testOverridden by signal2<String, Int>("blubb", "habbalubb")
@RegisterSignal("blubb", "habbalubb")
open val testOverridden by signal2<String, Int>()

//---------------- Here to check ------------------

Expand Down
22 changes: 11 additions & 11 deletions harness/tests/src/main/kotlin/godot/tests/signal/SignalTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@ class SignalTest : Node() {
@RegisterSignal
val noParamSignalDelegate by signal0()

@RegisterSignal
val oneParamSignalDelegate by signal1<Boolean>("refresh")
@RegisterSignal("refresh")
val oneParamSignalDelegate by signal1<Boolean>()

@RegisterSignal
val twoParamSignalDelegate by signal2<String, SignalTest>("str", "inv")
@RegisterSignal("str", "inv")
val twoParamSignalDelegate by signal2<String, SignalTest>()


@RegisterSignal
@RegisterSignal()
val noParamSignalField = Signal0("noParamSignalField")

@RegisterSignal
val oneParamSignalField = Signal1<Boolean>("oneParamSignalField","refresh")
@RegisterSignal("refresh")
val oneParamSignalField = Signal1<Boolean>("oneParamSignalField")

@RegisterSignal
val twoParamSignalField = Signal2<String, SignalTest>("twoParamSignalField","str", "inv")
@RegisterSignal("str", "inv")
val twoParamSignalField = Signal2<String, SignalTest>("twoParamSignalField")

@RegisterProperty
var otherScript = OtherScript()
Expand Down Expand Up @@ -76,8 +76,8 @@ class SignalTest : Node() {
}


@RegisterSignal
val signalWithMultipleTargets by signal1<Vector2>("vector2")
@RegisterSignal("vector2")
val signalWithMultipleTargets by signal1<Vector2>()

//To store values emitted by signals
@RegisterProperty
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,12 +278,6 @@ object SignalGenerationService : ISignalGenerationService {
.toFunSpecBuilder(JAVA_CREATE_METHOD_NAME)
.addParameter(ParameterSpec.builder("`object`", GODOT_OBJECT).build())
.addParameter(ParameterSpec.builder("signalName", STRING).build())
.addParameters(
(0..<argCount)
.map {
ParameterSpec.builder("p$it", STRING).build()
}
)
.returns(genericClassNameInfo.genericClassName)
.addCode(
"return·%T(`object`,·signalName)",
Expand All @@ -308,12 +302,6 @@ object SignalGenerationService : ISignalGenerationService {
.addModifiers(KModifier.INLINE)
.addTypeVariables(genericClassNameInfo.genericTypes)
.addParameter(ParameterSpec.builder("signalName", STRING).build())
.addParameters(
(0..<argCount)
.map {
ParameterSpec.builder("p$it", STRING).build()
}
)
.addCode(
CodeBlock.of(
"return·%T(this,·signalName)",
Expand All @@ -336,12 +324,6 @@ object SignalGenerationService : ISignalGenerationService {
.toFunSpecBuilder(SIGNAL_METHOD_NAME + argCount)
.addModifiers(KModifier.INLINE)
.receiver(GODOT_OBJECT)
.addParameters(
(0..<argCount)
.map {
ParameterSpec.builder("p$it", STRING).build()
}
)
.addCode(
if (argCount == 0) {
CodeBlock.of("return·%T.$DELEGATE_PROPERTY_NAME", genericClassNameInfo.className)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ object SignalRegistrationGenerator {

//a KtFunctionArgument per signal argument
(0 until kotlin.math.max(registeredSignal.parameterTypes.size, registeredSignal.parameterNames.size)).forEach { _ ->
append(",·%T(%T,·%S,·%L)")
append(",·%T(%T,·%S,·%S)")
}

append(")") //signal closing
Expand All @@ -46,7 +46,7 @@ object SignalRegistrationGenerator {
if (registeredSignal.parameterTypes.size >= registeredSignal.parameterNames.size) {
//a KtFunctionArgument per signal argument
registeredSignal.parameterTypes.forEachIndexed { index, argumentType ->
val argumentName = registeredSignal.parameterNames.getOrNull(index) ?: "name_no_provided"
val argumentName = registeredSignal.parameterNames.getOrNull(index) ?: "p$index"
add(ClassName(godotRegistrationPackage, GodotKotlinJvmTypes.ktFunctionArgument))
add(argumentType.toKtVariantType())
add(argumentType.fqName)
Expand Down
Loading
Loading