diff --git a/docs/src/doc/contribution/knowledge-base/entry-generation.md b/docs/src/doc/contribution/knowledge-base/entry-generation.md index 8ea7e860c1..df9831768a 100644 --- a/docs/src/doc/contribution/knowledge-base/entry-generation.md +++ b/docs/src/doc/contribution/knowledge-base/entry-generation.md @@ -5,7 +5,7 @@ To make it more language agnostic, the entry generator provides a set of model classes which represent the needed information about the source code by the entry genenerator. It expects this information to be gathered and assembled by the calling tool and to be provided in the entry point of the entry generator. -For Kotlin and Java, this tool is `godot-kotlin-symbol-processor` (a Kotlin compiler's plugin), which analyses the source code, and gathers the information needed by the entry generator. +For Kotlin, Java and Scala, this tool is `godot-class-graph-symbol-processor`, which analyses the byte code, and gathers the information needed by the entry generator. It then calls the entry generator which in turn generates the needed entry files. ## The godot-kotlin-symbol-processor diff --git a/docs/src/doc/index.md b/docs/src/doc/index.md index 45dfed23e5..69ec9026ac 100644 --- a/docs/src/doc/index.md +++ b/docs/src/doc/index.md @@ -36,7 +36,7 @@ The items in this list are explicitly mentioned here as these will be implemente Also consider the [API Differences](user-guide/api-differences.md) section for general differences and limitations which will not be or cannot be adressed in the near forseable future or ever. -- Each registered constructor must have a unique number of arguments, constructor overloading is not yet supported. +- Only a default no arg constructor can be registered. - No tool mode (you can set it already in the `@RegisterClass` annotation but it has no effect yet). - No addon support, you cannot use Godot Kotlin/JVM to write plugins and addons yet (you can however [write libraries](develop-libraries/introduction.md) with godot specific code). - Web is currently not supported. See [Supported platforms](#supported-platforms) to see what platforms we currently support @@ -48,7 +48,7 @@ If you don't have Discord or you don't want to use it, please file an issue on G ## Supported languages -The main language supported is Kotlin. We do however support Java experimentally. It should be possible to support other JVM-based languages as well but this is not the focus of this project. If you want to have support for other languages, have a look at [support for other JVM-based languages](contribution/support-for-other-jvm-based-languages.md). +The main language supported is Kotlin. We do however support Java and Scala experimentally. It should be possible to support other JVM-based languages as well but this is not the focus of this project. If you want to have support for other languages, have a look at [support for other JVM-based languages](contribution/support-for-other-jvm-based-languages.md). ## Supported platforms @@ -85,7 +85,7 @@ Contrary to the official binaries, there are two builds of the editor per Platfo `release` editors are the editors you use normally. `debug` editors provide debug symbols and are intended to provide better stacktraces in case of crashes of the editor. Please use those when submitting bugreports. !!! warning - This module will NOT work with the official Godot Editor and Export Templates! To be able to use Kotlin and Java scripts in Godot, you need our Editor and Export Templates builds. + This module will NOT work with the official Godot Editor and Export Templates! To be able to use Kotlin, Java and Scala scripts in Godot, you need our Editor and Export Templates builds. ## Developer discussion diff --git a/docs/src/doc/user-guide/advanced/cleanup-operations.md b/docs/src/doc/user-guide/advanced/cleanup-operations.md index d30fd1ced0..19d7007ac2 100644 --- a/docs/src/doc/user-guide/advanced/cleanup-operations.md +++ b/docs/src/doc/user-guide/advanced/cleanup-operations.md @@ -1,4 +1,4 @@ -When running Kotlin/Java code, the JVM is embedded and managed directly by Godot, which offer little control when the game is closing. +When running Kotlin/Java/Scala code, the JVM is embedded and managed directly by Godot, which offer little control when the game is closing. If you use third-party library that needs resources to be freed/saved or threads to be closed. To that end, we provide a simple method that allows you to register callbacks that will be called when the JVM is shutdown. diff --git a/docs/src/doc/user-guide/api-differences.md b/docs/src/doc/user-guide/api-differences.md index 5d58f74bbf..372c50725c 100644 --- a/docs/src/doc/user-guide/api-differences.md +++ b/docs/src/doc/user-guide/api-differences.md @@ -5,9 +5,9 @@ Godot Kotlin/JVM offers two different ways to attach scripts: - Source files - Registration files. -## Source files .kt and .java +## Source files .kt, .java and .scala -Just like you would do with GDScript, you can directly attach your Kotlin/Java files to Nodes as scripts. +Just like you would do with GDScript, you can directly attach your Kotlin/Java/Scala files to Nodes as scripts. This is the most straightforward method to use Kotlin scripts but not the most flexible. The limitations are the following: @@ -20,7 +20,7 @@ The limitations are the following: var test_script: MyScript = load("res://pathToScript/MyScript.kt").new() // Wrong var test_script: Node = load("res://pathToScript/MyScript.kt").new() // Correct ``` - The same applies if you use a Godot object with a .kt/.java attached to it + The same applies if you use a Godot object with a .kt/.java/.scala attached to it If those limitations don't apply to you, feel free to use Kotlin source files directly. @@ -32,7 +32,7 @@ They have several benefits over source files: - .gdj can be placed wherever you want in your Godot project, you are not limited to the source set. - Each script get its own .gdj. This includes scripts in different modules and libraries. - If a source file contains several scripts. A different .gdj will be generated for each. -- Registration files are language agnostic, they are generated for Kotlin and Java files with no difference. +- Registration files are language agnostic, they are generated for Kotlin, Java and Scala files with no difference. - When creating a script from code using its registered name. The module is going to use the registration file as the script. Therefore, registration files are treated as the default way to use scripts inside the module. By default, these files are generated into a folder called `gdj` in the root of your project. @@ -186,6 +186,14 @@ This kind of operation can be costly so we provide extension functions which cac ``` /// +/// tab | Scala +```scala + val stringName = StringNames.asCachedStringName("myString") + val nodePath = NodePaths.asCachedNodePath("myNode/myChildNode") + val snakeCaseStringName = StringNames.toGodotName("myString") +``` +/// + You can also use the non-cached version of them if you simply want ease of conversion: /// tab | Kotlin @@ -202,6 +210,13 @@ You can also use the non-cached version of them if you simply want ease of conve ``` /// +/// tab | Scala +```scala + val stringName = StringNames.asStringName("myString") + val nodePath = NodePaths.asNodePath("myNode/myChildNode") +``` +/// + ## Logging diff --git a/docs/src/doc/user-guide/classes.md b/docs/src/doc/user-guide/classes.md index 9d2d393387..e8c7375ab7 100644 --- a/docs/src/doc/user-guide/classes.md +++ b/docs/src/doc/user-guide/classes.md @@ -139,12 +139,9 @@ This also works for any type you define. ## Constructors -Godot requires you to have a default constructor on your classes. -You can define additional constructors but you have to register them by annothing them with `@RegisterConstructor`. -Default constructors, on the other hand, are always registered automatically. - -Constructors can also have **a maximum of 8 arguments** and must have a unique argument count as constructor overloading is not yet supported. -This limitation is only for registered constructors. +Godot requires you to have a default constructor on your classes. These are automatically registered for you. +Registering constructor with arguments is currently not supported. But you can freely use them from Kotlin/Java/Scala +just not from GDScript or any other non Godot Kotlin/JVM language. ### Instantiate Kotlin script classes in GDScript @@ -154,15 +151,8 @@ From GDScript it is possible to create an instance of a Kotlin class using the d var instance := YourKotlinClass.new() ``` -Additional constructors must use the `load` function: - -```kt -var instance := load("res://gdj/YourClass.gdj").new(oneArg, anotherArg) -``` - -!!! info - The limitation of max 16 arguments for constructors is arbitrary. We decided to introduce this limitation to prevent performance bottlenecks for creating objects as each argument passed to a constructor needs to be unpacked by the binding. The more arguments, the more unpacking is needed which means more overhead. - +Using other constructors is not possible. Only the default no arg constructor is registered. +But you can create the object and set the required properties after instantiation. ## Customization diff --git a/docs/src/doc/user-guide/signals_and_callables.md b/docs/src/doc/user-guide/signals_and_callables.md index c259aae003..9c54a15296 100644 --- a/docs/src/doc/user-guide/signals_and_callables.md +++ b/docs/src/doc/user-guide/signals_and_callables.md @@ -35,6 +35,16 @@ public MyScript extends Node { ``` /// +/// tab | Scala +```scala +@RegisterClass +class MyScript extends Node { + @RegisterSignal("reverse") + val mySignal: Signal1[Boolean] = Signal1.create(this, "mySignal") // Only one way to do it in Scala. +} +``` +/// + !!! warning Signal parameter count In GDScript, signals can have any number of arguments, this is not possible in Kotlin as it is a statically typed language. At the moment, you can create signals and expose them to Godot up to 16 parameters. @@ -55,6 +65,12 @@ reverseChanged.emit(false); ``` /// +/// tab | Scala +```scala +reverseChanged.emit(false) +``` +/// + ## Callables You can use a classic Callable referencing a Godot Object and one of its method or conveniently use to avoid to creating a separate function. @@ -80,6 +96,19 @@ You can use a classic Callable referencing a Godot Object and one of its method ``` /// +/// tab | Scala +```scala + val regularCallable = Callable.create(this, "myMethod".toGodotName()) + val customCallable = LambdaCallable1.create( + classOf[Void], + classOf[String], + (string: String) => { + println(string); + } + ) +``` +/// + ### Signals and Callables together Kotlin and Java already have ways to pass functions around as References. @@ -143,6 +172,33 @@ public class AnotherObject extends Object { ``` /// +/// tab | Scala +```scala +@RegisterClass +class SomeObject extends Object { + @RegisterFunction + def onReverseChanged(boolean reverse): Unit = { + println(s"Value of reverse has changed: $reverse") + } +} + +@RegisterClass +class AnotherObject extends Object { + @RegisterSignal("reverse") + val mySignal: Signal1[Boolean] = Signal1.create(this, "mySignal") + + private val targetObject = new SomeObject() + + public AnotherObject() { + // Here are 3 different ways to connect a signal to a registered method. The method reference syntax is not implemented for Scala. + mySignal.connect(Callable.create(targetObject, StringNames.toGodotName("onReverseChanged"))) // The recommanded way. + mySignal.connect(Callable.create(targetObject, "on_reverse_changed")) // Unsafe, try to use snake_case in your code as least as possible. + connect("my_signal", Callable.create(targetObject, "on_reverse_changed")) // Really, don't do that. + } +} +``` +/// + You can also use Kotlin lambdas directly to subscribe to signals ```kt diff --git a/harness/tests/FreeformRegistrationFileTestClass.gdj b/harness/tests/FreeformRegistrationFileTestClass.gdj index 41bc437b2d..0f771bd660 100644 --- a/harness/tests/FreeformRegistrationFileTestClass.gdj +++ b/harness/tests/FreeformRegistrationFileTestClass.gdj @@ -3,15 +3,13 @@ registeredName = FreeformRegistrationFileTestClass fqName = godot.tests.freeform.FreeformRegistrationFileTestClass -relativeSourcePath = src/main/kotlin/godot/tests/freeform/FreeformRegistrationFileTestClass.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/build.gradle.kts b/harness/tests/build.gradle.kts index 4d05e67019..603ca77fc5 100644 --- a/harness/tests/build.gradle.kts +++ b/harness/tests/build.gradle.kts @@ -37,6 +37,7 @@ godot { // uncomment to test ios // isIOSExportEnabled.set(true) + } dependencies { diff --git a/harness/tests/project.godot b/harness/tests/project.godot index d1ee3dfe5e..ea59d76444 100644 --- a/harness/tests/project.godot +++ b/harness/tests/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="Godot Kotlin Tests" run/main_scene="res://test/GutTests.tscn" -config/features=PackedStringArray("4.4") +config/features=PackedStringArray("4.3") config/icon="res://icon.png" [debug] diff --git a/harness/tests/scala_test_scene.tscn b/harness/tests/scala_test_scene.tscn new file mode 100644 index 0000000000..437f4cb244 --- /dev/null +++ b/harness/tests/scala_test_scene.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://c27pq6lr7xver"] + +[ext_resource type="Script" path="res://scripts/godot/tests/ScalaTestClass.gdj" id="1_ls5ji"] + +[node name="ScalaTestScene" type="Node3D"] +script = ExtResource("1_ls5ji") + +[node name="Button" type="Button" parent="."] +offset_right = 8.0 +offset_bottom = 8.0 diff --git a/harness/tests/scripts/CopyModificationCheckTestClass.gdj b/harness/tests/scripts/CopyModificationCheckTestClass.gdj index d6c897fd37..0e75769928 100644 --- a/harness/tests/scripts/CopyModificationCheckTestClass.gdj +++ b/harness/tests/scripts/CopyModificationCheckTestClass.gdj @@ -3,7 +3,6 @@ registeredName = CopyModificationCheckTestClass fqName = CopyModificationCheckTestClass -relativeSourcePath = otherSourceDir/CopyModificationCheckTestClass.kt baseType = Node3D supertypes = [ godot.api.Node3D, @@ -11,8 +10,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/CoreTypePropertyChecks.gdj b/harness/tests/scripts/CoreTypePropertyChecks.gdj index 9cb2c5b8bc..7b53133ff9 100644 --- a/harness/tests/scripts/CoreTypePropertyChecks.gdj +++ b/harness/tests/scripts/CoreTypePropertyChecks.gdj @@ -3,15 +3,13 @@ registeredName = CoreTypePropertyChecks fqName = CoreTypePropertyChecks -relativeSourcePath = otherSourceDir/CoreTypePropertyChecks.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/ScriptInOtherSourceDir.gdj b/harness/tests/scripts/ScriptInOtherSourceDir.gdj index ad704e9afc..c267ac2a94 100644 --- a/harness/tests/scripts/ScriptInOtherSourceDir.gdj +++ b/harness/tests/scripts/ScriptInOtherSourceDir.gdj @@ -3,15 +3,13 @@ registeredName = ScriptInOtherSourceDir fqName = ScriptInOtherSourceDir -relativeSourcePath = otherSourceDir/ScriptInOtherSourceDir.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/dependencies/flattened-library-tests/FLSimple.gdj b/harness/tests/scripts/dependencies/flattened-library-tests/FLSimple.gdj index 601b71a89d..c3c7ade415 100644 --- a/harness/tests/scripts/dependencies/flattened-library-tests/FLSimple.gdj +++ b/harness/tests/scripts/dependencies/flattened-library-tests/FLSimple.gdj @@ -3,7 +3,6 @@ registeredName = FLSimple fqName = godot.tests.library.flattened.Simple -relativeSourcePath = src/main/kotlin/godot/tests/library/flattened/Simple.kt baseType = Node3D supertypes = [ godot.api.Node3D, @@ -11,8 +10,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimple.gdj b/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimple.gdj index f49fed082c..49b7e4c4e7 100644 --- a/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimple.gdj +++ b/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimple.gdj @@ -3,7 +3,6 @@ registeredName = godot_tests_library_fqname_FQNLSimple fqName = godot.tests.library.fqname.Simple -relativeSourcePath = src/main/kotlin/godot/tests/library/fqname/Simple.kt baseType = Node3D supertypes = [ godot.api.Node3D, @@ -11,8 +10,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimpleChild.gdj b/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimpleChild.gdj index 707ca5a8e1..1c0abd4ca7 100644 --- a/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimpleChild.gdj +++ b/harness/tests/scripts/dependencies/fqname-library-tests/godot/tests/library/fqname/godot_tests_library_fqname_FQNLSimpleChild.gdj @@ -3,7 +3,6 @@ registeredName = godot_tests_library_fqname_FQNLSimpleChild fqName = godot.tests.library.fqname.SimpleChild -relativeSourcePath = src/main/kotlin/godot/tests/library/fqname/SimpleChild.kt baseType = Node3D supertypes = [ godot.tests.library.fqname.Simple, @@ -12,8 +11,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/dependencies/hierarchical-library-tests/godot/tests/library/hierarchical/HLSimple.gdj b/harness/tests/scripts/dependencies/hierarchical-library-tests/godot/tests/library/hierarchical/HLSimple.gdj index 51f7b19067..63652ecf1c 100644 --- a/harness/tests/scripts/dependencies/hierarchical-library-tests/godot/tests/library/hierarchical/HLSimple.gdj +++ b/harness/tests/scripts/dependencies/hierarchical-library-tests/godot/tests/library/hierarchical/HLSimple.gdj @@ -3,7 +3,6 @@ registeredName = HLSimple fqName = godot.tests.library.hierarchical.Simple -relativeSourcePath = src/main/kotlin/godot/tests/library/hierarchical/Simple.kt baseType = Node3D supertypes = [ godot.api.Node3D, @@ -11,8 +10,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/CoreTypesIdentityTest.gdj b/harness/tests/scripts/godot/tests/CoreTypesIdentityTest.gdj index c542b7be20..cbf4538a94 100644 --- a/harness/tests/scripts/godot/tests/CoreTypesIdentityTest.gdj +++ b/harness/tests/scripts/godot/tests/CoreTypesIdentityTest.gdj @@ -3,15 +3,13 @@ registeredName = CoreTypesIdentityTest fqName = godot.tests.CoreTypesIdentityTest -relativeSourcePath = src/main/kotlin/godot/tests/CoreTypesIdentityTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/FuncRefTest.gdj b/harness/tests/scripts/godot/tests/FuncRefTest.gdj index a328522126..bc69b09e5e 100644 --- a/harness/tests/scripts/godot/tests/FuncRefTest.gdj +++ b/harness/tests/scripts/godot/tests/FuncRefTest.gdj @@ -3,15 +3,13 @@ registeredName = FuncRefTest fqName = godot.tests.FuncRefTest -relativeSourcePath = src/main/kotlin/godot/tests/FuncRefTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ test diff --git a/harness/tests/scripts/godot/tests/args/ConstructorArgSizeTest.gdj b/harness/tests/scripts/godot/tests/HelloFromScala.gdj similarity index 70% rename from harness/tests/scripts/godot/tests/args/ConstructorArgSizeTest.gdj rename to harness/tests/scripts/godot/tests/HelloFromScala.gdj index c118e14cfd..397a32618c 100644 --- a/harness/tests/scripts/godot/tests/args/ConstructorArgSizeTest.gdj +++ b/harness/tests/scripts/godot/tests/HelloFromScala.gdj @@ -1,24 +1,23 @@ // THIS FILE IS GENERATED! DO NOT EDIT OR DELETE IT. EDIT OR DELETE THE ASSOCIATED SOURCE CODE FILE INSTEAD // Note: You can however freely move this file inside your godot project if you want. Keep in mind however, that if you rename the originating source code file, this file will be deleted and regenerated as a new file instead of being updated! Other modifications to the source file however, will result in this file being updated. -registeredName = ConstructorArgSizeTest -fqName = godot.tests.args.ConstructorArgSizeTest -relativeSourcePath = src/main/kotlin/godot/tests/args/ConstructorArgSizeTest.kt +registeredName = HelloFromScala +fqName = godot.tests.HelloFromScala baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ - + my_signal ] properties = [ - + my_int ] functions = [ - get_received_constructor_args + _ready, + say_hello ] \ No newline at end of file diff --git a/harness/tests/scripts/godot/tests/Invocation.gdj b/harness/tests/scripts/godot/tests/Invocation.gdj index fdb7977afc..cd9f00731c 100644 --- a/harness/tests/scripts/godot/tests/Invocation.gdj +++ b/harness/tests/scripts/godot/tests/Invocation.gdj @@ -3,16 +3,14 @@ registeredName = Invocation fqName = godot.tests.Invocation -relativeSourcePath = src/main/kotlin/godot/tests/Invocation.kt baseType = Node3D supertypes = [ godot.api.Node3D, - godot.api.Node, - godot.api.Object, - godot.core.KtObject, - godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.api.Node, + godot.api.Object, + godot.core.KtObject, + godot.common.interop.NativeWrapper, + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/JavaTestClass.gdj b/harness/tests/scripts/godot/tests/JavaTestClass.gdj index 655a8a716a..2c802fcdef 100644 --- a/harness/tests/scripts/godot/tests/JavaTestClass.gdj +++ b/harness/tests/scripts/godot/tests/JavaTestClass.gdj @@ -3,15 +3,13 @@ registeredName = JavaTestClass fqName = godot.tests.JavaTestClass -relativeSourcePath = src/main/java/godot/tests/JavaTestClass.java baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ test_signal, @@ -32,8 +30,8 @@ properties = [ dictionary ] functions = [ - _ready, - greeting, + greeting, + _ready, connect_and_trigger_signal, signal_callback ] \ No newline at end of file diff --git a/harness/tests/scripts/godot/tests/LambdaCallableTest.gdj b/harness/tests/scripts/godot/tests/LambdaCallableTest.gdj index b1c294fcbe..143f843ce7 100644 --- a/harness/tests/scripts/godot/tests/LambdaCallableTest.gdj +++ b/harness/tests/scripts/godot/tests/LambdaCallableTest.gdj @@ -3,15 +3,13 @@ registeredName = LambdaCallableTest fqName = godot.tests.LambdaCallableTest -relativeSourcePath = src/main/kotlin/godot/tests/LambdaCallableTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ signal_no_param, diff --git a/harness/tests/scripts/godot/tests/MultiArgsConstructorTest.gdj b/harness/tests/scripts/godot/tests/ScalaTestClass.gdj similarity index 61% rename from harness/tests/scripts/godot/tests/MultiArgsConstructorTest.gdj rename to harness/tests/scripts/godot/tests/ScalaTestClass.gdj index f13ffb2c4e..4dc37e33a7 100644 --- a/harness/tests/scripts/godot/tests/MultiArgsConstructorTest.gdj +++ b/harness/tests/scripts/godot/tests/ScalaTestClass.gdj @@ -1,26 +1,36 @@ // THIS FILE IS GENERATED! DO NOT EDIT OR DELETE IT. EDIT OR DELETE THE ASSOCIATED SOURCE CODE FILE INSTEAD // Note: You can however freely move this file inside your godot project if you want. Keep in mind however, that if you rename the originating source code file, this file will be deleted and regenerated as a new file instead of being updated! Other modifications to the source file however, will result in this file being updated. -registeredName = MultiArgsConstructorTest -fqName = godot.tests.MultiArgsConstructorTest -relativeSourcePath = src/main/kotlin/godot/tests/MultiArgsConstructorTest.kt +registeredName = ScalaTestClass +fqName = godot.tests.ScalaTestClass baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ - + test_signal, + test_signal2 ] properties = [ - default_constructor_has_been_called, - one_arg_constructor_has_been_called, - three_args_constructor_has_been_called + exported_int, + exported_long, + exported_float, + exported_double, + exported_boolean, + exported_string, + exported_byte, + exported_button, + signal_emitted, + variant_array, + dictionary ] functions = [ - + greeting, + _ready, + connect_and_trigger_signal, + signal_callback ] \ No newline at end of file diff --git a/harness/tests/scripts/godot/tests/args/FunctionArgSizeTest.gdj b/harness/tests/scripts/godot/tests/args/FunctionArgSizeTest.gdj index 488e1770c2..e362f7ddb1 100644 --- a/harness/tests/scripts/godot/tests/args/FunctionArgSizeTest.gdj +++ b/harness/tests/scripts/godot/tests/args/FunctionArgSizeTest.gdj @@ -3,15 +3,13 @@ registeredName = FunctionArgSizeTest fqName = godot.tests.args.FunctionArgSizeTest -relativeSourcePath = src/main/kotlin/godot/tests/args/FunctionArgSizeTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/binding/BindingA.gdj b/harness/tests/scripts/godot/tests/binding/BindingA.gdj index 25bc4cc4e9..ca35ead0f1 100644 --- a/harness/tests/scripts/godot/tests/binding/BindingA.gdj +++ b/harness/tests/scripts/godot/tests/binding/BindingA.gdj @@ -3,15 +3,13 @@ registeredName = BindingA fqName = godot.tests.binding.BindingA -relativeSourcePath = src/main/kotlin/godot/tests/binding/BindingA.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/binding/BindingB.gdj b/harness/tests/scripts/godot/tests/binding/BindingB.gdj index 6ed3c744d7..aa71d9aff9 100644 --- a/harness/tests/scripts/godot/tests/binding/BindingB.gdj +++ b/harness/tests/scripts/godot/tests/binding/BindingB.gdj @@ -3,15 +3,13 @@ registeredName = BindingB fqName = godot.tests.binding.BindingB -relativeSourcePath = src/main/kotlin/godot/tests/binding/BindingB.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/binding/BindingTest.gdj b/harness/tests/scripts/godot/tests/binding/BindingTest.gdj index eb5d71ea0e..f7685922e1 100644 --- a/harness/tests/scripts/godot/tests/binding/BindingTest.gdj +++ b/harness/tests/scripts/godot/tests/binding/BindingTest.gdj @@ -3,14 +3,12 @@ registeredName = BindingTest fqName = godot.tests.binding.BindingTest -relativeSourcePath = src/main/kotlin/godot/tests/binding/BindingTest.kt baseType = Object supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/callable/CallableMethodBindTest.gdj b/harness/tests/scripts/godot/tests/callable/CallableMethodBindTest.gdj index bbfb0c4b81..ffc33e808f 100644 --- a/harness/tests/scripts/godot/tests/callable/CallableMethodBindTest.gdj +++ b/harness/tests/scripts/godot/tests/callable/CallableMethodBindTest.gdj @@ -3,15 +3,13 @@ registeredName = CallableMethodBindTest fqName = godot.tests.callable.CallableMethodBindTest -relativeSourcePath = src/main/kotlin/godot/tests/callable/CallableMethodBindTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/constructor/ConstructorRegistrationTest.gdj b/harness/tests/scripts/godot/tests/constructor/ConstructorRegistrationTest.gdj index 11e4ecda6c..25410aea44 100644 --- a/harness/tests/scripts/godot/tests/constructor/ConstructorRegistrationTest.gdj +++ b/harness/tests/scripts/godot/tests/constructor/ConstructorRegistrationTest.gdj @@ -3,15 +3,13 @@ registeredName = ConstructorRegistrationTest fqName = godot.tests.constructor.ConstructorRegistrationTest -relativeSourcePath = src/main/kotlin/godot/tests/constructor/ConstructorRegistrationTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/coretypes/BasisTest.gdj b/harness/tests/scripts/godot/tests/coretypes/BasisTest.gdj index 7552d5d59f..8b4b79f234 100644 --- a/harness/tests/scripts/godot/tests/coretypes/BasisTest.gdj +++ b/harness/tests/scripts/godot/tests/coretypes/BasisTest.gdj @@ -3,15 +3,13 @@ registeredName = BasisTest fqName = godot.tests.coretypes.BasisTest -relativeSourcePath = src/main/kotlin/godot/tests/coretypes/BasisTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/coretypes/StringTest.gdj b/harness/tests/scripts/godot/tests/coretypes/StringTest.gdj index ce8480adba..d3f5d0be34 100644 --- a/harness/tests/scripts/godot/tests/coretypes/StringTest.gdj +++ b/harness/tests/scripts/godot/tests/coretypes/StringTest.gdj @@ -3,15 +3,13 @@ registeredName = StringTest fqName = godot.tests.coretypes.StringTest -relativeSourcePath = src/main/kotlin/godot/tests/coretypes/StringTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/coretypes/Vector3Test.gdj b/harness/tests/scripts/godot/tests/coretypes/Vector3Test.gdj index 270dc59c20..f7e2c7e91c 100644 --- a/harness/tests/scripts/godot/tests/coretypes/Vector3Test.gdj +++ b/harness/tests/scripts/godot/tests/coretypes/Vector3Test.gdj @@ -3,15 +3,13 @@ registeredName = Vector3Test fqName = godot.tests.coretypes.Vector3Test -relativeSourcePath = src/main/kotlin/godot/tests/coretypes/Vector3Test.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/coroutine/CoroutineTest.gdj b/harness/tests/scripts/godot/tests/coroutine/CoroutineTest.gdj index cc44d6835f..624ab5be37 100644 --- a/harness/tests/scripts/godot/tests/coroutine/CoroutineTest.gdj +++ b/harness/tests/scripts/godot/tests/coroutine/CoroutineTest.gdj @@ -3,14 +3,12 @@ registeredName = CoroutineTest fqName = godot.tests.coroutine.CoroutineTest -relativeSourcePath = src/main/kotlin/godot/tests/coroutine/CoroutineTest.kt baseType = Object supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ signal_without_parameter, diff --git a/harness/tests/scripts/godot/tests/exception/ExceptionTest.gdj b/harness/tests/scripts/godot/tests/exception/ExceptionTest.gdj index 9d393f0e33..cf5ca41388 100644 --- a/harness/tests/scripts/godot/tests/exception/ExceptionTest.gdj +++ b/harness/tests/scripts/godot/tests/exception/ExceptionTest.gdj @@ -3,15 +3,13 @@ registeredName = ExceptionTest fqName = godot.tests.exception.ExceptionTest -relativeSourcePath = src/main/kotlin/godot/tests/exception/ExceptionTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceChild.gdj b/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceChild.gdj index 38aea7bf2b..89b530c1a2 100644 --- a/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceChild.gdj +++ b/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceChild.gdj @@ -3,7 +3,6 @@ registeredName = AbstractClassInheritanceChild fqName = godot.tests.inheritance.AbstractClassInheritanceChild -relativeSourcePath = src/main/kotlin/godot/tests/inheritance/AbstractClassInheritanceChild.kt baseType = Node supertypes = [ godot.tests.inheritance.AbstractClassInheritanceParent, @@ -11,8 +10,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ test_overridden, diff --git a/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceEmptyChild.gdj b/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceEmptyChild.gdj index 90b8c2226c..fc9e06f520 100644 --- a/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceEmptyChild.gdj +++ b/harness/tests/scripts/godot/tests/inheritance/AbstractClassInheritanceEmptyChild.gdj @@ -3,7 +3,6 @@ registeredName = AbstractClassInheritanceEmptyChild fqName = godot.tests.inheritance.AbstractClassInheritanceEmptyChild -relativeSourcePath = src/main/kotlin/godot/tests/inheritance/AbstractClassInheritanceEmptyChild.kt baseType = CharacterBody3D supertypes = [ godot.tests.inheritance.AbstractClassInheritanceEmptyParent, @@ -15,8 +14,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceChild.gdj b/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceChild.gdj index 1553c44b5d..544d9adc26 100644 --- a/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceChild.gdj +++ b/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceChild.gdj @@ -3,7 +3,6 @@ registeredName = ClassInheritanceChild fqName = godot.tests.inheritance.ClassInheritanceChild -relativeSourcePath = src/main/kotlin/godot/tests/inheritance/ClassInheritanceChild.kt baseType = Node supertypes = [ godot.tests.inheritance.ClassInheritanceParent, @@ -11,8 +10,7 @@ supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ test_overridden, @@ -28,5 +26,6 @@ properties = [ ] functions = [ open_function, + _notification, closed_function ] \ No newline at end of file diff --git a/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceParent.gdj b/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceParent.gdj index c57e541b0d..06a1af97ac 100644 --- a/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceParent.gdj +++ b/harness/tests/scripts/godot/tests/inheritance/ClassInheritanceParent.gdj @@ -3,15 +3,13 @@ registeredName = ClassInheritanceParent fqName = godot.tests.inheritance.ClassInheritanceParent -relativeSourcePath = src/main/kotlin/godot/tests/inheritance/ClassInheritanceParent.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ test_not_overridden, @@ -26,5 +24,6 @@ properties = [ ] functions = [ closed_function, - open_function + open_function, + _notification ] \ No newline at end of file diff --git a/harness/tests/scripts/godot/tests/instance/NodeInstance.gdj b/harness/tests/scripts/godot/tests/instance/NodeInstance.gdj index ffd9861be7..76c1e5340d 100644 --- a/harness/tests/scripts/godot/tests/instance/NodeInstance.gdj +++ b/harness/tests/scripts/godot/tests/instance/NodeInstance.gdj @@ -3,15 +3,13 @@ registeredName = NodeInstance fqName = godot.tests.instance.NodeInstance -relativeSourcePath = src/main/kotlin/godot/tests/instance/NodeInstance.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/instance/ObjectInstance.gdj b/harness/tests/scripts/godot/tests/instance/ObjectInstance.gdj index 3102a82b80..09e4d309b2 100644 --- a/harness/tests/scripts/godot/tests/instance/ObjectInstance.gdj +++ b/harness/tests/scripts/godot/tests/instance/ObjectInstance.gdj @@ -3,14 +3,12 @@ registeredName = ObjectInstance fqName = godot.tests.instance.ObjectInstance -relativeSourcePath = src/main/kotlin/godot/tests/instance/ObjectInstance.kt baseType = Object supertypes = [ godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/instance/RefCountedInstance.gdj b/harness/tests/scripts/godot/tests/instance/RefCountedInstance.gdj index 1552a802e3..f1dbdd5887 100644 --- a/harness/tests/scripts/godot/tests/instance/RefCountedInstance.gdj +++ b/harness/tests/scripts/godot/tests/instance/RefCountedInstance.gdj @@ -3,15 +3,13 @@ registeredName = RefCountedInstance fqName = godot.tests.instance.RefCountedInstance -relativeSourcePath = src/main/kotlin/godot/tests/instance/RefCountedInstance.kt baseType = RefCounted supertypes = [ godot.api.RefCounted, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/packedarray/PackedArrayTest.gdj b/harness/tests/scripts/godot/tests/packedarray/PackedArrayTest.gdj index 07fa993352..4a28bf5fdd 100644 --- a/harness/tests/scripts/godot/tests/packedarray/PackedArrayTest.gdj +++ b/harness/tests/scripts/godot/tests/packedarray/PackedArrayTest.gdj @@ -3,15 +3,13 @@ registeredName = PackedArrayTest fqName = godot.tests.packedarray.PackedArrayTest -relativeSourcePath = src/main/kotlin/godot/tests/packedarray/PackedArrayTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/reflection/BaseReflectionTest.gdj b/harness/tests/scripts/godot/tests/reflection/BaseReflectionTest.gdj index 7fcd9766a7..72ddf0acff 100644 --- a/harness/tests/scripts/godot/tests/reflection/BaseReflectionTest.gdj +++ b/harness/tests/scripts/godot/tests/reflection/BaseReflectionTest.gdj @@ -3,15 +3,13 @@ registeredName = BaseReflectionTest fqName = godot.tests.reflection.BaseReflectionTest -relativeSourcePath = src/main/kotlin/godot/tests/reflection/BaseReflectionTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/reflection/GH571_ReflectionTest.gdj b/harness/tests/scripts/godot/tests/reflection/GH571_ReflectionTest.gdj index e42122d8b5..f0f2b99274 100644 --- a/harness/tests/scripts/godot/tests/reflection/GH571_ReflectionTest.gdj +++ b/harness/tests/scripts/godot/tests/reflection/GH571_ReflectionTest.gdj @@ -3,15 +3,13 @@ registeredName = GH571_ReflectionTest fqName = godot.tests.reflection.GH571_ReflectionTest -relativeSourcePath = src/main/kotlin/godot/tests/reflection/GH571_ReflectionTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/registration/TypedVariantArrayRegistration.gdj b/harness/tests/scripts/godot/tests/registration/TypedVariantArrayRegistration.gdj index 5cd0748bed..c251e7339c 100644 --- a/harness/tests/scripts/godot/tests/registration/TypedVariantArrayRegistration.gdj +++ b/harness/tests/scripts/godot/tests/registration/TypedVariantArrayRegistration.gdj @@ -3,15 +3,13 @@ registeredName = TypedVariantArrayRegistration fqName = godot.tests.registration.TypedVariantArrayRegistration -relativeSourcePath = src/main/kotlin/godot/tests/registration/TypedVariantArrayRegistration.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/rpctests/RPCTests.gdj b/harness/tests/scripts/godot/tests/rpctests/RPCTests.gdj index 056fa05b76..5d38406a2a 100644 --- a/harness/tests/scripts/godot/tests/rpctests/RPCTests.gdj +++ b/harness/tests/scripts/godot/tests/rpctests/RPCTests.gdj @@ -3,15 +3,13 @@ registeredName = RPCTests fqName = godot.tests.rpctests.RpcTests -relativeSourcePath = src/main/kotlin/godot/tests/rpctests/RpcTests.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/signal/SignalTest.gdj b/harness/tests/scripts/godot/tests/signal/SignalTest.gdj index ed1f855a8b..002347815b 100644 --- a/harness/tests/scripts/godot/tests/signal/SignalTest.gdj +++ b/harness/tests/scripts/godot/tests/signal/SignalTest.gdj @@ -3,15 +3,13 @@ registeredName = SignalTest fqName = godot.tests.signal.SignalTest -relativeSourcePath = src/main/kotlin/godot/tests/signal/SignalTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ no_param_signal_delegate, diff --git a/harness/tests/scripts/godot/tests/static/CallStaticTest.gdj b/harness/tests/scripts/godot/tests/static/CallStaticTest.gdj index 9b407b54f4..05ec892607 100644 --- a/harness/tests/scripts/godot/tests/static/CallStaticTest.gdj +++ b/harness/tests/scripts/godot/tests/static/CallStaticTest.gdj @@ -3,15 +3,13 @@ registeredName = CallStaticTest fqName = godot.tests.static.CallStaticTest -relativeSourcePath = src/main/kotlin/godot/tests/static/CallStaticTest.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/scripts/godot/tests/subpackage/OtherScript.gdj b/harness/tests/scripts/godot/tests/subpackage/OtherScript.gdj index 3d90598744..5417b313e0 100644 --- a/harness/tests/scripts/godot/tests/subpackage/OtherScript.gdj +++ b/harness/tests/scripts/godot/tests/subpackage/OtherScript.gdj @@ -3,15 +3,13 @@ registeredName = OtherScript fqName = godot.tests.subpackage.OtherScript -relativeSourcePath = src/main/kotlin/godot/tests/subpackage/OtherScript.kt baseType = Node supertypes = [ godot.api.Node, godot.api.Object, godot.core.KtObject, godot.common.interop.NativeWrapper, - godot.common.interop.NativePointer, - kotlin.Any + godot.common.interop.NativePointer ] signals = [ diff --git a/harness/tests/src/main/kotlin/godot/tests/MultiArgsConstructorTest.kt b/harness/tests/src/main/kotlin/godot/tests/MultiArgsConstructorTest.kt deleted file mode 100644 index 4a84231b77..0000000000 --- a/harness/tests/src/main/kotlin/godot/tests/MultiArgsConstructorTest.kt +++ /dev/null @@ -1,69 +0,0 @@ -package godot.tests - -import godot.api.NavigationMesh -import godot.api.Node -import godot.api.Object -import godot.annotation.RegisterClass -import godot.annotation.RegisterConstructor -import godot.annotation.RegisterProperty -import godot.core.VariantArray - -@RegisterClass -class MultiArgsConstructorTest : Node { - - @RegisterProperty - var defaultConstructorHasBeenCalled = false - - @RegisterProperty - var oneArgConstructorHasBeenCalled = false - - @RegisterProperty - var threeArgsConstructorHasBeenCalled = false - - @RegisterConstructor - constructor() : super() { - defaultConstructorHasBeenCalled = true - } - - @RegisterConstructor - constructor(i: Int) : this() { - oneArgConstructorHasBeenCalled = true - } - - @RegisterConstructor - constructor(i: Int, s: String) : this() { - threeArgsConstructorHasBeenCalled = true - } - - @RegisterConstructor - constructor(i: Int, s: String, obj: Object?) : this() - - @RegisterConstructor - constructor(i: Int, s: String, obj: Object?, variantArray: VariantArray) : this() - - @RegisterConstructor - constructor(i: Int, s: String, obj: Object?, variantArray: VariantArray?, navMesh: NavigationMesh) : this() - - constructor( - iShouldNOTFailAsImNotRegistered: String, - s: Int, - obj: Object?, - variantArray: VariantArray?, - navMesh: NavigationMesh - ) : this() - - constructor( - i: Int, - s: String, - obj: Object?, - variantArray: VariantArray?, - navMesh: NavigationMesh, - tooManyArgsShouldWorkIfNotRegistered: String - ) : this() - - // constructors which should fail: -// @RegisterConstructor -// constructor(iShouldFailAsOverloadingIsNotSupported: String, s: String, obj: Object?, variantArray: VariantArray?, navMesh: NavigationMesh) : this() -// @RegisterConstructor -// constructor(i: Int, s: Int, obj: Object?, variantArray: VariantArray?, navMesh: NavigationMesh, tooManyArgs: String) : this() -} diff --git a/harness/tests/src/main/kotlin/godot/tests/args/ConstructorArgSizeTest.kt b/harness/tests/src/main/kotlin/godot/tests/args/ConstructorArgSizeTest.kt deleted file mode 100644 index f60e6e3106..0000000000 --- a/harness/tests/src/main/kotlin/godot/tests/args/ConstructorArgSizeTest.kt +++ /dev/null @@ -1,146 +0,0 @@ -package godot.tests.args - -import godot.api.Node -import godot.api.Resource -import godot.annotation.RegisterClass -import godot.annotation.RegisterConstructor -import godot.annotation.RegisterFunction -import godot.core.Dictionary -import godot.core.VariantArray -import godot.core.variantArrayOf - -@RegisterClass -class ConstructorArgSizeTest(): Node() { - private val receivedConstructorArgs: VariantArray = variantArrayOf() - - @RegisterConstructor - constructor( - p1: String, - ): this() { - receivedConstructorArgs.add(p1) - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - } - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - p3: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - add(p3) - } - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - p3: String, - p4: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - add(p3) - add(p4) - } - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - p3: String, - p4: String, - p5: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - add(p3) - add(p4) - add(p5) - } - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - p3: String, - p4: String, - p5: String, - p6: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - add(p3) - add(p4) - add(p5) - add(p6) - } - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - p3: String, - p4: String, - p5: String, - p6: String, - p7: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - add(p3) - add(p4) - add(p5) - add(p6) - add(p7) - } - } - - @RegisterConstructor - constructor( - p1: String, - p2: String, - p3: String, - p4: String, - p5: String, - p6: String, - p7: String, - p8: String, - ): this() { - receivedConstructorArgs.apply { - add(p1) - add(p2) - add(p3) - add(p4) - add(p5) - add(p6) - add(p7) - add(p8) - } - } - - @RegisterFunction - fun getReceivedConstructorArgs(): VariantArray { - return receivedConstructorArgs - } -} diff --git a/harness/tests/src/main/kotlin/godot/tests/constructor/ConstructorRegistrationTest.kt b/harness/tests/src/main/kotlin/godot/tests/constructor/ConstructorRegistrationTest.kt index 1af51e9d3b..2219bf4871 100644 --- a/harness/tests/src/main/kotlin/godot/tests/constructor/ConstructorRegistrationTest.kt +++ b/harness/tests/src/main/kotlin/godot/tests/constructor/ConstructorRegistrationTest.kt @@ -2,13 +2,6 @@ package godot.tests.constructor import godot.api.Node import godot.annotation.RegisterClass -import godot.annotation.RegisterConstructor -import godot.core.Dictionary -import godot.core.VariantArray @RegisterClass -class ConstructorRegistrationTest(): Node() { - - @RegisterConstructor - constructor(param1: Dictionary, param2: VariantArray): this() -} +class ConstructorRegistrationTest(): Node() diff --git a/harness/tests/src/main/scala/godot/tests/HelloFromScala.scala b/harness/tests/src/main/scala/godot/tests/HelloFromScala.scala new file mode 100644 index 0000000000..910ce6a5f8 --- /dev/null +++ b/harness/tests/src/main/scala/godot/tests/HelloFromScala.scala @@ -0,0 +1,25 @@ +package godot.tests + +import godot.annotation.{RegisterClass, RegisterFunction, RegisterProperty, RegisterSignal} +import godot.api.Node +import godot.core.Signal2 + +@RegisterClass +class HelloFromScala extends Node { + + @RegisterSignal(parameters = Array("param1", "param2")) + val mySignal: Signal2[String, String] = Signal2.create(this, "test_signal_2") + + @RegisterProperty + var myInt: Int = 0 + + @RegisterFunction + override def _ready(): Unit = { + println("Hello from scala") + } + + @RegisterFunction + def sayHello(): Unit = { + println("hello") + } +} diff --git a/harness/tests/src/main/scala/godot/tests/ScalaTestClass.scala b/harness/tests/src/main/scala/godot/tests/ScalaTestClass.scala new file mode 100644 index 0000000000..d35c8228ad --- /dev/null +++ b/harness/tests/src/main/scala/godot/tests/ScalaTestClass.scala @@ -0,0 +1,97 @@ +package godot.tests + +import godot.annotation.{Export, RegisterClass, RegisterFunction, RegisterProperty, RegisterSignal} +import godot.api.Object.ConnectFlags +import godot.api.{Button, Node, RenderingServer} +import godot.core.{Callable, Dictionary, GodotNotification, LambdaCallable, LambdaCallable0, NativeCallable, Signal0, Signal2, StringNames, VariantArray} +import org.jetbrains.annotations.NotNull + +@RegisterClass +class ScalaTestClass extends Node { + @RegisterSignal + val testSignal: Signal0 = Signal0.create(this, "test_signal") + + @RegisterSignal + val testSignal2: Signal2[String, String] = Signal2.create(this, "test_signal_2") + + @Export + @RegisterProperty + var exportedInt: Int = 1 + + @Export + @RegisterProperty + var exportedLong: Long = 1L + + @Export + @RegisterProperty + var exportedFloat: Float = 1f + + @Export + @RegisterProperty + var exportedDouble: Double = 1.0 + + @Export + @RegisterProperty + var exportedBoolean: Boolean = true + + @Export + @RegisterProperty + var exportedString: String = "blubb" + + @Export + @RegisterProperty + var exportedByte: Byte = 1 + + @Export + @RegisterProperty + var exportedButton: Button = null + + @RegisterFunction + def greeting: String = { + return "Hello from scala" + } + + @RegisterProperty + var signalEmitted: Boolean = false + + @RegisterProperty + var variantArray: VariantArray[Integer] = new VariantArray[Integer](classOf[Integer]) + + @RegisterProperty + var dictionary: Dictionary[Float, String] = new Dictionary[Float, String](classOf[Float], classOf[String]) + + var lambdaCallable: LambdaCallable[Void] = LambdaCallable0.create(classOf[Void], () => { + System.out.println("Hello from Callable") + null + + }) + + var methodCallable: NativeCallable = Callable.create(this, StringNames.asStringName("DummyName")) + + @RegisterFunction + override def _ready(): Unit = { + // Check if Singletons have the correct syntax, without Single.INSTANCE + val constant = RenderingServer.NO_INDEX_ARRAY + val signal = RenderingServer.getFramePreDraw + RenderingServer.getDefaultClearColor + } + + @RegisterFunction + def connectAndTriggerSignal(): Unit = { + connect(StringNames.asStringName("test_signal"), new NativeCallable(this, StringNames.asStringName("signal_callback")), ConnectFlags.ONE_SHOT.getId.toInt) + emitSignal(StringNames.asStringName("test_signal")) + } + + @NotNull + override def _notification: GodotNotification = { + godotNotification(this, (myself: ScalaTestClass, notification: Integer) => { + System.out.println(notification) + null + }) + } + + @RegisterFunction + def signalCallback(): Unit = { + signalEmitted = true + } +} diff --git a/harness/tests/test/unit/test_call_scala_class.gd b/harness/tests/test/unit/test_call_scala_class.gd new file mode 100644 index 0000000000..d578daa155 --- /dev/null +++ b/harness/tests/test/unit/test_call_scala_class.gd @@ -0,0 +1,29 @@ +extends "res://addons/gut/test.gd" + + +func test_call_function(): + var scala_scene = load("res://scala_test_scene.tscn").instantiate() + var greeting = scala_scene.greeting() + assert_eq(greeting, "Hello from scala", "Greeting from scala class should match") + scala_scene.free() + + +func test_field_access(): + var scala_scene = load("res://scala_test_scene.tscn").instantiate() + assert_eq(scala_scene.exported_int, 1, "Field from scala should match") + scala_scene.free() + + +func test_field_set(): + var scala_scene = load("res://scala_test_scene.tscn").instantiate() + scala_scene.exported_int = 2 + assert_eq(scala_scene.exported_int, 2, "Field from scala should match") + scala_scene.free() + + +func test_signal(): + var scala_scene: ScalaTestClass = load("res://scala_test_scene.tscn").instantiate() + get_tree().root.add_child(scala_scene) + await get_tree().create_timer(1).timeout + scala_scene.connect_and_trigger_signal() + assert_true(scala_scene.signal_emitted, "Signal should've been emitted in scala") diff --git a/icons/ScalaScript.svg b/icons/ScalaScript.svg new file mode 100644 index 0000000000..d4c555542d --- /dev/null +++ b/icons/ScalaScript.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/kt/api-generator/src/main/resources/api.json b/kt/api-generator/src/main/resources/api.json index c78ef2ac2e..4c9e3afa8d 100644 --- a/kt/api-generator/src/main/resources/api.json +++ b/kt/api-generator/src/main/resources/api.json @@ -145050,10 +145050,10 @@ { "name": "new", "is_const": false, - "is_vararg": true, + "is_vararg": false, "is_static": false, "is_virtual": false, - "hash": 1545262638, + "hash": 1460262497, "return_value": { "type": "Variant" }, @@ -258423,6 +258423,15 @@ "brief_description": "Editor-only helper for setting up root motion in [AnimationMixer].", "description": "[i]Root motion[/i] refers to an animation technique where a mesh's skeleton is used to give impulse to a character. When working with 3D animations, a popular technique is for animators to use the root skeleton bone to give motion to the rest of the skeleton. This allows animating characters in a way where steps actually match the floor below. It also allows precise interaction with objects during cinematics. See also [AnimationMixer].\n[b]Note:[/b] [RootMotionView] is only visible in the editor. It will be hidden automatically in the running project." }, + { + "name": "ScalaScript", + "is_refcounted": true, + "is_instantiable": true, + "inherits": "JvmScript", + "api_type": "core", + "brief_description": "", + "description": "" + }, { "name": "SceneMultiplayer", "is_refcounted": true, diff --git a/kt/common/src/main/kotlin/godot/common/constants/Constraints.kt b/kt/common/src/main/kotlin/godot/common/constants/Constraints.kt index 5ad9ccd98c..4f78ea4b98 100644 --- a/kt/common/src/main/kotlin/godot/common/constants/Constraints.kt +++ b/kt/common/src/main/kotlin/godot/common/constants/Constraints.kt @@ -3,7 +3,6 @@ package godot.common.constants // when changed; also update constraints.h! // Since Godot 4, an unlimited amount of parameters is supported. Limits should be increased when appropriate. object Constraints { - const val MAX_CONSTRUCTOR_ARG_COUNT = 8 const val MAX_FUNCTION_ARG_COUNT = 16 const val MAX_SIGNAL_ARG_COUNT = 16 } diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/build.gradle.kts b/kt/entry-generation/godot-class-graph-symbol-processor/build.gradle.kts new file mode 100644 index 0000000000..3152b97bd9 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/build.gradle.kts @@ -0,0 +1,35 @@ +import versioninfo.fullGodotKotlinJvmVersion + +plugins { + alias(libs.plugins.kotlin.jvm) + id("com.utopia-rise.godot-publish") + id("com.utopia-rise.versioninfo") +} + +kotlin { + jvmToolchain(11) +} + +dependencies { + implementation("com.utopia-rise:tools-common:$fullGodotKotlinJvmVersion") + implementation(project(":godot-core-library")) + implementation(project(":godot-entry-generator")) + + implementation(libs.classGraph) + api(libs.slf4jApi) +} + +publishing { + publications { + @Suppress("UNUSED_VARIABLE") + val godotClassGraphSymbolProcessor by creating(MavenPublication::class) { + pom { + name.set(project.name) + description.set("Godot ClassGraph symbol processor") + } + artifactId = project.name + description = "Godot ClassGraph symbol processor" + from(components.getByName("java")) + } + } +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/Context.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/Context.kt new file mode 100644 index 0000000000..9ff00573c9 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/Context.kt @@ -0,0 +1,8 @@ +package godot.annotation.processor.classgraph + +import io.github.classgraph.ScanResult + +//TODO: remove when contextual arguments are availables +object Context { + lateinit var scanResult: ScanResult +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/ErrorsDatabase.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/ErrorsDatabase.kt new file mode 100644 index 0000000000..746a05fbce --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/ErrorsDatabase.kt @@ -0,0 +1,8 @@ +package godot.annotation.processor.classgraph + +object ErrorsDatabase { + val errors = mutableListOf() + + fun add(error: String) = errors.add(error) + fun isEmpty() = errors.isEmpty() +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/RegisteredClassMetadataContainerDatabase.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/RegisteredClassMetadataContainerDatabase.kt new file mode 100644 index 0000000000..cbd5e41cf8 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/RegisteredClassMetadataContainerDatabase.kt @@ -0,0 +1,68 @@ +package godot.annotation.processor.classgraph + +import godot.annotation.RegisteredClassMetadata +import godot.annotation.processor.classgraph.extensions.getParameterValue +import godot.entrygenerator.ext.provideRegistrationFilePathForInitialGeneration +import godot.entrygenerator.ext.shouldGenerateGdjFile +import godot.entrygenerator.model.RegisteredClass +import godot.entrygenerator.model.RegisteredClassMetadataContainer +import io.github.classgraph.ScanResult + +object RegisteredClassMetadataContainerDatabase { + private lateinit var dependenciesContainers: Map + private lateinit var currentProjectContainers: List + + fun populateDependencies(scanResult: ScanResult, settings: Settings) { + dependenciesContainers = scanResult + .getClassesWithAnyAnnotation(RegisteredClassMetadata::class.java) + .map { classInfo -> + val annotation = classInfo.getAnnotationInfo(RegisteredClassMetadata::class.java) + val fqName = annotation.getParameterValue("fqName") + fqName to RegisteredClassMetadataContainer( + registeredName = annotation.getParameterValue("registeredName"), + baseType = annotation.getParameterValue("baseType"), + fqName = fqName, + compilationTimeRelativeRegistrationFilePath = annotation.getParameterValue("compilationTimeRelativeRegistrationFilePath"), + projectName = annotation.getParameterValue("projectName"), + superTypes = annotation.getParameterValue("superTypes"), + signals = annotation.getParameterValue("signals"), + properties = annotation.getParameterValue("properties"), + functions = annotation.getParameterValue("functions"), + isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled + ) + } + .toMap() + } + + fun populateCurrentProject(registeredClasses: List, settings: Settings) { + currentProjectContainers = registeredClasses + .filter { it.shouldGenerateGdjFile } + .map { + RegisteredClassMetadataContainer( + it.registeredName, + it.godotBaseClass, + it.fqName, + it.provideRegistrationFilePathForInitialGeneration( + listOf(), + settings.isRegistrationFileHierarchyEnabled, + settings.projectName, + settings.projectName, + settings.registrationBaseDirPathRelativeToProjectDir + ), + settings.projectName, + it.supertypes.joinToString(",") { type -> type.fqName }, + it.signals.joinToString(",") { signal -> signal.fqName }, + it.properties.joinToString(",") { property -> property.fqName }, + it.functions.joinToString(",") { function -> function.fqName }, + settings.isRegistrationFileHierarchyEnabled + ) + } + } + + fun dependenciesContainsFqName(fqName: String): Boolean = dependenciesContainers.containsKey(fqName) + + val dependenciesSize: Int + get() = dependenciesContainers.size + + fun list() = dependenciesContainers.values.union(currentProjectContainers).toList() +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/Settings.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/Settings.kt new file mode 100644 index 0000000000..0ea9200edf --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/Settings.kt @@ -0,0 +1,14 @@ +package godot.annotation.processor.classgraph + +import java.io.File + +data class Settings( + val classPrefix: String?, + val isFqNameRegistrationEnabled: Boolean, + val projectName: String, + val projectBaseDir: File, + val registrationBaseDirPathRelativeToProjectDir: String, + val isRegistrationFileHierarchyEnabled: Boolean, + val isRegistrationFileGenerationEnabled: Boolean, + val generatedSourceRootDir: File +) diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/constants/Types.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/constants/Types.kt new file mode 100644 index 0000000000..c463b29e5d --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/constants/Types.kt @@ -0,0 +1,74 @@ +package godot.annotation.processor.classgraph.constants + +const val BOOLEAN = "boolean" +const val INT = "int" +const val LONG = "long" +const val FLOAT = "float" +const val DOUBLE = "double" +const val BYTE = "byte" +const val SHORT = "short" + +const val BOXED_BYTE = "java.lang.Byte" +const val BOXED_SHORT = "java.lang.Short" +const val BOXED_INT = "java.lang.Integer" +const val BOXED_LONG = "java.lang.Long" +const val BOXED_FLOAT = "java.lang.Float" +const val BOXED_DOUBLE = "java.lang.Double" +const val BOXED_BOOLEAN = "java.lang.Boolean" + +val jvmPrimitives = listOf( + BOOLEAN, + INT, + LONG, + FLOAT, + DOUBLE, + BYTE, + SHORT +) + +const val VOID = "void" + +const val STRING = "java.lang.String" + +const val JVM_OBJECT = "java.lang.Object" +const val KOTLIN_ANY = "kotlin.Any" + +const val SET = "java.util.Set" + +val godotPrimitives = jvmPrimitives + .union( + listOf( + BOXED_BYTE, + BOXED_SHORT, + BOXED_INT, + BOXED_LONG, + BOXED_FLOAT, + BOXED_DOUBLE, + BOXED_BOOLEAN, + + STRING + ) + ) + +val String.isGodotPrimitive: Boolean + get() = godotPrimitives.contains(this) + +val jvmPrimitivesToKotlinPrimitives = mapOf( + BOOLEAN to Boolean::class.qualifiedName, + INT to Int::class.qualifiedName, + LONG to Long::class.qualifiedName, + FLOAT to Float::class.qualifiedName, + DOUBLE to Double::class.qualifiedName, + BYTE to Byte::class.qualifiedName, + SHORT to Short::class.qualifiedName, + + STRING to String::class.qualifiedName, + + BOXED_BOOLEAN to Boolean::class.qualifiedName, + BOXED_INT to Int::class.qualifiedName, + BOXED_LONG to Long::class.qualifiedName, + BOXED_FLOAT to Float::class.qualifiedName, + BOXED_DOUBLE to Double::class.qualifiedName, + BOXED_BYTE to Byte::class.qualifiedName, + BOXED_SHORT to Short::class.qualifiedName, +) diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/AnnotationExtensions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/AnnotationExtensions.kt new file mode 100644 index 0000000000..f6b8ab447c --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/AnnotationExtensions.kt @@ -0,0 +1,182 @@ +package godot.annotation.processor.classgraph.extensions + +import godot.annotation.ColorNoAlpha +import godot.annotation.Dir +import godot.annotation.EnumFlag +import godot.annotation.ExpEasing +import godot.annotation.Export +import godot.annotation.IntFlag +import godot.annotation.MultilineText +import godot.annotation.PlaceHolderText +import godot.annotation.RegisterClass +import godot.annotation.RegisterFunction +import godot.annotation.RegisterProperty +import godot.annotation.RegisterSignal +import godot.annotation.Rpc +import godot.annotation.RpcMode +import godot.annotation.Sync +import godot.annotation.Tool +import godot.annotation.TransferMode +import godot.annotation.processor.classgraph.Context +import godot.annotation.processor.classgraph.ErrorsDatabase +import godot.annotation.processor.classgraph.constants.SET +import godot.entrygenerator.model.ColorNoAlphaHintAnnotation +import godot.entrygenerator.model.DirHintAnnotation +import godot.entrygenerator.model.EnumFlagHintStringAnnotation +import godot.entrygenerator.model.ExpEasingHintAnnotation +import godot.entrygenerator.model.ExportAnnotation +import godot.entrygenerator.model.FileHintAnnotation +import godot.entrygenerator.model.GodotAnnotation +import godot.entrygenerator.model.GodotBaseTypeAnnotation +import godot.entrygenerator.model.IntFlagHintAnnotation +import godot.entrygenerator.model.MultilineTextHintAnnotation +import godot.entrygenerator.model.PlaceHolderTextHintAnnotation +import godot.entrygenerator.model.Range +import godot.entrygenerator.model.RangeHintAnnotation +import godot.entrygenerator.model.RegisterClassAnnotation +import godot.entrygenerator.model.RegisterFunctionAnnotation +import godot.entrygenerator.model.RegisterPropertyAnnotation +import godot.entrygenerator.model.RegisterSignalAnnotation +import godot.entrygenerator.model.RpcAnnotation +import godot.entrygenerator.model.ToolAnnotation +import io.github.classgraph.AnnotationEnumValue +import io.github.classgraph.AnnotationInfo +import io.github.classgraph.ClassRefTypeSignature +import io.github.classgraph.FieldInfo + +fun AnnotationInfo.mapToGodotAnnotation(parentDeclaration: Any, declarationString: String): GodotAnnotation? { + @Suppress("UNCHECKED_CAST") + return when (name) { + RegisterClass::class.java.name -> RegisterClassAnnotation( + customName = parameterValues.getValue("customName") as? String, + symbolProcessorSource = this + ) + RegisterFunction::class.java.name -> RegisterFunctionAnnotation(this) + RegisterProperty::class.java.name -> RegisterPropertyAnnotation(this) + RegisterSignal::class.java.name -> RegisterSignalAnnotation(this) + Tool::class.java.name -> ToolAnnotation(this) + Export::class.java.name -> ExportAnnotation(this) + Rpc::class.java.name -> RpcAnnotation( + rpcMode = getRpcMode(), + sync = getSyncMode(), + transferMode = getTransferMode(), + transferChannel = parameterValues.getValue("transferChannel") as Int, + symbolProcessorSource = this + ) + "godot.annotation.GodotBaseType" -> GodotBaseTypeAnnotation(this) // is internal + EnumFlag::class.java.name -> { + if (parentDeclaration !is FieldInfo) { + ErrorsDatabase.add( + "EnumFlag annotation has been set on $declarationString. It should be placed on property only." + ) + return EnumFlagHintStringAnnotation(enumValueNames = listOf(), source = this) + } + + val typeDescriptor = parentDeclaration.typeSignature + + require(typeDescriptor is ClassRefTypeSignature) + + val fullyQualifiedClassName = typeDescriptor.fullyQualifiedClassName + if (fullyQualifiedClassName != SET) { + ErrorsDatabase.add( + "Property annotated with EnumFlag should be of type $SET, $declarationString is of type $fullyQualifiedClassName" + ) + return EnumFlagHintStringAnnotation(enumValueNames = listOf(), source = this) + } + + val typeArgument = typeDescriptor.typeArguments.first().typeSignature as ClassRefTypeSignature + + val enumValues = Context.scanResult.getClassInfo(typeArgument.fullyQualifiedClassName) + .fieldInfo + .filter { it.typeDescriptor == typeArgument } + .map { it.name } + EnumFlagHintStringAnnotation(enumValueNames = enumValues, source = this) + } + IntFlag::class.java.name -> IntFlagHintAnnotation( + parameterValues.getValue("values") as? List ?: emptyList(), + this + ) + MultilineText::class.java.name -> MultilineTextHintAnnotation(this) + PlaceHolderText::class.java.name -> PlaceHolderTextHintAnnotation(this) + ColorNoAlpha::class.java.name -> ColorNoAlphaHintAnnotation(this) + godot.annotation.IntRange::class.java.name -> provideRangeHintAnnotation(-1) + godot.annotation.LongRange::class.java.name -> provideRangeHintAnnotation(-1L) + godot.annotation.FloatRange::class.java.name -> provideRangeHintAnnotation(-1f) + godot.annotation.DoubleRange::class.java.name -> provideRangeHintAnnotation(-1.0) + ExpEasing::class.java.name -> ExpEasingHintAnnotation( + attenuation = parameterValues.getValue("attenuation") as? Boolean ?: false, + isPositiveOnly = parameterValues.getValue("isPositiveOnly") as? Boolean ?: false, + source = this + ) + godot.annotation.File::class.java.name -> FileHintAnnotation( + extensions = parameterValues.getValue("extensions") as? List ?: emptyList(), + global = parameterValues.getValue("global") as? Boolean ?: false, + source = this + ) + Dir::class.java.name -> DirHintAnnotation( + global = parameterValues.getValue("global") as? Boolean ?: false, + source = this + ) + else -> null + } +} + +private fun AnnotationInfo.getRpcMode(): godot.entrygenerator.model.RpcMode { + val rpcModeName = parameterValues.getValue("rpcMode")?.toString() + return when (rpcModeName) { + RpcMode.ANY.fqName -> godot.entrygenerator.model.RpcMode.ANY + RpcMode.AUTHORITY.fqName -> godot.entrygenerator.model.RpcMode.AUTHORITY + else -> godot.entrygenerator.model.RpcMode.DISABLED + } +} + +private fun AnnotationInfo.getSyncMode(): godot.entrygenerator.model.Sync { + val syncName = parameterValues.getValue("sync")?.toString() + return when (syncName) { + Sync.SYNC.fqName -> godot.entrygenerator.model.Sync.SYNC + Sync.NO_SYNC.fqName -> godot.entrygenerator.model.Sync.NO_SYNC + else -> godot.entrygenerator.model.Sync.NO_SYNC + } +} + +private fun AnnotationInfo.getTransferMode(): godot.entrygenerator.model.TransferMode { + val transferModeName = parameterValues.getValue("transferMode")?.toString() + return when (transferModeName) { + TransferMode.RELIABLE.fqName -> godot.entrygenerator.model.TransferMode.RELIABLE + TransferMode.UNRELIABLE.fqName -> godot.entrygenerator.model.TransferMode.UNRELIABLE + TransferMode.UNRELIABLE_ORDERED.fqName -> godot.entrygenerator.model.TransferMode.UNRELIABLE_ORDERED + else -> godot.entrygenerator.model.TransferMode.RELIABLE + } +} + +@Suppress("UNCHECKED_CAST") +private fun AnnotationInfo.provideRangeHintAnnotation(stepDefault: T): RangeHintAnnotation { + val start = parameterValues.getValue("min") as T + val end = parameterValues.getValue("max") as T + val step = parameterValues.getValue("step") as? T ?: stepDefault + val or = Range.valueOf((parameterValues.getValue("or") as AnnotationEnumValue).valueName) // Adjust this logic based on available data + val hideSlider = parameterValues.getValue("hideSlider") as? Boolean ?: false + val isRadians = parameterValues.getValue("isRadians") as? Boolean ?: false + val isDegrees = parameterValues.getValue("isDegrees") as? Boolean ?: false + val isExp = parameterValues.getValue("isExp") as? Boolean ?: false + val suffix = parameterValues.getValue("suffix")?.toString()?.takeIf { it != "" } + + return RangeHintAnnotation( + start = start, + end = end, + step = step, + or = or, + hideSlider = hideSlider, + isRadians = isRadians, + isDegrees = isDegrees, + isExp = isExp, + suffix = suffix, + symbolProcessorSource = this + ) +} + +@Suppress("UNCHECKED_CAST") +fun AnnotationInfo.getParameterValue(parameterName: String): T = parameterValues.getValue(parameterName) as T + +private val Enum<*>.fqName + get() = "${this::class.qualifiedName}.$name" diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ClassExtentions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ClassExtentions.kt new file mode 100644 index 0000000000..0064b9f87f --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ClassExtentions.kt @@ -0,0 +1,178 @@ +package godot.annotation.processor.classgraph.extensions + +import godot.annotation.RegisterClass +import godot.annotation.RegisterFunction +import godot.annotation.RegisterProperty +import godot.annotation.RegisterSignal +import godot.annotation.processor.classgraph.ErrorsDatabase +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.constants.KOTLIN_ANY +import godot.core.KtObject +import godot.entrygenerator.model.ClassAnnotation +import godot.entrygenerator.model.Clazz +import godot.entrygenerator.model.RegisteredClass +import godot.entrygenerator.model.RegisteredFunction +import godot.entrygenerator.model.RegisteredProperty +import godot.entrygenerator.model.RegisteredSignal +import godot.entrygenerator.model.Type +import godot.entrygenerator.model.TypeKind +import io.github.classgraph.ClassInfo +import io.github.classgraph.TypeArgument + +fun ClassInfo.mapToClazz(settings: Settings): Clazz { + val fqName = name + val supertypes = superclasses.union(interfaces).map { it.mapToClazz(settings) } + + val annotations = annotationInfo + .mapNotNull { it.mapToGodotAnnotation(this, fqName) as? ClassAnnotation } + + val methods = methodInfo + .filter { it.hasAnnotation(RegisterFunction::class.java) } + .map { it.mapMethodToRegisteredFunction(this, settings) } + + val fields = fieldInfo + .filter { fieldInfo -> + fieldInfo.hasAnnotation(RegisterProperty::class.java, this) + } + .map { it.mapToRegisteredProperty(settings, this) } + + val signals = fieldInfo + .filter { fieldInfo -> + fieldInfo.hasAnnotation(RegisterSignal::class.java, this) + } + .map { it.mapFieldToRegisteredSignal(settings, this) } + + val shouldBeRegistered = shouldBeRegistered(methods, fields, signals) + + return if (shouldBeRegistered) { + if (!constructorInfo.any { it.isPublic && it.parameterInfo.isEmpty() }) { + ErrorsDatabase.add( + "You should provide a default constructor for class $fqName" + ) + } + + RegisteredClass( + registeredName = provideRegisteredClassName(settings), + fqName = fqName, + supertypes = supertypes, + annotations = annotations, + functions = methods, + signals = signals, + properties = fields, + isAbstract = isAbstract, + isFqNameRegistrationEnabled = settings.isFqNameRegistrationEnabled, + classNamePrefix = settings.classPrefix, + symbolProcessorSource = this + ) + } else { + Clazz( + fqName = fqName, + supertypes = supertypes, + annotations = annotations, + symbolProcessorSource = this + ) + } +} + +private fun ClassInfo.shouldBeRegistered( + registeredFunctions: List, + registeredProperties: List, + registeredSignals: List +) = hasAnnotation(RegisterClass::class.java) || isAbstractAndContainsRegisteredMembers( + registeredFunctions, + registeredProperties, + registeredSignals +) || isAbstractAndInheritsGodotObject + +private fun ClassInfo.isAbstractAndContainsRegisteredMembers( + registeredFunctions: List, + registeredProperties: List, + registeredSignals: List +) = isAbstract && (registeredFunctions.isNotEmpty() || registeredSignals.isNotEmpty() || registeredProperties.isNotEmpty()) + +private val ClassInfo.isAbstractAndInheritsGodotObject + get() = isAbstract && extendsSuperclass(KtObject::class.java) + +private fun getDefaultRegisteredName(fqName: String, settings: Settings): String = if (settings.isFqNameRegistrationEnabled) { + fqName.replace(".", "_") +} else { + if (fqName.contains(".")) { + fqName.substringAfterLast(".") + } else { + fqName + } +} + +internal fun ClassInfo.provideRegisteredClassName( + settings: Settings, +): String { + val registerClassAnnotation = annotationInfo + .firstOrNull { it.name == RegisterClass::class.qualifiedName } + + val customName = registerClassAnnotation + ?.parameterValues + ?.firstOrNull() + ?.value as? String + + val fqName = this.name + + val registeredName = if (customName.isNullOrEmpty()) { + getDefaultRegisteredName(fqName, settings) + } else { + customName + } + + return if (settings.classPrefix != null) { + if (registeredName.contains("_")) { + val packageName = registeredName.substringBeforeLast("_") + val classNameWithPrefix = registeredName + .substringAfterLast("_") + .let { className -> "${settings.classPrefix.uppercase()}$className" } + + "${packageName}_$classNameWithPrefix" + } else { + "${settings.classPrefix.uppercase()}$registeredName" + } + } else { + registeredName + } +} + +internal fun getJavaLangObjectType(settings: Settings): Type { + val fqName = KOTLIN_ANY + return Type( + fqName = fqName, + kind = TypeKind.CLASS, + supertypes = listOf(), + arguments = { listOf() }, + registeredName = { getDefaultRegisteredName(fqName, settings) } + ) +} + +val ClassInfo.typeKind: TypeKind + get() = when { + isAnnotation -> TypeKind.ANNOTATION_CLASS + isInterface -> TypeKind.INTERFACE + isEnum -> TypeKind.ENUM_CLASS + isStandardClass -> TypeKind.CLASS + else -> TypeKind.UNKNOWN + } + +internal fun ClassInfo.mapToType(typeArguments: List, settings: Settings): Type { + val superTypes = superclasses.map { it.mapToType(listOf(), settings) } + .union( + interfaces.map { it.mapToType(listOf(), settings) } + ) + .toList() + + return Type( + fqName = name, + kind = typeKind, + supertypes = superTypes, + arguments = { typeArguments.map { it.getType(settings) } }, + registeredName = { provideRegisteredClassName(settings) }, + ) +} + +val ClassInfo.isScala: Boolean + get() = sourceFile.endsWith(".scala") diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ClassMemberExtension.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ClassMemberExtension.kt new file mode 100644 index 0000000000..4d3b534cfa --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ClassMemberExtension.kt @@ -0,0 +1,11 @@ +package godot.annotation.processor.classgraph.extensions + +import io.github.classgraph.ClassMemberInfo + +const val DELEGATE_SUFFIX = "\$delegate" + +val ClassMemberInfo.fqName: String + get() = "${classInfo.name}\$$sanitizedName" + +val ClassMemberInfo.sanitizedName: String + get() = name.removeSuffix(DELEGATE_SUFFIX) diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/FieldExtensions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/FieldExtensions.kt new file mode 100644 index 0000000000..789c6f9b0a --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/FieldExtensions.kt @@ -0,0 +1,195 @@ +package godot.annotation.processor.classgraph.extensions + +import godot.annotation.RegisterSignal +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.models.TypeDescriptor +import godot.entrygenerator.ext.hasAnnotation +import godot.entrygenerator.ext.isJavaCollection +import godot.entrygenerator.model.EnumAnnotation +import godot.entrygenerator.model.EnumHintStringAnnotation +import godot.entrygenerator.model.EnumListHintStringAnnotation +import godot.entrygenerator.model.PropertyAnnotation +import godot.entrygenerator.model.RegisteredProperty +import godot.entrygenerator.model.RegisteredSignal +import io.github.classgraph.AnnotationInfo +import io.github.classgraph.ClassInfo +import io.github.classgraph.FieldInfo +import io.github.classgraph.MethodInfo + +fun FieldInfo.mapToRegisteredProperty(settings: Settings, classInfo: ClassInfo): RegisteredProperty { + // Map annotations + val annotations = getAnnotations(classInfo) + .mapNotNull { it.mapToGodotAnnotation(this, fqName) as? PropertyAnnotation } + .toMutableList() + + // Handle enums and collections with enums + val fieldType = this.typeDescriptor?.toString() ?: throw IllegalStateException("Type cannot be null") + + val typeDescriptor = TypeDescriptor(this, classInfo) + + if (!typeDescriptor.isPrimitive) { + val typeClassInfo = typeDescriptor.typeClassInfo + + if (!annotations.hasAnnotation() && typeClassInfo.isEnum) { + annotations.add( + EnumHintStringAnnotation( + enumValueNames = typeClassInfo.fieldInfo + .filter { it.isEnum } + .map { it.name }, + source = this + ) + ) + } + + // Check if the property is a collection of enums + if (!annotations.hasAnnotation() && + (fieldType.startsWith("kotlin.collections") || fieldType.isJavaCollection())) { + val containedTypeDeclaration = typeDescriptor.typeArguments.firstOrNull()?.typeClassInfo + if (containedTypeDeclaration?.isEnum == true) { + annotations.add( + EnumListHintStringAnnotation( + enumValueNames = containedTypeDeclaration.fieldInfo + .filter { it.isEnum } + .map { it.name }, + source = this + ) + ) + } + } + } + + // Check modifiers + val isMutable = !this.isFinal + val isOverridee = this.isOverridee + + val getterFqName = if (classInfo.isScala) { + getGetter(classInfo).fqName.replace("$", ".") + } else { + null + } + + val setterFqName = if (classInfo.isScala) { + val fqName = getSetter(classInfo).fqName + val split = fqName.split("$") + "${split.dropLast(1).joinToString(".")}$${split.last()}" + } else { + null + } + + return RegisteredProperty( + fqName = fqName.replace("$", "."), + type = typeDescriptor.getMappedPropertyType(settings), + getterFqName = getterFqName, + setterFqName = setterFqName, + isMutable = isMutable, + isLateinit = typeDescriptor.isLateInit, + isOverridee = isOverridee, + annotations = annotations.toList(), + symbolProcessorSource = this + ) +} + +private const val signalParametersName = "parameters" + +fun FieldInfo.mapFieldToRegisteredSignal(settings: Settings, classInfo: ClassInfo): RegisteredSignal { + val typeDescriptor = when { + classInfo.isScala -> { + val getter = getGetter(classInfo) + TypeDescriptor(getter) + } + name.endsWith(DELEGATE_SUFFIX) -> { + val methodInfo = getGetter(classInfo) + TypeDescriptor(methodInfo) + } + else -> TypeDescriptor(this, classInfo) + } + + val type = typeDescriptor.getMappedType(settings) + + val annotations = getAnnotations(classInfo) + + val parameterValues = annotations + .first { it.classInfo.name == RegisterSignal::class.java.name } + .parameterValues + + return RegisteredSignal( + fqName = fqName.replace("$", "."), + type = type, + parameterTypes = type.arguments(), + parameterNames = ( + parameterValues + .getValue(signalParametersName) as Array + ).toList(), + isOverridee = isOverridee, + annotations = annotations.mapNotNull { it.mapToGodotAnnotation(this, fqName) as? PropertyAnnotation }, + symbolProcessorSource = this + ) +} + +val FieldInfo.isOverridee: Boolean + get() { + return classInfo.methodInfo + .filter { + (it.name == toGetterName() || it.name == toSetterName()) + } + .any { it.isOverridee } + } + +fun FieldInfo.hasAnnotation(annotationClass: Class, classInfo: ClassInfo): Boolean = + hasAnnotation(annotationClass) || + classInfo.methodInfo + .any { + it.hasAnnotation(annotationClass) && (it.name == toSyntheticAnnotations() || it.name == toGetterName()) + } + +fun FieldInfo.hasAnnotation(annotationName: String, classInfo: ClassInfo): Boolean = + hasAnnotation(annotationName) || + classInfo.methodInfo + .any { + it.hasAnnotation(annotationName) && (it.name == toSyntheticAnnotations() || it.name == toGetterName()) + } + + +fun FieldInfo.toGetterName(): String = "get${capitalizedName()}" +fun FieldInfo.toSetterName(): String = "set${capitalizedName()}" +fun FieldInfo.toScalaSetterName(): String = "${name}_\$eq" +fun FieldInfo.toSyntheticAnnotations(): String = "${toGetterName()}\$annotations" + +fun FieldInfo.getGetter(classInfo: ClassInfo): MethodInfo { + val correspondingMethodName = if (classInfo.isScala) { + name + } else { + toGetterName() + } + + return classInfo + .getMethodInfo(correspondingMethodName) + .first { it.parameterInfo.isEmpty() } +} + +fun FieldInfo.getSetter(classInfo: ClassInfo): MethodInfo { + val correspondingMethodName = if (classInfo.isScala) { + toScalaSetterName() + } else { + toSetterName() + } + + return classInfo + .getMethodInfo(correspondingMethodName) + .first { + it.parameterInfo.size == 1 && + it.parameterInfo.first().typeDescriptor == typeDescriptor + } +} + +fun FieldInfo.getAnnotations(classInfo: ClassInfo): Collection = classInfo + .getMethodInfo(toSyntheticAnnotations()) + .firstOrNull() + ?.annotationInfo ?: listOf() + .union( + annotationInfo + ) + .distinct() + +private fun FieldInfo.capitalizedName(): String = sanitizedName + .replaceFirstChar { char -> if (char.isLowerCase()) char.titlecase() else char.toString() } diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/MethodExtensions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/MethodExtensions.kt new file mode 100644 index 0000000000..a0c4281c94 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/MethodExtensions.kt @@ -0,0 +1,49 @@ +package godot.annotation.processor.classgraph.extensions + +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.models.TypeDescriptor +import godot.entrygenerator.model.FunctionAnnotation +import godot.entrygenerator.model.RegisteredFunction +import io.github.classgraph.ClassInfo +import io.github.classgraph.MethodInfo + +fun MethodInfo.mapMethodToRegisteredFunction(currentClass: ClassInfo, settings: Settings): RegisteredFunction { + val parameters = parameterInfo.map { it.mapToValueParameter(settings) } + val annotations = annotationInfo.mapNotNull { it.mapToGodotAnnotation(this, fqName) as? FunctionAnnotation } + + val typeDescriptor = TypeDescriptor(this) + return RegisteredFunction( + fqName = fqName.replace("$", "."), + isOverridee = isOverridee, + isDeclaredInThisClass = classInfo == currentClass, + parameters = parameters, + returnType = if (typeDescriptor.isVoid) null else typeDescriptor.getMappedType(settings), + annotations = annotations.toList(), + symbolProcessorSource = this + ) +} + +val MethodInfo.isOverridee: Boolean + get() { + for (superclass in classInfo.superclasses) { + if (isOverrideInHierarchyOf(superclass)) { + return true + } + } + + return false + } + +private fun MethodInfo.isOverrideInHierarchyOf(classInfo: ClassInfo): Boolean { + if (classInfo.methodInfo.any { name == it.name && typeDescriptor == it.typeDescriptor }) { + return true + } + + for (superclass in classInfo.superclasses) { + if (isOverrideInHierarchyOf(superclass)) { + return true + } + } + + return false +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ParameterExtensions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ParameterExtensions.kt new file mode 100644 index 0000000000..420c5510ae --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/ParameterExtensions.kt @@ -0,0 +1,16 @@ +package godot.annotation.processor.classgraph.extensions + +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.models.TypeDescriptor +import godot.entrygenerator.model.ValueParameter +import io.github.classgraph.MethodParameterInfo + +fun MethodParameterInfo.mapToValueParameter(settings: Settings): ValueParameter { + val typeDescriptor = TypeDescriptor(this) + val type = typeDescriptor.getMappedType(settings) + return ValueParameter( + name, + type, + type.arguments() + ) +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/TypeArgumentExtensions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/TypeArgumentExtensions.kt new file mode 100644 index 0000000000..2b4f385967 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/TypeArgumentExtensions.kt @@ -0,0 +1,29 @@ +package godot.annotation.processor.classgraph.extensions + +import godot.annotation.processor.classgraph.Context +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.constants.JVM_OBJECT +import godot.annotation.processor.classgraph.models.TypeDescriptor +import godot.entrygenerator.model.Type +import io.github.classgraph.ClassInfo +import io.github.classgraph.ClassRefTypeSignature +import io.github.classgraph.TypeArgument + +fun TypeArgument.getType(settings: Settings): Type { + val descriptor = TypeDescriptor(this) + return descriptor.getMappedType(settings) +} + +private fun ClassRefTypeSignature.getMappedType(settings: Settings): Type { + return if (fullyQualifiedClassName == JVM_OBJECT) { + getJavaLangObjectType(settings) + } else { + Context.scanResult.getClassInfo(fullyQualifiedClassName).mapToType( + typeArguments, + settings + ) + } +} + +internal val TypeArgument.typeClassInfo: ClassInfo + get() = Context.scanResult.getClassInfo(typeSignature.toString()) diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/TypeSignatureExtensions.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/TypeSignatureExtensions.kt new file mode 100644 index 0000000000..98aecc9dc1 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/extensions/TypeSignatureExtensions.kt @@ -0,0 +1,14 @@ +package godot.annotation.processor.classgraph.extensions + +import io.github.classgraph.TypeSignature + +fun TypeSignature.toStringWithoutAnnotations(): String { + var result = this.toString() + + if (typeAnnotationInfo == null) return result + + typeAnnotationInfo.forEach { + result = result.removePrefix(it.toString()) + } + return result.trim() +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/logging/LoggerWrapper.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/logging/LoggerWrapper.kt new file mode 100644 index 0000000000..2957e2995b --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/logging/LoggerWrapper.kt @@ -0,0 +1,16 @@ +package godot.annotation.processor.classgraph.logging + +import godot.entrygenerator.model.GodotJvmSourceElement +import org.slf4j.Logger + +class LoggerWrapper(private val logger: Logger) : godot.entrygenerator.utils.Logger { + override fun logging(message: String, sourceElement: GodotJvmSourceElement?) = logger.info(message) + + override fun info(message: String, sourceElement: GodotJvmSourceElement?) = logger.info(message) + + override fun warn(message: String, sourceElement: GodotJvmSourceElement?) = logger.warn(message) + + override fun error(message: String, sourceElement: GodotJvmSourceElement?) = logger.error(message) + + override fun exception(e: Throwable) = logger.error(e.toString()) +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/models/TypeDescriptor.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/models/TypeDescriptor.kt new file mode 100644 index 0000000000..ae8882f176 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/models/TypeDescriptor.kt @@ -0,0 +1,119 @@ +package godot.annotation.processor.classgraph.models + +import godot.annotation.processor.classgraph.Context +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.constants.JVM_OBJECT +import godot.annotation.processor.classgraph.constants.VOID +import godot.annotation.processor.classgraph.constants.isGodotPrimitive +import godot.annotation.processor.classgraph.constants.jvmPrimitivesToKotlinPrimitives +import godot.annotation.processor.classgraph.extensions.getJavaLangObjectType +import godot.annotation.processor.classgraph.extensions.hasAnnotation +import godot.annotation.processor.classgraph.extensions.mapToType +import godot.annotation.processor.classgraph.extensions.toStringWithoutAnnotations +import godot.entrygenerator.ext.isCoreType +import godot.entrygenerator.model.PropertyType +import godot.entrygenerator.model.Type +import godot.entrygenerator.model.TypeKind +import io.github.classgraph.ClassInfo +import io.github.classgraph.ClassRefTypeSignature +import io.github.classgraph.FieldInfo +import io.github.classgraph.MethodInfo +import io.github.classgraph.MethodParameterInfo +import io.github.classgraph.TypeArgument +import io.github.classgraph.TypeSignature +import org.jetbrains.annotations.NotNull + +class TypeDescriptor private constructor( + private val descriptor: TypeSignature, + val typeArguments: List, + private val nullable: Boolean, + val isLateInit: Boolean, + private val descriptorType: DescriptorType +) { + constructor(fieldInfo: FieldInfo, classInfo: ClassInfo) : this( + fieldInfo.typeDescriptor, + (fieldInfo.typeSignature as? ClassRefTypeSignature)?.typeArguments ?: listOf(), + !fieldInfo.hasAnnotation(NotNull::class.java, classInfo), + fieldInfo.hasAnnotation("kotlin.Lateinit", classInfo), + FieldType(fieldInfo.name) + ) + + constructor(parameterInfo: MethodParameterInfo) : this( + parameterInfo.typeDescriptor, + (parameterInfo.typeSignature as? ClassRefTypeSignature)?.typeArguments ?: listOf(), + !parameterInfo.hasAnnotation(NotNull::class.java), + false, + ParameterType(parameterInfo.name) + ) + + constructor(methodInfo: MethodInfo) : this( + methodInfo.typeDescriptor.resultType, + (methodInfo.typeSignature?.resultType as? ClassRefTypeSignature)?.typeArguments ?: listOf(), + !methodInfo.hasAnnotation(NotNull::class.java), + false, + MethodType(methodInfo.name) + ) + + constructor(typeArgument: TypeArgument) : this( + typeArgument.typeSignature, + (typeArgument.typeSignature as? ClassRefTypeSignature)?.typeArguments ?: listOf(), + typeArgument.typeAnnotationInfo?.containsName(NotNull::class.java.name) ?: true, + false, + TypeArgumentType(typeArgument.toString()) + ) + + private val isGodotPrimitive: Boolean = descriptor.toStringWithoutAnnotations().isGodotPrimitive + + private val primitiveType = when { + isGodotPrimitive -> { + val fqName = requireNotNull(jvmPrimitivesToKotlinPrimitives[descriptor.toStringWithoutAnnotations()]) + Type( + fqName = fqName, + kind = TypeKind.UNKNOWN, + supertypes = listOf(), + arguments = { listOf() }, + registeredName = { fqName } + ) + } + descriptor.toStringWithoutAnnotations() == VOID -> null + else -> null + } + + val isPrimitive = primitiveType != null + val isVoid = descriptor.toStringWithoutAnnotations() == VOID + val isObject = descriptor.toStringWithoutAnnotations() == JVM_OBJECT + + val typeClassInfo: ClassInfo + get() = Context.scanResult.getClassInfo(descriptor.toStringWithoutAnnotations()) + + fun getMappedType(settings: Settings): Type = primitiveType ?: if (isObject) { + getJavaLangObjectType(settings) + } else { + typeClassInfo.mapToType(typeArguments, settings) + } + + fun getMappedPropertyType(settings: Settings): PropertyType { + val type = getMappedType(settings) + return PropertyType( + type, + !isGodotPrimitive && !type.isCoreType() && !isLateInit && nullable + ) + } + + private sealed interface DescriptorType { + val name: String + } + + private class FieldType(override val name: String) : DescriptorType { + override fun toString() = "Property: $name" + } + private class ParameterType(override val name: String) : DescriptorType { + override fun toString() = "Parameter: $name" + } + private class MethodType(override val name: String): DescriptorType { + override fun toString() = "Method: $name" + } + private class TypeArgumentType(override val name: String): DescriptorType { + override fun toString() = "TypeArgument: $name" + } +} diff --git a/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/process.kt b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/process.kt new file mode 100644 index 0000000000..e55ee736e1 --- /dev/null +++ b/kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/process.kt @@ -0,0 +1,157 @@ +package godot.annotation.processor.classgraph + +import godot.annotation.GodotBaseType +import godot.annotation.processor.classgraph.extensions.mapToClazz +import godot.annotation.processor.classgraph.logging.LoggerWrapper +import godot.core.KtObject +import godot.entrygenerator.EntryGenerator +import godot.entrygenerator.ext.provideExistingRegistrationFiles +import godot.entrygenerator.ext.provideRegistrationFilePathForInitialGeneration +import godot.entrygenerator.model.RegisteredClass +import godot.entrygenerator.utils.DefaultJvmTypeProvider +import godot.tools.common.constants.FileExtensions +import io.github.classgraph.ClassGraph +import org.slf4j.Logger +import java.io.File +import java.io.FileOutputStream + +fun generateEntryUsingClassGraph( + settings: Settings, + logger: Logger, + runtimeClassPathFiles: Set +) { + val scanResult = ClassGraph() + .overrideClasspath(runtimeClassPathFiles) + .enableAllInfo() + .enableSystemJarsAndModules() + .scan() + Context.scanResult = scanResult + scanResult + .use { + RegisteredClassMetadataContainerDatabase.populateDependencies(it, settings) + + val classes = it.allClasses + .filter { clazz -> + clazz.extendsSuperclass(KtObject::class.java) + && !clazz.hasAnnotation(GodotBaseType::class.java) + } + .filter { classInfo -> !RegisteredClassMetadataContainerDatabase.dependenciesContainsFqName(classInfo.name) } + .map { classInfo -> + classInfo.mapToClazz(settings) + } + + require(ErrorsDatabase.isEmpty()) { + buildString { + for (error in ErrorsDatabase.errors) { + appendLine(error) + } + } + } + + val registeredClasses = classes.filterIsInstance().distinctBy { clazz -> clazz.fqName } + + RegisteredClassMetadataContainerDatabase.populateCurrentProject(registeredClasses, settings) + + val existingRegistrationFiles = settings.projectBaseDir.provideExistingRegistrationFiles() + + EntryGenerator.generateEntryFilesUsingRegisteredClasses( + projectName = settings.projectName, + projectDir = settings.projectBaseDir.absolutePath, + registeredClasses = registeredClasses, + logger = LoggerWrapper(logger), + jvmTypeFqNamesProvider = DefaultJvmTypeProvider(), + compilationTimeRelativeRegistrationFilePathProvider = {registeredClass -> + val registrationFile = existingRegistrationFiles["${registeredClass.registeredName}.${FileExtensions.GodotKotlinJvm.registrationFile}"] + ?.relativeTo(settings.projectBaseDir) + ?: File( + registeredClass.provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers = RegisteredClassMetadataContainerDatabase.list(), + isRegistrationFileHierarchyEnabledSetting = settings.isRegistrationFileHierarchyEnabled, + compilationProjectName = settings.projectName, + classProjectName = settings.projectName, // same as project name as no registration file exists for this class, hence it is new / renamed + registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir + ) + ) + + registrationFile.invariantSeparatorsPath + }, + classRegistrarAppendableProvider = { registeredClass -> + val file = settings.generatedSourceRootDir + .resolve("main") + .resolve("kotlin") + .resolve("godot") + .resolve("entry") + .resolve("${registeredClass.registeredName}Registrar.kt") + + file.parentFile.mkdirs() + + if (!file.exists()) { + file.createNewFile() + } + + FileOutputStream(file).bufferedWriter() + }, + mainBufferedWriterProvider = { + val file = settings.generatedSourceRootDir + .resolve("main") + .resolve("kotlin") + .resolve("godot") + .resolve("Entry.kt") + + file.parentFile.mkdirs() + + if (!file.exists()) { + file.createNewFile() + } + + FileOutputStream(file).bufferedWriter() + }, + classRegistrarFromDependencyCount = RegisteredClassMetadataContainerDatabase.dependenciesSize, + isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled + ) + + if (settings.isRegistrationFileGenerationEnabled) { + EntryGenerator.generateRegistrationFiles( + registeredClassMetadataContainers = RegisteredClassMetadataContainerDatabase.list(), + registrationFileAppendableProvider = { metadata -> + val registrationFile = provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers = RegisteredClassMetadataContainerDatabase.list(), + isRegistrationFileHierarchyEnabledSetting = settings.isRegistrationFileHierarchyEnabled, + fqName = metadata.fqName, + registeredName = metadata.registeredName, + compilationProjectName = settings.projectName, + classProjectName = metadata.projectName, + registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir + ) + + val file = settings.generatedSourceRootDir + .resolve("main") + .resolve("resources") + .resolve("entryFiles") + .resolve(registrationFile) + + file.parentFile.mkdirs() + + if (!file.exists()) { + file.createNewFile() + } + + FileOutputStream(file).bufferedWriter() + } + ) + + val classgraphRegistrationFilesBaseDir = settings.projectBaseDir + .resolve("build/generated/classgraph/main/resources/entryFiles") + .resolve(settings.registrationBaseDirPathRelativeToProjectDir) + + val initialRegistrationFilesOutDir = settings.projectBaseDir + .resolve(settings.registrationBaseDirPathRelativeToProjectDir) + + EntryGenerator.updateRegistrationFiles( + generatedRegistrationFilesBaseDir = classgraphRegistrationFilesBaseDir, + initialRegistrationFilesOutDir = initialRegistrationFilesOutDir, + existingRegistrationFilesMap = existingRegistrationFiles, + ) + } + } +} diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/EntryGenerator.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/EntryGenerator.kt index c8887eedc4..e8e430f8e4 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/EntryGenerator.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/EntryGenerator.kt @@ -1,8 +1,5 @@ package godot.entrygenerator -import godot.entrygenerator.checks.ConstructorArgCountCheck -import godot.entrygenerator.checks.ConstructorOverloadingCheck -import godot.entrygenerator.checks.DefaultConstructorCheck import godot.entrygenerator.checks.FunctionArgCountCheck import godot.entrygenerator.checks.LateinitPropertyCheck import godot.entrygenerator.checks.NullablePropertyCheck @@ -19,6 +16,7 @@ import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.model.RegisteredClassMetadataContainer import godot.entrygenerator.model.SourceFile import godot.entrygenerator.utils.Logger +import godot.tools.common.constants.FileExtensions import godot.tools.common.constants.godotEntryBasePackage import godot.tools.common.constants.godotRegistrationPackage import java.io.BufferedWriter @@ -44,6 +42,32 @@ object EntryGenerator { compilationTimeRelativeRegistrationFilePathProvider: (RegisteredClass) -> String, classRegistrarAppendableProvider: (RegisteredClass) -> BufferedWriter, mainBufferedWriterProvider: () -> BufferedWriter + ) { + generateEntryFilesUsingRegisteredClasses( + projectDir, + projectName, + classRegistrarFromDependencyCount, + logger, + sourceFiles.flatMap { it.registeredClasses }, + isRegistrationFileHierarchyEnabled, + jvmTypeFqNamesProvider, + compilationTimeRelativeRegistrationFilePathProvider, + classRegistrarAppendableProvider, + mainBufferedWriterProvider + ) + } + + fun generateEntryFilesUsingRegisteredClasses( + projectDir: String, + projectName: String, + classRegistrarFromDependencyCount: Int, + logger: Logger, + registeredClasses: List, + isRegistrationFileHierarchyEnabled: Boolean, + jvmTypeFqNamesProvider: (JvmType) -> Set, + compilationTimeRelativeRegistrationFilePathProvider: (RegisteredClass) -> String, + classRegistrarAppendableProvider: (RegisteredClass) -> BufferedWriter, + mainBufferedWriterProvider: () -> BufferedWriter ) { val serviceFile = File(projectDir) .resolve("src/main/resources/META-INF/services") @@ -56,27 +80,25 @@ object EntryGenerator { _logger = logger _jvmTypeFqNamesProvider = jvmTypeFqNamesProvider - if (executeSanityChecks(logger, sourceFiles)) { + if (executeSanityChecksUsingRegisteredClasses(logger, registeredClasses)) { throw ChecksFailedException() } - with(MainEntryFileBuilder) { - sourceFiles.forEach { sourceFile -> - sourceFile.registeredClasses.forEach { registeredClass -> - registerClassRegistrar( - ClassRegistrarFileBuilder( - projectName = projectName, - registeredClass = registeredClass, - registrarAppendableProvider = classRegistrarAppendableProvider, - compilationTimeRelativeRegistrationFilePath = compilationTimeRelativeRegistrationFilePathProvider(registeredClass), - isRegistrationFileHierarchyEnabled = isRegistrationFileHierarchyEnabled, - ) + with(MainEntryFileBuilder()) { + registeredClasses.forEach { registeredClass -> + registerClassRegistrar( + ClassRegistrarFileBuilder( + projectName = projectName, + registeredClass = registeredClass, + registrarAppendableProvider = classRegistrarAppendableProvider, + compilationTimeRelativeRegistrationFilePath = compilationTimeRelativeRegistrationFilePathProvider(registeredClass), + isRegistrationFileHierarchyEnabled = isRegistrationFileHierarchyEnabled ) - } + ) } - registerUserTypesVariantMappings(sourceFiles.flatMap { it.registeredClasses }) + registerUserTypesVariantMappings(registeredClasses) registerProjectName(projectName) - val classRegistrarsForCurrentCompilationCount = sourceFiles.flatMap { it.registeredClasses }.size + val classRegistrarsForCurrentCompilationCount = registeredClasses.size registerClassRegistrarCount( classRegistrarFromCurrentCompilationCount = classRegistrarsForCurrentCompilationCount, classRegistrarFromDependencyCount = classRegistrarFromDependencyCount @@ -99,32 +121,92 @@ object EntryGenerator { } } + fun updateRegistrationFiles( + generatedRegistrationFilesBaseDir: File, + initialRegistrationFilesOutDir: File, + existingRegistrationFilesMap: Map + ) { + val kspRegistrationFiles = generatedRegistrationFilesBaseDir + .walkTopDown() + .filter { file -> + file.extension == FileExtensions.GodotKotlinJvm.registrationFile + } + .associateBy { file -> + file.name + } + + // compare ksp and existing registration files + val deletedRegistrationFiles = existingRegistrationFilesMap + .filterKeys { registrationFileName -> !kspRegistrationFiles.containsKey(registrationFileName) } + .values + + val updatedRegistrationFiles = existingRegistrationFilesMap + .filterKeys { registrationFileName -> kspRegistrationFiles.containsKey(registrationFileName) } + + val newRegistrationFiles = kspRegistrationFiles + .filterKeys { registrationFileName -> !existingRegistrationFilesMap.containsKey(registrationFileName) } + + + // delete obsolete registration files + deletedRegistrationFiles.forEach { obsoleteRegistrationFile -> + try { + obsoleteRegistrationFile.delete() + } catch (e: Throwable) { + logger.warn("Could not delete obsolete registration file. You need to delete it manually! ${obsoleteRegistrationFile.absolutePath}") + } + } + // delete empty dirs in the initial gdj out folder (but not anywhere else!) + initialRegistrationFilesOutDir + .walkBottomUp() + .filter { dir -> dir.isDirectory && dir.listFiles()?.isEmpty() == true } + .forEach { emptyDir -> + try { + emptyDir.delete() + } catch (e: Throwable) { + logger.warn("Could not delete seemingly empty registration directory! ${emptyDir.absolutePath}") + } + } + + // replace existing registration files + updatedRegistrationFiles.forEach { (registrationFileName, registrationFile) -> + kspRegistrationFiles[registrationFileName]?.copyTo(registrationFile, overwrite = true) + } + + // copy new registration files + newRegistrationFiles.forEach { (_, registrationFile) -> + val relativePath = registrationFile.toRelativeString(generatedRegistrationFilesBaseDir) + val targetFile = initialRegistrationFilesOutDir.resolve(relativePath) + registrationFile.copyTo(targetFile, overwrite = true) + } + } + private fun generateServiceFile(randomPackagePathForEntryFile: String, serviceFile: File) { serviceFile.writeText("$randomPackagePathForEntryFile.Entry") } - private fun executeSanityChecks( + private fun executeSanityChecksUsingRegisteredClasses( logger: Logger, - sourceFiles: List + registeredClasses: List ): Boolean { return listOf( - DefaultConstructorCheck(logger, sourceFiles).execute(), - ConstructorArgCountCheck(logger, sourceFiles).execute(), - ConstructorOverloadingCheck(logger, sourceFiles).execute(), - - FunctionArgCountCheck(logger, sourceFiles).execute(), + FunctionArgCountCheck(logger, registeredClasses).execute(), - SignalTypeCheck(logger, sourceFiles).execute(), + SignalTypeCheck(logger, registeredClasses).execute(), - PropertyTypeCheck(logger, sourceFiles).execute(), - PropertyMutablilityCheck(logger, sourceFiles).execute(), - LateinitPropertyCheck(logger, sourceFiles).execute(), - NullablePropertyCheck(logger, sourceFiles).execute(), + PropertyTypeCheck(logger, registeredClasses).execute(), + PropertyMutablilityCheck(logger, registeredClasses).execute(), + LateinitPropertyCheck(logger, registeredClasses).execute(), + NullablePropertyCheck(logger, registeredClasses).execute(), - RpcCheck(logger, sourceFiles).execute(), + RpcCheck(logger, registeredClasses).execute(), ).any { hasIssue -> hasIssue } } + private fun executeSanityChecks( + logger: Logger, + sourceFiles: List + ) = executeSanityChecksUsingRegisteredClasses(logger, sourceFiles.flatMap { it.registeredClasses }) + /** * Either gets the previously generated random package path of the entry class or creates a new one. */ diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/BaseCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/BaseCheck.kt index df33f1e7ca..e4b50a9bb9 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/BaseCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/BaseCheck.kt @@ -1,11 +1,11 @@ package godot.entrygenerator.checks -import godot.entrygenerator.model.SourceFile +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.utils.Logger abstract class BaseCheck( protected val logger: Logger, - protected val sourceFiles: List + protected val registeredClasses: List ) { abstract fun execute(): Boolean } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/ConstructorArgCountCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/ConstructorArgCountCheck.kt deleted file mode 100644 index 51c8c708dc..0000000000 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/ConstructorArgCountCheck.kt +++ /dev/null @@ -1,22 +0,0 @@ -package godot.entrygenerator.checks - -import godot.entrygenerator.model.SourceFile -import godot.entrygenerator.utils.Logger -import godot.common.constants.Constraints - -class ConstructorArgCountCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { - override fun execute(): Boolean { - var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } - .flatMap { it.constructors } - .forEach { registeredConstructor -> - // keep in sync with VARIANT_ARG_MAX in transfer_context.cpp! - if (registeredConstructor.parameters.size > Constraints.MAX_CONSTRUCTOR_ARG_COUNT) { - hasIssue = true - logger.error(registeredConstructor, "RegisteredConstructor has more than ${Constraints.MAX_CONSTRUCTOR_ARG_COUNT} arguments") - } - } - return hasIssue - } -} diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/ConstructorOverloadingCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/ConstructorOverloadingCheck.kt deleted file mode 100644 index 7f91bbf1a8..0000000000 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/ConstructorOverloadingCheck.kt +++ /dev/null @@ -1,26 +0,0 @@ -package godot.entrygenerator.checks - -import godot.entrygenerator.model.SourceFile -import godot.entrygenerator.utils.Logger - -class ConstructorOverloadingCheck(logger: Logger, sourceFiles: List) : BaseCheck(logger, sourceFiles) { - override fun execute(): Boolean { - var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } - .forEach { registeredClass -> - registeredClass - .constructors - .groupBy { it.parameters.size } - .filter { it.value.size > 1 } - .forEach { (_, overloadingConstructors) -> - hasIssue = true - overloadingConstructors.forEach { registeredConstructor -> - logger.error(registeredConstructor, "Constructor overloading on registered constructors is not yet supported!") - } - } - } - - return hasIssue - } -} diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/DefaultConstructorCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/DefaultConstructorCheck.kt deleted file mode 100644 index f862368da9..0000000000 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/DefaultConstructorCheck.kt +++ /dev/null @@ -1,20 +0,0 @@ -package godot.entrygenerator.checks - -import godot.entrygenerator.model.SourceFile -import godot.entrygenerator.utils.Logger - -class DefaultConstructorCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { - override fun execute(): Boolean { - var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } - .filter { !it.isAbstract } - .forEach { registeredClass -> - if (registeredClass.constructors.none { it.parameters.isEmpty() }) { - hasIssue = true - logger.error(registeredClass, "RegisteredClass does not have a public default constructor") - } - } - return hasIssue - } -} diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/FunctionArgCountCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/FunctionArgCountCheck.kt index 30f7d5360a..81958efc3e 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/FunctionArgCountCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/FunctionArgCountCheck.kt @@ -1,18 +1,20 @@ package godot.entrygenerator.checks -import godot.entrygenerator.model.SourceFile -import godot.entrygenerator.utils.Logger import godot.common.constants.Constraints +import godot.entrygenerator.model.RegisteredClass +import godot.entrygenerator.utils.Logger -class FunctionArgCountCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { +class FunctionArgCountCheck(logger: Logger, registeredClasses: List): BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { var hasIssues = false - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.functions } .forEach { registeredFunction -> if (registeredFunction.parameters.size > Constraints.MAX_FUNCTION_ARG_COUNT) { - logger.error(registeredFunction, "RegisteredFunction ${registeredFunction.fqName} has more than ${Constraints.MAX_FUNCTION_ARG_COUNT} arguments. More than that is currently not supported. If you need more, either wrap them in a wrapper object or pass a VariantArray containing your values.") + logger.error( + "RegisteredFunction ${registeredFunction.fqName} has more than ${Constraints.MAX_FUNCTION_ARG_COUNT} arguments. More than that is currently not supported. If you need more, either wrap them in a wrapper object or pass a VariantArray containing your values.", + registeredFunction + ) hasIssues = true } } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/LateinitPropertyCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/LateinitPropertyCheck.kt index 4f0c452388..b36fdd5e50 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/LateinitPropertyCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/LateinitPropertyCheck.kt @@ -2,22 +2,23 @@ package godot.entrygenerator.checks import godot.entrygenerator.ext.isCoreType import godot.entrygenerator.ext.isGodotPrimitive -import godot.entrygenerator.model.ExportAnnotation import godot.entrygenerator.model.RegisterPropertyAnnotation -import godot.entrygenerator.model.SourceFile +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.utils.Logger -class LateinitPropertyCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { +class LateinitPropertyCheck(logger: Logger, registeredClasses: List): BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.properties } .filter { registeredProperty -> registeredProperty.annotations.filterIsInstance().isNotEmpty() } .forEach { exportedProperty -> if (exportedProperty.isLateinit && (exportedProperty.type.isCoreType() || exportedProperty.type.isGodotPrimitive())) { hasIssue = true - logger.error(exportedProperty, "Registered property with godot core type cannot be lateinit. Assign a default value") + logger.error( + "Registered property with godot core type cannot be lateinit. Assign a default value", + exportedProperty + ) } } return hasIssue diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/NullablePropertyCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/NullablePropertyCheck.kt index 44a4596cdd..cd65bbf89f 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/NullablePropertyCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/NullablePropertyCheck.kt @@ -3,20 +3,22 @@ package godot.entrygenerator.checks import godot.entrygenerator.ext.isCoreType import godot.entrygenerator.ext.isGodotPrimitive import godot.entrygenerator.model.RegisterPropertyAnnotation -import godot.entrygenerator.model.SourceFile +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.utils.Logger -class NullablePropertyCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { +class NullablePropertyCheck(logger: Logger, registeredClasses: List): BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.properties } .filter { registeredProperty -> registeredProperty.annotations.filterIsInstance().isNotEmpty() } .forEach { exportedProperty -> if (exportedProperty.type.isNullable && (exportedProperty.type.isCoreType() || exportedProperty.type.isGodotPrimitive())) { hasIssue = true - logger.error(exportedProperty, "Registered property which is a Kotlin/Java primitive or Godot core type cannot be nullable. Assign a default value") + logger.error( + "Registered property which is a Kotlin/Java primitive or Godot core type cannot be nullable. Assign a default value", + exportedProperty + ) } } return hasIssue diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyMutablilityCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyMutablilityCheck.kt index 3bac62e47e..2d8ca3cd91 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyMutablilityCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyMutablilityCheck.kt @@ -1,20 +1,19 @@ package godot.entrygenerator.checks import godot.entrygenerator.model.RegisterPropertyAnnotation -import godot.entrygenerator.model.SourceFile +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.utils.Logger -class PropertyMutablilityCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { +class PropertyMutablilityCheck(logger: Logger, registeredClasses: List): BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.properties } .filter { registeredProperty -> registeredProperty.annotations.filterIsInstance().isNotEmpty() } .forEach { registeredProperty -> if (!registeredProperty.isMutable) { hasIssue = true - logger.error(registeredProperty, "Registered property is not mutable") + logger.error("Registered property is not mutable", registeredProperty) } } return hasIssue diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyTypeCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyTypeCheck.kt index bfe067fd11..020752ebec 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyTypeCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/PropertyTypeCheck.kt @@ -3,18 +3,18 @@ package godot.entrygenerator.checks import godot.entrygenerator.ext.isCoreType import godot.entrygenerator.ext.isEnum import godot.entrygenerator.ext.isGodotPrimitive +import godot.entrygenerator.ext.isJavaCollection import godot.entrygenerator.ext.isKotlinCollection import godot.entrygenerator.ext.isNodeType import godot.entrygenerator.ext.isRefCounted import godot.entrygenerator.model.RegisterPropertyAnnotation -import godot.entrygenerator.model.SourceFile +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.utils.Logger -class PropertyTypeCheck(logger: Logger, sourceFiles: List) : BaseCheck(logger, sourceFiles) { +class PropertyTypeCheck(logger: Logger, registeredClasses: List) : BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.properties } .filter { registeredProperty -> registeredProperty.annotations.filterIsInstance().isNotEmpty() @@ -26,12 +26,13 @@ class PropertyTypeCheck(logger: Logger, sourceFiles: List) : BaseChe && !exportedProperty.type.isNodeType() && !exportedProperty.type.isRefCounted() && !exportedProperty.type.isKotlinCollection() + && !exportedProperty.type.isJavaCollection() && !exportedProperty.type.isEnum() ) { hasIssue = true logger.error( - exportedProperty, - "Registered property can only be of type primitive, core type, node type or ref counted" + "Registered property can only be of type primitive, core type, node type or ref counted", + exportedProperty ) } } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/RpcCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/RpcCheck.kt index 104b931c1e..8434cd07d2 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/RpcCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/RpcCheck.kt @@ -1,22 +1,24 @@ package godot.entrygenerator.checks import godot.entrygenerator.ext.getAnnotationUnsafe +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.model.RpcAnnotation -import godot.entrygenerator.model.SourceFile import godot.entrygenerator.model.TransferMode import godot.entrygenerator.utils.Logger -class RpcCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { +class RpcCheck(logger: Logger, registeredClasses: List): BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.functions } .filter { it.annotations.any { annotation -> annotation is RpcAnnotation } } .forEach { registeredFunction -> val rpcAnnotation = registeredFunction.annotations.getAnnotationUnsafe() if (rpcAnnotation.transferMode != TransferMode.UNRELIABLE_ORDERED && rpcAnnotation.transferChannel != 0) { - logger.warn(registeredFunction, "You set \"transferChannel\" to something else than 0 (you set: ${rpcAnnotation.transferChannel}) while the \"transferMode\" is not set to ${TransferMode.UNRELIABLE_ORDERED.name}. \"transferChannel\" only has an effect with \"transferMode\" ${TransferMode.UNRELIABLE_ORDERED.name}!") + logger.warn( + "You set \"transferChannel\" to something else than 0 (you set: ${rpcAnnotation.transferChannel}) while the \"transferMode\" is not set to ${TransferMode.UNRELIABLE_ORDERED.name}. \"transferChannel\" only has an effect with \"transferMode\" ${TransferMode.UNRELIABLE_ORDERED.name}!", + registeredFunction + ) } } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/SignalTypeCheck.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/SignalTypeCheck.kt index 54190a7a5f..72427412a2 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/SignalTypeCheck.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/checks/SignalTypeCheck.kt @@ -1,21 +1,23 @@ package godot.entrygenerator.checks import godot.core.Signal -import godot.entrygenerator.model.SourceFile +import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.utils.Logger import godot.tools.common.constants.GodotKotlinJvmTypes import godot.tools.common.constants.godotCorePackage -class SignalTypeCheck(logger: Logger, sourceFiles: List): BaseCheck(logger, sourceFiles) { +class SignalTypeCheck(logger: Logger, registeredClasses: List): BaseCheck(logger, registeredClasses) { override fun execute(): Boolean { var hasIssue = false - sourceFiles - .flatMap { it.registeredClasses } + registeredClasses .flatMap { it.signals } .forEach { registeredSignal -> if (!registeredSignal.type.fqName.startsWith("$godotCorePackage.${GodotKotlinJvmTypes.signal}")) { hasIssue = true - logger.error(registeredSignal, "RegisteredSignal is not of type godot.signals.Signal! Resolved type: ${registeredSignal.type.fqName}") + logger.error( + "RegisteredSignal is not of type godot.signals.Signal! Resolved type: ${registeredSignal.type.fqName}", + registeredSignal + ) } else { val expectedTypeArgumentSize = registeredSignal @@ -30,12 +32,18 @@ class SignalTypeCheck(logger: Logger, sourceFiles: List): BaseCheck( val parameterNamesCount = registeredSignal.parameterNames if (expectedTypeArgumentSize != null && expectedTypeArgumentSize != actualTypeArguments) { - logger.error(registeredSignal, "Signal type ${registeredSignal.type.fqName} expects $expectedTypeArgumentSize type arguments but $actualTypeArguments were provided.") + logger.error( + "Signal type ${registeredSignal.type.fqName} expects $expectedTypeArgumentSize type arguments but $actualTypeArguments were provided.", + registeredSignal + ) hasIssue = true } if (parameterNamesCount.size != actualTypeArguments && registeredSignal.type.fqName == Signal::class.qualifiedName) { - logger.warn(registeredSignal, "You provided parameter names but specified type ${Signal::class.qualifiedName}. You should specify the signal type with the correct type parameter count explicitly otherwise each parameter type will be assumed to be of type Any (or Object in the case of Java). In this case you'll probably need ${Signal::class.qualifiedName}${parameterNamesCount.size}") + logger.warn( + "You provided parameter names but specified type ${Signal::class.qualifiedName}. You should specify the signal type with the correct type parameter count explicitly otherwise each parameter type will be assumed to be of type Any (or Object in the case of Java). In this case you'll probably need ${Signal::class.qualifiedName}${parameterNamesCount.size}", + registeredSignal + ) } } } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/FileExtensions.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/FileExtensions.kt new file mode 100644 index 0000000000..023015a3bd --- /dev/null +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/FileExtensions.kt @@ -0,0 +1,24 @@ +package godot.entrygenerator.ext + +import godot.tools.common.constants.FileExtensions +import java.io.File + +fun File.provideExistingRegistrationFiles(): Map { + val excludedDirs = listOf( + "build", // needs to be excluded so the registration files generated from ksp are not counted as existing registration files + "android", // needs to be excluded as godot copies every godot asset to the embedded android gradle project located in this directory which includes our gdj files. Thus we would never update them. + ) + + return walkTopDown() + .onEnter { directory -> + // do not enter excluded directories or hidden directories + !excludedDirs.contains(directory.toRelativeString(this)) + && !directory.name.startsWith(".") + } + .filter { file -> + file.extension == FileExtensions.GodotKotlinJvm.registrationFile + } + .associateBy { file -> + file.name + } +} diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/RegisteredClassExtensions.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/RegisteredClassExtensions.kt new file mode 100644 index 0000000000..314b56bd7e --- /dev/null +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/RegisteredClassExtensions.kt @@ -0,0 +1,55 @@ +package godot.entrygenerator.ext + +import godot.entrygenerator.model.RegisteredClass +import godot.entrygenerator.model.RegisteredClassMetadataContainer +import godot.tools.common.constants.FileExtensions + +fun RegisteredClass.provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers: List, + isRegistrationFileHierarchyEnabledSetting: Boolean, + compilationProjectName: String, + classProjectName: String, + registrationFileOutDir: String +) = provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers, + isRegistrationFileHierarchyEnabledSetting, + fqName, + registeredName, + compilationProjectName, + classProjectName, + registrationFileOutDir +) + +fun provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers: List, + isRegistrationFileHierarchyEnabledSetting: Boolean, + fqName: String, + registeredName: String, + compilationProjectName: String, + classProjectName: String, + registrationFileOutDir: String +): String { + val registrationMetadata = registeredClassMetadataContainers.firstOrNull { it.fqName == fqName } + val isRegistrationFileHierarchyEnabled = if (registrationMetadata != null) { + registrationMetadata.isRegistrationFileHierarchyEnabled + } else { + isRegistrationFileHierarchyEnabledSetting + } + + val registrationFileRelativePath = if (isRegistrationFileHierarchyEnabled && fqName.contains(".")) { + fqName.substringBeforeLast(".").replace(".", "/") + } else "" + + val localResourcePath = "$registrationFileRelativePath/$registeredName".removePrefix("/") + + val pathWithoutExtension = if (compilationProjectName == classProjectName) { + "${registrationFileOutDir}/$localResourcePath" + } else { + "${registrationFileOutDir}/dependencies/${classProjectName}/$localResourcePath" + } + + return "$pathWithoutExtension.${FileExtensions.GodotKotlinJvm.registrationFile}" +} + +val RegisteredClass.shouldGenerateGdjFile: Boolean + get() = !isAbstract diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/TypeExtensions.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/TypeExtensions.kt index 8bee9dec4b..d8141a67a3 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/TypeExtensions.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/ext/TypeExtensions.kt @@ -130,6 +130,34 @@ fun Type.isDictionary(): Boolean = when (fqName) { fun Type.isKotlinCollection(): Boolean = fqName.contains(kotlinCollectionsPackage) +private val javaCollection = arrayOf( + "java.util.ArrayList", + "java.util.LinkedList", + "java.util.Vector", + "java.util.Stack", + "java.util.HashSet", + "java.util.LinkedHashSet", + "java.util.TreeSet", + "java.util.PriorityQueue", + "java.util.ArrayDeque", + "java.util.HashMap", + "java.util.LinkedHashMap", + "java.util.TreeMap", + "java.util.Hashtable", + "java.util.List", + "java.util.Set", + "java.util.Queue", + "java.util.Deque", + "java.util.Map", + "java.util.SortedSet", + "java.util.NavigableSet", + "java.util.SortedMap", + "java.util.NavigableMap" +) + +fun Type.isJavaCollection(): Boolean = javaCollection.contains(fqName) +fun String.isJavaCollection(): Boolean = javaCollection.contains(this) + fun Type.isEnum(): Boolean = kind == TypeKind.ENUM_CLASS fun Type.isRefCounted(): Boolean = fqName == "$godotApiPackage.${GodotKotlinJvmTypes.refCounted}" || this diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/ClassRegistrarFileBuilder.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/ClassRegistrarFileBuilder.kt index 74cedf21f4..4b5f185b1d 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/ClassRegistrarFileBuilder.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/ClassRegistrarFileBuilder.kt @@ -8,14 +8,18 @@ import com.squareup.kotlinpoet.KModifier import com.squareup.kotlinpoet.TypeSpec import com.squareup.kotlinpoet.asClassName import godot.annotation.RegisteredClassMetadata +import godot.entrygenerator.ext.shouldGenerateGdjFile import godot.entrygenerator.generator.ConstructorRegistrationGenerator import godot.entrygenerator.generator.FunctionRegistrationGenerator import godot.entrygenerator.generator.PropertyRegistrationGenerator import godot.entrygenerator.generator.SignalRegistrationGenerator import godot.entrygenerator.model.RegisteredClass -import godot.tools.common.constants.* -import java.io.BufferedWriter +import godot.tools.common.constants.GENERATED_COMMENT import godot.tools.common.constants.GodotFunctions +import godot.tools.common.constants.GodotKotlinJvmTypes +import godot.tools.common.constants.godotEntryBasePackage +import godot.tools.common.constants.godotRegistrationPackage +import java.io.BufferedWriter class ClassRegistrarFileBuilder( projectName: String, @@ -28,14 +32,13 @@ class ClassRegistrarFileBuilder( .classBuilder("${registeredClass.registeredName}Registrar") .addModifiers(KModifier.OPEN) .apply { - if (!registeredClass.isAbstract) { + if (registeredClass.shouldGenerateGdjFile) { addAnnotation( AnnotationSpec .builder(RegisteredClassMetadata::class.asClassName()) .addMember("%S", registeredClass.registeredName) .addMember("%S", registeredClass.godotBaseClass) .addMember("%S", registeredClass.fqName) - .addMember("%S", registeredClass.relativeSourcePath) .addMember("%S", compilationTimeRelativeRegistrationFilePath) .addMember("%S", projectName) .addMember("%S", registeredClass.supertypes.joinToString(",") { it.fqName }) @@ -77,7 +80,7 @@ class ClassRegistrarFileBuilder( className, registeredClass.godotBaseClass, registeredClass.registeredName, - registeredClass.relativeSourcePath, + registeredClass.fqName, compilationTimeRelativeRegistrationFilePath, ) //START: registerClass } else { @@ -93,7 +96,7 @@ class ClassRegistrarFileBuilder( ) if (!registeredClass.isAbstract) { - ConstructorRegistrationGenerator.generate(registeredClass, className, registerClassControlFlow) + ConstructorRegistrationGenerator.generate(className, registerClassControlFlow) FunctionRegistrationGenerator.generate(registeredClass, className, registerClassControlFlow) SignalRegistrationGenerator.generate(registeredClass, className, registerClassControlFlow) PropertyRegistrationGenerator.generate(registeredClass, className, registerClassControlFlow) diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/MainEntryFileBuilder.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/MainEntryFileBuilder.kt index 92a6e93c05..4065cb4398 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/MainEntryFileBuilder.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/MainEntryFileBuilder.kt @@ -14,13 +14,13 @@ import godot.entrygenerator.model.RegisteredClass import godot.tools.common.constants.GENERATED_COMMENT import godot.tools.common.constants.GodotKotlinJvmTypes import godot.tools.common.constants.KOTLIN_LIST_OF -import godot.tools.common.constants.godotPackage import godot.tools.common.constants.godotEntryBasePackage +import godot.tools.common.constants.godotPackage import godot.tools.common.constants.godotRegistrationPackage import java.io.BufferedWriter import kotlin.reflect.KClass -object MainEntryFileBuilder { +class MainEntryFileBuilder { private val initFunctionSpec = FunSpec .builder("init") .receiver(ClassName("$godotRegistrationPackage.${GodotKotlinJvmTypes.entry}", GodotKotlinJvmTypes.context)) @@ -89,7 +89,7 @@ object MainEntryFileBuilder { ClassName(it.containingPackage, it.name) } registerUserTypesVariantMappingsFunSpec.addStatement( - "return %M(${listOfArguments.joinToString { "%T::class" }})", + "return·%M(${listOfArguments.joinToString(separator = ",·") { "%T::class" }})", KOTLIN_LIST_OF, *listOfArguments.toTypedArray() ) diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/RegistrationFileGenerator.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/RegistrationFileGenerator.kt index 68061bb571..15dd76bad7 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/RegistrationFileGenerator.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/filebuilder/RegistrationFileGenerator.kt @@ -1,7 +1,7 @@ package godot.entrygenerator.filebuilder -import godot.entrygenerator.model.RegisteredClassMetadataContainer import godot.common.extensions.convertToSnakeCase +import godot.entrygenerator.model.RegisteredClassMetadataContainer import java.io.BufferedWriter class RegistrationFileGenerator( @@ -17,7 +17,6 @@ class RegistrationFileGenerator( | |registeredName = ${metadata.registeredName} |fqName = ${metadata.fqName} - |relativeSourcePath = ${metadata.relativeSourcePath} |baseType = ${metadata.baseType} |supertypes = [ | ${metadata.superTypes.split(",").joinToString(",\n\t") { it.trim() }} diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/ConstructorRegistrationGenerator.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/ConstructorRegistrationGenerator.kt index 52d11d8ab0..80ee71d5f1 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/ConstructorRegistrationGenerator.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/ConstructorRegistrationGenerator.kt @@ -2,98 +2,15 @@ package godot.entrygenerator.generator import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.FunSpec -import godot.entrygenerator.ext.hasAnnotation -import godot.entrygenerator.ext.toKtVariantType -import godot.entrygenerator.ext.toTypeName -import godot.entrygenerator.model.RegisterConstructorAnnotation -import godot.entrygenerator.model.RegisteredClass import godot.tools.common.constants.godotCorePackage object ConstructorRegistrationGenerator { - fun generate(registeredClass: RegisteredClass, className: ClassName, registerClassControlFlow: FunSpec.Builder) { - registeredClass - .constructors - .filter { registeredConstructor -> - registeredConstructor.parameters.isEmpty() || - registeredConstructor.annotations.hasAnnotation() - } - .forEach { registeredConstructor -> - val ctorParamsCount = registeredConstructor.parameters.size - - if (ctorParamsCount == 0) { - registerClassControlFlow.addStatement( - "constructor(%T(::%T))", - ClassName(godotCorePackage, "KtConstructor$ctorParamsCount"), - className - ) - } else { - val templateArgs = mutableListOf() - val templateString = buildString { - append("{") - registeredConstructor.parameters.forEachIndexed { index, valueParameter -> - append("%L:·%T") - templateArgs.add(valueParameter.name) - templateArgs.add( - valueParameter.type.toTypeName() - ) //setting nullables explicitly to false in case of type parameters for generic types, setting nullability later - - if (valueParameter.typeArguments.isNotEmpty()) { - append("<") - append( - valueParameter.typeArguments.joinToString(",·") { typeArgument -> - templateArgs.add( - ClassName( - typeArgument.fqName.substringBeforeLast("."), - typeArgument.fqName.substringAfterLast(".") - ) - ) - if (typeArgument.isNullable) { - "%T?" - } else { - "%T" - } - } - ) - append(">") - } - - if (valueParameter.type.isNullable) { - append("?") //setting nullability now and not earlier in case of type parameters for generic types - } - - if (index != registeredConstructor.parameters.size - 1) { - append(",·") - } - } - - append("·->·%T(") - templateArgs.add(className) - - registeredConstructor.parameters.forEachIndexed { index, valueParameter -> - append(valueParameter.name) - if (index != registeredConstructor.parameters.size - 1) { - append(",·") - } - } - append(")},·") - - registeredConstructor.parameters.forEachIndexed { index, valueParameter -> - append("%T") - templateArgs.add(valueParameter.type.toKtVariantType()) - - if (index != registeredConstructor.parameters.size - 1) { - append(",·") - } - } - } - - registerClassControlFlow.addStatement( - "constructor(%T($templateString))", - ClassName(godotCorePackage, "KtConstructor$ctorParamsCount"), - *templateArgs.toTypedArray() - ) - } - } + fun generate(className: ClassName, registerClassControlFlow: FunSpec.Builder) { + registerClassControlFlow.addStatement( + "constructor(%T(::%T))", + ClassName(godotCorePackage, "KtConstructor"), + className + ) } } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/PropertyRegistrationGenerator.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/PropertyRegistrationGenerator.kt index a11c70253c..d36adb58bb 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/PropertyRegistrationGenerator.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/PropertyRegistrationGenerator.kt @@ -4,7 +4,10 @@ import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.FunSpec import com.squareup.kotlinpoet.MemberName.Companion.member +import godot.common.extensions.convertToCamelCase +import godot.common.extensions.convertToSnakeCase import godot.entrygenerator.ext.hasAnnotation +import godot.entrygenerator.ext.isJavaCollection import godot.entrygenerator.ext.toGodotVariantType import godot.entrygenerator.ext.toKtVariantType import godot.entrygenerator.generator.hintstring.PropertyHintStringGeneratorProvider @@ -16,7 +19,6 @@ import godot.entrygenerator.model.RegisteredProperty import godot.entrygenerator.model.TypeKind import godot.tools.common.constants.GodotTypes import godot.tools.common.constants.godotCorePackage -import godot.tools.common.constants.godotPackage object PropertyRegistrationGenerator { fun generate( @@ -34,7 +36,10 @@ object PropertyRegistrationGenerator { registerClassControlFlow, ) - registeredProperty.type.fqName.matches(Regex("^kotlin\\.collections\\..*Set\$")) && + ( + registeredProperty.type.fqName.matches(Regex("^kotlin\\.collections\\..*Set\$")) + || registeredProperty.type.fqName.matches(Regex("^java\\.util\\..*Set\$")) + ) && registeredProperty.type.arguments().firstOrNull()?.kind == TypeKind.ENUM_CLASS && registeredProperty.annotations.hasAnnotation() -> registerEnumFlag( registeredProperty, @@ -42,7 +47,10 @@ object PropertyRegistrationGenerator { registerClassControlFlow, ) - registeredProperty.type.fqName.matches(Regex("^kotlin\\.collections\\..*\$")) && + ( + registeredProperty.type.fqName.matches(Regex("^kotlin\\.collections\\..*\$")) + || registeredProperty.type.isJavaCollection() + ) && registeredProperty.type.arguments().firstOrNull()?.kind == TypeKind.ENUM_CLASS -> registerEnumList( registeredProperty, className, @@ -65,6 +73,32 @@ object PropertyRegistrationGenerator { registeredProperty.type.fqName } + val getterFqName = registeredProperty.getterFqName + val setterFqName = registeredProperty.setterFqName + if (getterFqName != null) { + requireNotNull(setterFqName) { + "Property ${registeredProperty.name} with getter $getterFqName should also have a setter" + } + + registerClassControlFlow + .addStatement( + "property(%S,·%L,·%L,·%T,·%T,·%S,·%T,·%S,·%L.flag)", + registeredProperty.name.convertToSnakeCase(), + getGetterReference(registeredProperty, className), + getSetterReference(registeredProperty, className), + registeredProperty.type.toKtVariantType(), + registeredProperty.type.toGodotVariantType(), + typeFqNameWithNullability, + PropertyTypeHintProvider.provide(registeredProperty), + PropertyHintStringGeneratorProvider + .provide(registeredProperty) + .getHintString() + .replace("?", ""), + getPropertyUsage(registeredProperty), + ) + return + } + registerClassControlFlow .addStatement( "property(%L,·%T,·%T,·%S,·%T,·%S,·%L.flag)", @@ -86,6 +120,28 @@ object PropertyRegistrationGenerator { className: ClassName, registerClassControlFlow: FunSpec.Builder, ) { + val getterFqName = registeredProperty.getterFqName + val setterFqName = registeredProperty.setterFqName + if (getterFqName != null) { + requireNotNull(setterFqName) { + "Property ${registeredProperty.name} with getter $getterFqName should also have a setter" + } + + registerClassControlFlow + .addStatement( + "enumListProperty(%S,·%L,·%L,·%L.flag,·%S)", + registeredProperty.name.convertToSnakeCase(), + getGetterReference(registeredProperty, className), + getSetterReference(registeredProperty, className), + getPropertyUsage(registeredProperty), + PropertyHintStringGeneratorProvider + .provide(registeredProperty) + .getHintString() + .replace("?", ""), + ) + return + } + registerClassControlFlow .addStatement( "enumListProperty(%L,·%L.flag,·%S)", @@ -103,6 +159,28 @@ object PropertyRegistrationGenerator { className: ClassName, registerClassControlFlow: FunSpec.Builder, ) { + val getterFqName = registeredProperty.getterFqName + val setterFqName = registeredProperty.setterFqName + if (getterFqName != null) { + requireNotNull(setterFqName) { + "Property ${registeredProperty.name} with getter $getterFqName should also have a setter" + } + + registerClassControlFlow + .addStatement( + "enumFlagProperty(%S,·%L,·%L,·%L.flag,·%S)", + registeredProperty.name.convertToCamelCase(), + getGetterReference(registeredProperty, className), + getSetterReference(registeredProperty, className), + getPropertyUsage(registeredProperty), + PropertyHintStringGeneratorProvider + .provide(registeredProperty) + .getHintString() + .replace("?", ""), + ) + return + } + registerClassControlFlow .addStatement( "enumFlagProperty(%L,·%L.flag,·%S)", @@ -120,6 +198,28 @@ object PropertyRegistrationGenerator { className: ClassName, registerClassControlFlow: FunSpec.Builder, ) { + val getterFqName = registeredProperty.getterFqName + val setterFqName = registeredProperty.setterFqName + if (getterFqName != null) { + requireNotNull(setterFqName) { + "Property ${registeredProperty.name} with getter $getterFqName should also have a setter" + } + + registerClassControlFlow + .addStatement( + "enumProperty(%S,·%L,·%L,·%L.flag,·%S)", + registeredProperty.name.convertToSnakeCase(), + getGetterReference(registeredProperty, className), + getSetterReference(registeredProperty, className), + getPropertyUsage(registeredProperty), + PropertyHintStringGeneratorProvider + .provide(registeredProperty) + .getHintString() + .replace("?", ""), + ) + return + } + registerClassControlFlow .addStatement( "enumProperty(%L,·%L.flag,·%S)", @@ -138,6 +238,30 @@ object PropertyRegistrationGenerator { .reference() } + private fun getGetterReference(registeredProperty: RegisteredProperty, className: ClassName): CodeBlock { + val getterName = registeredProperty.getterName + + requireNotNull(getterName) { + "Property ${registeredProperty.fqName} does not have a getter." + } + + return className + .member(getterName) + .reference() + } + + private fun getSetterReference(registeredProperty: RegisteredProperty, className: ClassName): CodeBlock { + val setterName = registeredProperty.setterName + + requireNotNull(setterName) { + "Property ${registeredProperty.fqName} does not have a setter." + } + + return className + .member(setterName) + .reference() + } + private fun getPropertyUsage(registeredProperty: RegisteredProperty): ClassName { return if (registeredProperty.annotations.hasAnnotation()) { ClassName( diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/hintstring/PropertyHintStringGeneratorProvider.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/hintstring/PropertyHintStringGeneratorProvider.kt index c75dfd1f5d..1adc50fafb 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/hintstring/PropertyHintStringGeneratorProvider.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/generator/hintstring/PropertyHintStringGeneratorProvider.kt @@ -31,7 +31,10 @@ object PropertyHintStringGeneratorProvider { .distinctBy { it::class } // GH-731: when hint annotations are declared higher up in the hierarchy, we can get the same hint annotation multiple times. But we're only interested in one type of hint annotation for this check if (hintAnnotations.size > 1) { - EntryGenerator.logger.error(registeredProperty, "RegisteredProperty has more than one Hint annotation: ${hintAnnotations.joinToString()}") + EntryGenerator.logger.error( + "RegisteredProperty has more than one Hint annotation: ${hintAnnotations.joinToString()}", + registeredProperty + ) } return when(hintAnnotations.firstOrNull()) { diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Clazz.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Clazz.kt index 604b347e4f..2cfef3a6f8 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Clazz.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Clazz.kt @@ -3,11 +3,9 @@ package godot.entrygenerator.model import godot.entrygenerator.ext.hasAnnotation import godot.tools.common.constants.GodotKotlinJvmTypes import godot.tools.common.constants.godotApiPackage -import godot.tools.common.constants.godotPackage open class Clazz( open val fqName: String, - open val relativeSourcePath: String, open val supertypes: List = emptyList(), open val annotations: List = emptyList(), open val isAbstract: Boolean = false, diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisterConstructorAnnotation.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisterConstructorAnnotation.kt deleted file mode 100644 index c90db69e1c..0000000000 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisterConstructorAnnotation.kt +++ /dev/null @@ -1,3 +0,0 @@ -package godot.entrygenerator.model - -class RegisterConstructorAnnotation(override val symbolProcessorSource: Any) : ConstructorAnnotation diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClass.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClass.kt index 31d4b0931c..90ba56dc6d 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClass.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClass.kt @@ -6,10 +6,8 @@ import godot.entrygenerator.ext.hasAnnotation data class RegisteredClass( val registeredName: String, override val fqName: String, - override val relativeSourcePath: String, override val supertypes: List, override val annotations: List = emptyList(), - val constructors: List = emptyList(), val functions: List = emptyList(), val signals: List = emptyList(), val properties: List = emptyList(), @@ -17,12 +15,12 @@ data class RegisteredClass( private val isFqNameRegistrationEnabled: Boolean = false, private val classNamePrefix: String? = null, override val symbolProcessorSource: Any -) : Clazz(fqName, relativeSourcePath, supertypes, isAbstract = isAbstract, symbolProcessorSource = symbolProcessorSource) { +) : Clazz(fqName, supertypes, isAbstract = isAbstract, symbolProcessorSource = symbolProcessorSource) { internal val isTool: Boolean get() = annotations.getAnnotation() != null - internal val godotBaseClass: String + val godotBaseClass: String get() = if (isAbstract) { "" } else { diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClassMetadataContainer.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClassMetadataContainer.kt index 907d97a68b..c65ecb1b4d 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClassMetadataContainer.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredClassMetadataContainer.kt @@ -4,7 +4,6 @@ data class RegisteredClassMetadataContainer( val registeredName : String, val baseType: String, val fqName: String, - val relativeSourcePath: String, val compilationTimeRelativeRegistrationFilePath: String, val projectName: String, val superTypes: String, diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredConstructor.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredConstructor.kt index 104228a3f2..e72085f4f3 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredConstructor.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredConstructor.kt @@ -2,7 +2,6 @@ package godot.entrygenerator.model data class RegisteredConstructor( val fqName: String, - val parameters: List = emptyList(), val annotations: List = emptyList(), override val symbolProcessorSource: Any ) : GodotJvmSourceElement diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredProperty.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredProperty.kt index 5c73601ba9..7b2b7e4738 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredProperty.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/RegisteredProperty.kt @@ -2,7 +2,9 @@ package godot.entrygenerator.model data class RegisteredProperty( val fqName: String, - val type: Type, + val type: PropertyType, + val getterFqName: String? = null, + val setterFqName: String? = null, val isMutable: Boolean = true, val isLateinit: Boolean = false, val isOverridee: Boolean = false, @@ -10,4 +12,6 @@ data class RegisteredProperty( override val symbolProcessorSource: Any ) : GodotJvmSourceElement { val name: String = fqName.substringAfterLast(".") + val getterName = getterFqName?.substringAfterLast(".") + val setterName = setterFqName?.substringAfterLast(".") } diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Type.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Type.kt index a1c17475a9..3f8fb3c8ba 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Type.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/model/Type.kt @@ -1,9 +1,8 @@ package godot.entrygenerator.model -data class Type( +open class Type( val fqName: String, val kind: TypeKind, - val isNullable: Boolean, val supertypes: List, val arguments: () -> List, val registeredName: () -> String?, @@ -19,6 +18,17 @@ data class Type( } } +class PropertyType( + type: Type, + val isNullable: Boolean, +) : Type( + type.fqName, + type.kind, + type.supertypes, + type.arguments, + type.registeredName +) + enum class TypeKind { INTERFACE, CLASS, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/JvmTypeProvider.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/DefaultJvmTypeProvider.kt similarity index 92% rename from kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/JvmTypeProvider.kt rename to kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/DefaultJvmTypeProvider.kt index 440aa1faac..4f3d28ab16 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/JvmTypeProvider.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/DefaultJvmTypeProvider.kt @@ -1,8 +1,8 @@ -package godot.annotation.processor.utils +package godot.entrygenerator.utils import godot.entrygenerator.model.JvmType -internal class JvmTypeProvider: (JvmType) -> Set { +open class DefaultJvmTypeProvider: (JvmType) -> Set { override fun invoke(jvmType: JvmType): Set { return when(jvmType) { JvmType.INT -> setOf( diff --git a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/Logger.kt b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/Logger.kt index 36a7b8888e..eeca2000bf 100644 --- a/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/Logger.kt +++ b/kt/entry-generation/godot-entry-generator/src/main/kotlin/godot/entrygenerator/utils/Logger.kt @@ -3,10 +3,10 @@ package godot.entrygenerator.utils import godot.entrygenerator.model.GodotJvmSourceElement interface Logger { - fun logging(sourceElement: GodotJvmSourceElement, message: String) - fun info(sourceElement: GodotJvmSourceElement, message: String) - fun warn(sourceElement: GodotJvmSourceElement, message: String) - fun error(sourceElement: GodotJvmSourceElement, message: String) + fun logging(message: String, sourceElement: GodotJvmSourceElement? = null) + fun info(message: String, sourceElement: GodotJvmSourceElement? = null) + fun warn(message: String, sourceElement: GodotJvmSourceElement? = null) + fun error(message: String, sourceElement: GodotJvmSourceElement? = null) fun exception(e: Throwable) } diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/GodotKotlinSymbolProcessor.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/GodotKotlinSymbolProcessor.kt index 100e36d668..7acd21173c 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/GodotKotlinSymbolProcessor.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/GodotKotlinSymbolProcessor.kt @@ -10,7 +10,7 @@ import godot.annotation.processor.processing.ProcessingRoundsBlackboard import godot.annotation.processor.processing.RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistrationFiles import godot.annotation.processor.processing.RoundGenerateRegistrationFilesForCurrentCompilation import godot.annotation.processor.processing.RoundUpdateRegistrationFiles -import godot.tools.common.constants.FileExtensions +import godot.entrygenerator.ext.provideExistingRegistrationFiles import java.io.File /** @@ -103,24 +103,7 @@ class GodotKotlinSymbolProcessor( ) } - private fun provideExistingRegistrationFiles(): Map { - val excludedDirs = listOf( - "build", // needs to be excluded so the registration files generated from ksp are not counted as existing registration files - "android", // needs to be excluded as godot copies every godot asset to the embedded android gradle project located in this directory which includes our gdj files. Thus we would never update them. - ) - return settings - .projectBaseDir - .walkTopDown() - .onEnter { directory -> - // do not enter excluded directories or hidden directories - !excludedDirs.contains(directory.toRelativeString(settings.projectBaseDir)) - && !directory.name.startsWith(".") - } - .filter { file -> - file.extension == FileExtensions.GodotKotlinJvm.registrationFile - } - .associateBy { file -> - file.name - } - } + private fun provideExistingRegistrationFiles() = settings + .projectBaseDir + .provideExistingRegistrationFiles() } diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/RegisteredClassMetadataContainerExt.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/RegisteredClassMetadataContainerExt.kt index eed2ea5df6..e69de29bb2 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/RegisteredClassMetadataContainerExt.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/RegisteredClassMetadataContainerExt.kt @@ -1,32 +0,0 @@ -package godot.annotation.processor.ext - -import godot.annotation.processor.Settings -import godot.tools.common.constants.FileExtensions -import org.jetbrains.kotlin.konan.properties.suffix - -internal fun provideRegistrationFilePathForInitialGenerationWithoutExtension( - settings: Settings, - fqName: String, - registeredName: String, - compilationProjectName: String, - classProjectName: String, - registrationFileOutDir: String -): String { - val registrationMetadata = settings.registeredClassMetadataContainers.firstOrNull { it.fqName == fqName } - val isRegistrationFileHierarchyEnabled = if (registrationMetadata != null) { - registrationMetadata.isRegistrationFileHierarchyEnabled - } else { - settings.isRegistrationFileHierarchyEnabled - } - val registrationFileRelativePath = if (isRegistrationFileHierarchyEnabled && fqName.contains(".")) { - fqName.substringBeforeLast(".").replace(".", "/") - } else "" - - val localResourcePath = "$registrationFileRelativePath/$registeredName".removePrefix("/") - - return if (compilationProjectName == classProjectName) { - "${registrationFileOutDir}/$localResourcePath" - } else { - "${registrationFileOutDir}/dependencies/${classProjectName}/$localResourcePath" - }.suffix(FileExtensions.GodotKotlinJvm.registrationFile) -} diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksAnnotationExt.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksAnnotationExt.kt index 78daf22c9e..c2f0fcf919 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksAnnotationExt.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksAnnotationExt.kt @@ -16,7 +16,6 @@ import godot.annotation.IntFlag import godot.annotation.MultilineText import godot.annotation.PlaceHolderText import godot.annotation.RegisterClass -import godot.annotation.RegisterConstructor import godot.annotation.RegisterFunction import godot.annotation.RegisterProperty import godot.annotation.RegisterSignal @@ -36,7 +35,6 @@ import godot.entrygenerator.model.PlaceHolderTextHintAnnotation import godot.entrygenerator.model.Range import godot.entrygenerator.model.RangeHintAnnotation import godot.entrygenerator.model.RegisterClassAnnotation -import godot.entrygenerator.model.RegisterConstructorAnnotation import godot.entrygenerator.model.RegisterFunctionAnnotation import godot.entrygenerator.model.RegisterPropertyAnnotation import godot.entrygenerator.model.RegisterSignalAnnotation @@ -96,7 +94,6 @@ internal fun KSAnnotation.mapToAnnotation(parentDeclaration: KSDeclaration): God customName = arguments.first().value as? String, symbolProcessorSource = this ) - RegisterConstructor::class.qualifiedName -> RegisterConstructorAnnotation(this) RegisterFunction::class.qualifiedName -> RegisterFunctionAnnotation(this) RegisterProperty::class.qualifiedName -> RegisterPropertyAnnotation(this) RegisterSignal::class.qualifiedName -> RegisterSignalAnnotation(this) diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksClassDeclarationExt.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksClassDeclarationExt.kt index 6f9b12e546..b28e238b2d 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksClassDeclarationExt.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksClassDeclarationExt.kt @@ -7,7 +7,6 @@ import com.google.devtools.ksp.isAbstract import com.google.devtools.ksp.isPublic import com.google.devtools.ksp.symbol.KSClassDeclaration import godot.annotation.RegisterClass -import godot.annotation.RegisterConstructor import godot.annotation.RegisterProperty import godot.annotation.RegisterSignal import godot.annotation.processor.Settings @@ -17,7 +16,6 @@ import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.model.RegisteredFunction import godot.entrygenerator.model.RegisteredProperty import godot.entrygenerator.model.RegisteredSignal -import java.io.File internal fun KSClassDeclaration.mapToClazz( settings: Settings, @@ -59,29 +57,32 @@ internal fun KSClassDeclaration.mapToClazz( isAbstractAndContainsRegisteredMembers(registeredFunctions, registeredProperties, registeredSignals) || isAbstractAndInheritsGodotBaseClass() - val absoluteSourcePath = this.containingFile?.filePath?.let { File(it) } - val relativeSourcePath = absoluteSourcePath?.relativeTo(settings.projectBaseDir)?.invariantSeparatorsPath ?: "" - return if (shouldBeRegistered) { + val constructors = getConstructors() - val registeredConstructors = getConstructors() - .filter { it.isPublic() } - .filter { constructor -> - constructor.annotations.any { it.fqNameUnsafe == RegisterConstructor::class.qualifiedName } || - constructor.parameters.isEmpty() - } - .map { it.mapToRegisteredConstructor(settings) } + val duplicateConstructorArgumentCount = constructors + .groupBy { it.parameters.size } .toList() + .firstOrNull { it.second.size > 1 } + ?.first + + if (duplicateConstructorArgumentCount != null) { + throw Exception( + "Cannot have more than one constructor with $duplicateConstructorArgumentCount arguments in registered class $fqName" + ) + } + + require(constructors.any { it.isPublic() && it.parameters.isEmpty() }) { + "You should provide a default constructor" + } RegisteredClass( registeredName = requireNotNull(provideRegisteredClassName(settings)) { "Failed to calculate RegisteredName for a registered class: ${this.qualifiedName?.asString()}. This is a bug. Please report it on Github" }, fqName = fqName, - relativeSourcePath = relativeSourcePath, supertypes = supertypeDeclarations, annotations = mappedAnnotations, - constructors = registeredConstructors, functions = registeredFunctions, signals = registeredSignals, properties = registeredProperties, @@ -93,7 +94,6 @@ internal fun KSClassDeclaration.mapToClazz( } else { Clazz( fqName = fqName, - relativeSourcePath = relativeSourcePath, supertypes = supertypeDeclarations, annotations = mappedAnnotations, symbolProcessorSource = this diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksFunctionDeclarationExt.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksFunctionDeclarationExt.kt index a33fa47aca..51972b86f8 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksFunctionDeclarationExt.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksFunctionDeclarationExt.kt @@ -10,24 +10,6 @@ import godot.entrygenerator.model.FunctionAnnotation import godot.entrygenerator.model.RegisteredConstructor import godot.entrygenerator.model.RegisteredFunction -internal fun KSFunctionDeclaration.mapToRegisteredConstructor( - settings: Settings, -): RegisteredConstructor { - return RegisteredConstructor( - fqName = requireNotNull(qualifiedName?.asString() ?: parentDeclaration?.qualifiedName?.asString()) { - "Qualified name for a registered constructor declaration cannot be null" - }, - parameters = parameters.map { ksValueParameter -> - ksValueParameter.mapToValueParameter(settings) - }, - annotations = annotations - .mapNotNull { it.mapToAnnotation(this) as? ConstructorAnnotation } - .toList(), - symbolProcessorSource = this - ) -} - - internal fun KSFunctionDeclaration.mapToRegisteredFunction( currentClass: KSClassDeclaration, settings: Settings, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksPropertyDeclarationExt.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksPropertyDeclarationExt.kt index d53d6633f5..1cac9e9302 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksPropertyDeclarationExt.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksPropertyDeclarationExt.kt @@ -7,12 +7,7 @@ import com.google.devtools.ksp.symbol.Modifier import godot.annotation.RegisterSignal import godot.annotation.processor.Settings import godot.entrygenerator.ext.hasAnnotation -import godot.entrygenerator.model.EnumAnnotation -import godot.entrygenerator.model.EnumHintStringAnnotation -import godot.entrygenerator.model.EnumListHintStringAnnotation -import godot.entrygenerator.model.PropertyAnnotation -import godot.entrygenerator.model.RegisteredProperty -import godot.entrygenerator.model.RegisteredSignal +import godot.entrygenerator.model.* internal fun KSPropertyDeclaration.mapToRegisteredProperty( settings: Settings, @@ -79,7 +74,7 @@ internal fun KSPropertyDeclaration.mapToRegisteredProperty( return RegisteredProperty( fqName = fqName, - type = mappedType, + type = PropertyType(mappedType, type.resolve().isMarkedNullable), isMutable = isMutable, isLateinit = modifiers.contains(Modifier.LATEINIT), isOverridee = findOverridee() != null, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksTypeReferenceExt.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksTypeReferenceExt.kt index 3b56e194d6..e8315bf680 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksTypeReferenceExt.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksTypeReferenceExt.kt @@ -40,7 +40,6 @@ internal fun KSTypeReference.mapToType( return Type( fqName = fqName, kind = typeKind, - isNullable = resolvedType.isMarkedNullable, supertypes = superTypes, arguments = { resolvedType.arguments.mapNotNull { it.type?.mapToType(settings) } }, registeredName = { resolvedType.provideRegisteredClassName(settings) }, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistrationFiles.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistrationFiles.kt index 4a61a892e0..911f448c37 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistrationFiles.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistrationFiles.kt @@ -6,12 +6,12 @@ import com.google.devtools.ksp.processing.KSPLogger import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.symbol.KSAnnotated import godot.annotation.processor.Settings -import godot.annotation.processor.ext.provideRegistrationFilePathForInitialGenerationWithoutExtension -import godot.annotation.processor.utils.JvmTypeProvider import godot.annotation.processor.utils.LoggerWrapper import godot.annotation.processor.visitor.MetadataAnnotationVisitor import godot.annotation.processor.visitor.RegistrationAnnotationVisitor import godot.entrygenerator.EntryGenerator +import godot.entrygenerator.ext.provideRegistrationFilePathForInitialGeneration +import godot.entrygenerator.utils.DefaultJvmTypeProvider import godot.tools.common.constants.FileExtensions import godot.tools.common.constants.godotEntryBasePackage import java.io.File @@ -53,16 +53,15 @@ internal class RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistration logger = LoggerWrapper(logger), sourceFiles = registerAnnotationVisitor.sourceFilesContainingRegisteredClasses, isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled, - jvmTypeFqNamesProvider = JvmTypeProvider(), + jvmTypeFqNamesProvider = DefaultJvmTypeProvider(), compilationTimeRelativeRegistrationFilePathProvider = { registeredClass -> val registrationFile = blackboard .existingRegistrationFilesMap["${registeredClass.registeredName}.${FileExtensions.GodotKotlinJvm.registrationFile}"] ?.relativeTo(settings.projectBaseDir) ?: File( - provideRegistrationFilePathForInitialGenerationWithoutExtension( - settings = settings, - fqName = registeredClass.fqName, - registeredName = registeredClass.registeredName, + registeredClass.provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers = settings.registeredClassMetadataContainers, + isRegistrationFileHierarchyEnabledSetting = settings.isRegistrationFileHierarchyEnabled, compilationProjectName = settings.projectName, classProjectName = settings.projectName, // same as project name as no registration file exists for this class, hence it is new / renamed registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir @@ -101,8 +100,9 @@ internal class RoundGenerateRegistrarsForCurrentProjectAndDependencyRegistration registrationFileAppendableProvider = { metadata -> blackboard.alreadyGeneratedRegistrationFiles.add(metadata.fqName) - val registrationFile = provideRegistrationFilePathForInitialGenerationWithoutExtension( - settings = settings, + val registrationFile = provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers = settings.registeredClassMetadataContainers, + isRegistrationFileHierarchyEnabledSetting = settings.isRegistrationFileHierarchyEnabled, fqName = metadata.fqName, registeredName = metadata.registeredName, compilationProjectName = settings.projectName, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrationFilesForCurrentCompilation.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrationFilesForCurrentCompilation.kt index 5e84248a62..f879733904 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrationFilesForCurrentCompilation.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundGenerateRegistrationFilesForCurrentCompilation.kt @@ -6,9 +6,9 @@ import com.google.devtools.ksp.processing.KSPLogger import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.symbol.KSAnnotated import godot.annotation.processor.Settings -import godot.annotation.processor.ext.provideRegistrationFilePathForInitialGenerationWithoutExtension import godot.annotation.processor.visitor.MetadataAnnotationVisitor import godot.entrygenerator.EntryGenerator +import godot.entrygenerator.ext.provideRegistrationFilePathForInitialGeneration import godot.tools.common.constants.FileExtensions import godot.tools.common.constants.godotEntryBasePackage @@ -40,8 +40,9 @@ internal class RoundGenerateRegistrationFilesForCurrentCompilation( registrationFileAppendableProvider = { metadata -> blackboard.alreadyGeneratedRegistrationFiles.add(metadata.fqName) - val resourcePathFromProjectRoot = provideRegistrationFilePathForInitialGenerationWithoutExtension( - settings = settings, + val resourcePathFromProjectRoot = provideRegistrationFilePathForInitialGeneration( + registeredClassMetadataContainers = settings.registeredClassMetadataContainers, + isRegistrationFileHierarchyEnabledSetting = settings.isRegistrationFileHierarchyEnabled, fqName = metadata.fqName, registeredName = metadata.registeredName, compilationProjectName = settings.projectName, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundUpdateRegistrationFiles.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundUpdateRegistrationFiles.kt index 76a3dd31db..4871c744f5 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundUpdateRegistrationFiles.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/processing/RoundUpdateRegistrationFiles.kt @@ -5,8 +5,7 @@ import com.google.devtools.ksp.processing.KSPLogger import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.symbol.KSAnnotated import godot.annotation.processor.Settings -import godot.tools.common.constants.FileExtensions -import java.io.File +import godot.entrygenerator.EntryGenerator /** * Third round: @@ -26,8 +25,8 @@ internal class RoundUpdateRegistrationFiles( val kspRegistrationFilesBaseDir = settings.projectBaseDir.resolve("build/generated/ksp/main/resources/entryFiles").resolve(settings.registrationBaseDirPathRelativeToProjectDir) val initialRegistrationFilesOutDir = settings.projectBaseDir.resolve(settings.registrationBaseDirPathRelativeToProjectDir) - updateRegistrationFiles( - kspRegistrationFilesBaseDir = kspRegistrationFilesBaseDir, + EntryGenerator.updateRegistrationFiles( + generatedRegistrationFilesBaseDir = kspRegistrationFilesBaseDir, initialRegistrationFilesOutDir = initialRegistrationFilesOutDir, existingRegistrationFilesMap = blackboard.existingRegistrationFilesMap, ) @@ -35,63 +34,4 @@ internal class RoundUpdateRegistrationFiles( return emptyList() } - - private fun updateRegistrationFiles( - kspRegistrationFilesBaseDir: File, - initialRegistrationFilesOutDir: File, - existingRegistrationFilesMap: Map - ) { - val kspRegistrationFiles = kspRegistrationFilesBaseDir - .walkTopDown() - .filter { file -> - file.extension == FileExtensions.GodotKotlinJvm.registrationFile - } - .associateBy { file -> - file.name - } - - // compare ksp and existing registration files - val deletedRegistrationFiles = existingRegistrationFilesMap - .filterKeys { registrationFileName -> !kspRegistrationFiles.containsKey(registrationFileName) } - .values - - val updatedRegistrationFiles = existingRegistrationFilesMap - .filterKeys { registrationFileName -> kspRegistrationFiles.containsKey(registrationFileName) } - - val newRegistrationFiles = kspRegistrationFiles - .filterKeys { registrationFileName -> !existingRegistrationFilesMap.containsKey(registrationFileName) } - - - // delete obsolete registration files - deletedRegistrationFiles.forEach { obsoleteRegistrationFile -> - try { - obsoleteRegistrationFile.delete() - } catch (e: Throwable) { - logger.warn("Could not delete obsolete registration file. You need to delete it manually! ${obsoleteRegistrationFile.absolutePath}") - } - } - // delete empty dirs in the initial gdj out folder (but not anywhere else!) - initialRegistrationFilesOutDir - .walkBottomUp() - .filter { dir -> dir.isDirectory && dir.listFiles()?.isEmpty() == true } - .forEach { emptyDir -> - try { - emptyDir.delete() - } catch (e: Throwable) { - logger.warn("Could not delete seemingly empty registration directory! ${emptyDir.absolutePath}") - } - } - - // replace existing registration files - updatedRegistrationFiles.forEach { (registrationFileName, registrationFile) -> - kspRegistrationFiles[registrationFileName]?.copyTo(registrationFile, overwrite = true) - } - - // copy new registration files - newRegistrationFiles.forEach { (_, registrationFile) -> - val relativePath = registrationFile.toRelativeString(kspRegistrationFilesBaseDir) - val targetFile = initialRegistrationFilesOutDir.resolve(relativePath) - registrationFile.copyTo(targetFile, overwrite = true) - } - } } diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/LoggerWrapper.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/LoggerWrapper.kt index 94a85483b7..8fe0deafc4 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/LoggerWrapper.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/utils/LoggerWrapper.kt @@ -8,13 +8,13 @@ import godot.entrygenerator.utils.Logger internal class LoggerWrapper( private val kspLogger: KSPLogger ) : Logger { - override fun logging(sourceElement: GodotJvmSourceElement, message: String) = kspLogger.logging(message, sourceElement.symbolProcessorSource as? KSNode) + override fun logging(message: String, sourceElement: GodotJvmSourceElement?) = kspLogger.logging(message, sourceElement?.symbolProcessorSource as? KSNode) - override fun info(sourceElement: GodotJvmSourceElement, message: String) = kspLogger.info(message, sourceElement.symbolProcessorSource as? KSNode) + override fun info(message: String, sourceElement: GodotJvmSourceElement?) = kspLogger.info(message, sourceElement?.symbolProcessorSource as? KSNode) - override fun warn(sourceElement: GodotJvmSourceElement, message: String) = kspLogger.warn(message, sourceElement.symbolProcessorSource as? KSNode) + override fun warn(message: String, sourceElement: GodotJvmSourceElement?) = kspLogger.warn(message, sourceElement?.symbolProcessorSource as? KSNode) - override fun error(sourceElement: GodotJvmSourceElement, message: String) = kspLogger.error(message, sourceElement.symbolProcessorSource as? KSNode) + override fun error(message: String, sourceElement: GodotJvmSourceElement?) = kspLogger.error(message, sourceElement?.symbolProcessorSource as? KSNode) override fun exception(e: Throwable) = kspLogger.exception(e) } diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/MetadataAnnotationVisitor.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/MetadataAnnotationVisitor.kt index ef892321c5..25bb6ce721 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/MetadataAnnotationVisitor.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/MetadataAnnotationVisitor.kt @@ -27,7 +27,6 @@ internal class MetadataAnnotationVisitor: KSVisitorVoid() { registeredName = annotation.registeredName, baseType = annotation.baseType, fqName = annotation.fqName, - relativeSourcePath = annotation.relativeSourcePath, compilationTimeRelativeRegistrationFilePath = annotation.compilationTimeRelativeRegistrationFilePath, projectName = annotation.projectName, superTypes = annotation.superTypes, diff --git a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/RegistrationAnnotationVisitor.kt b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/RegistrationAnnotationVisitor.kt index 22dcc6c796..58c178a509 100644 --- a/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/RegistrationAnnotationVisitor.kt +++ b/kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/visitor/RegistrationAnnotationVisitor.kt @@ -4,7 +4,6 @@ import com.google.devtools.ksp.symbol.KSClassDeclaration import com.google.devtools.ksp.symbol.KSFile import com.google.devtools.ksp.symbol.KSVisitorVoid import godot.annotation.RegisterClass -import godot.annotation.RegisterConstructor import godot.annotation.RegisterFunction import godot.annotation.RegisterProperty import godot.annotation.RegisterSignal @@ -16,7 +15,7 @@ import godot.entrygenerator.model.RegisteredClass import godot.entrygenerator.model.SourceFile /** - * Collects [RegisterClass], [RegisterConstructor], [RegisterFunction], [RegisterProperty], [RegisterSignal] annotations + * Collects [RegisterClass], [RegisterFunction], [RegisterProperty], [RegisterSignal] annotations * for registrar generation and entry generation */ internal class RegistrationAnnotationVisitor( @@ -25,7 +24,6 @@ internal class RegistrationAnnotationVisitor( private val registerAnnotations = listOf( RegisterClass::class.qualifiedName!!, - RegisterConstructor::class.qualifiedName!!, RegisterFunction::class.qualifiedName!!, RegisterProperty::class.qualifiedName!!, RegisterSignal::class.qualifiedName!! diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/RegisterEngineTypes.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/RegisterEngineTypes.kt index d8feb04464..fa8d3ffd27 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/RegisterEngineTypes.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/RegisterEngineTypes.kt @@ -568,6 +568,7 @@ import godot.api.RichTextLabel import godot.api.RigidBody2D import godot.api.RigidBody3D import godot.api.RootMotionView +import godot.api.ScalaScript import godot.api.SceneMultiplayer import godot.api.SceneReplicationConfig import godot.api.SceneState @@ -1452,6 +1453,7 @@ public fun registerVariantMapping(): Unit { variantMapper[RigidBody2D::class] = OBJECT variantMapper[RigidBody3D::class] = OBJECT variantMapper[RootMotionView::class] = OBJECT + variantMapper[ScalaScript::class] = OBJECT variantMapper[SceneMultiplayer::class] = OBJECT variantMapper[SceneReplicationConfig::class] = OBJECT variantMapper[SceneState::class] = OBJECT @@ -2334,6 +2336,7 @@ public fun registerEngineTypeMethods(): Unit { RigidBody2D.MethodBindings RigidBody3D.MethodBindings RootMotionView.MethodBindings + ScalaScript.MethodBindings SceneMultiplayer.MethodBindings SceneReplicationConfig.MethodBindings SceneState.MethodBindings @@ -3246,6 +3249,7 @@ public fun registerEngineTypes(): Unit { TypeManager.registerEngineType("RigidBody2D", RigidBody2D::class, ::RigidBody2D) TypeManager.registerEngineType("RigidBody3D", RigidBody3D::class, ::RigidBody3D) TypeManager.registerEngineType("RootMotionView", RootMotionView::class, ::RootMotionView) + TypeManager.registerEngineType("ScalaScript", ScalaScript::class, ::ScalaScript) TypeManager.registerEngineType("SceneMultiplayer", SceneMultiplayer::class, ::SceneMultiplayer) TypeManager.registerEngineType("SceneReplicationConfig", SceneReplicationConfig::class, ::SceneReplicationConfig) TypeManager.registerEngineType("SceneState", SceneState::class, ::SceneState) diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/JvmScript.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/JvmScript.kt index 3aeb5effda..19934f358a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/JvmScript.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/JvmScript.kt @@ -22,8 +22,8 @@ public open class JvmScript internal constructor() : Script() { createNativeObject(324, scriptIndex) } - public final fun new(vararg args: Any?): Any? { - TransferContext.writeArguments( *args.map { ANY to it }.toTypedArray()) + public final fun new(): Any? { + TransferContext.writeArguments() TransferContext.callMethod(ptr, MethodBindings.newPtr, ANY) return (TransferContext.readReturnValue(ANY) as Any?) } @@ -31,6 +31,6 @@ public open class JvmScript internal constructor() : Script() { public companion object public object MethodBindings { - internal val newPtr: VoidPtr = TypeManager.getMethodBindPtr("JvmScript", "new", 1545262638) + internal val newPtr: VoidPtr = TypeManager.getMethodBindPtr("JvmScript", "new", 1460262497) } } diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScalaScript.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScalaScript.kt new file mode 100644 index 0000000000..2faf1b5ed0 --- /dev/null +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScalaScript.kt @@ -0,0 +1,23 @@ +// THIS FILE IS GENERATED! DO NOT EDIT IT MANUALLY! +@file:Suppress("PackageDirectoryMismatch", "unused", "FunctionName", "RedundantModalityModifier", + "UNCHECKED_CAST", "JoinDeclarationAndAssignment", "USELESS_CAST", + "RemoveRedundantQualifierName", "NOTHING_TO_INLINE", "NON_FINAL_MEMBER_IN_OBJECT", + "RedundantVisibilityModifier", "RedundantUnitReturnType", "MemberVisibilityCanBePrivate") + +package godot.api + +import godot.`annotation`.GodotBaseType +import kotlin.Int +import kotlin.Suppress +import kotlin.Unit + +@GodotBaseType +public open class ScalaScript : JvmScript() { + public override fun new(scriptIndex: Int): Unit { + createNativeObject(567, scriptIndex) + } + + public companion object + + public object MethodBindings +} diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneMultiplayer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneMultiplayer.kt index 42c6c53001..9b959e2ab4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneMultiplayer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneMultiplayer.kt @@ -190,7 +190,7 @@ public open class SceneMultiplayer : MultiplayerAPI() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(567, scriptIndex) + createNativeObject(568, scriptIndex) } public final fun setRootPath(path: NodePath): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneReplicationConfig.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneReplicationConfig.kt index c28fddb0ff..f0af669f80 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneReplicationConfig.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneReplicationConfig.kt @@ -29,7 +29,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class SceneReplicationConfig : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(568, scriptIndex) + createNativeObject(569, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneState.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneState.kt index 111962d44a..90d4d91004 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneState.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneState.kt @@ -43,7 +43,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class SceneState internal constructor() : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(569, scriptIndex) + createNativeObject(570, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTree.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTree.kt index 0117df948a..4bd82d7586 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTree.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTree.kt @@ -260,7 +260,7 @@ public open class SceneTree : MainLoop() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(570, scriptIndex) + createNativeObject(571, scriptIndex) } public final fun getRoot(): Window? { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTreeTimer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTreeTimer.kt index 7fca19f62f..ad35bc3396 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTreeTimer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SceneTreeTimer.kt @@ -70,7 +70,7 @@ public open class SceneTreeTimer internal constructor() : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(571, scriptIndex) + createNativeObject(572, scriptIndex) } public final fun setTimeLeft(time: Double): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Script.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Script.kt index e4e0711bbf..41ac25c10d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Script.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Script.kt @@ -59,7 +59,7 @@ public open class Script internal constructor() : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(572, scriptIndex) + createNativeObject(573, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptExtension.kt index 6b95758e66..d8ade9a7f6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptExtension.kt @@ -22,7 +22,7 @@ import kotlin.Unit @GodotBaseType public open class ScriptExtension : Script() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(573, scriptIndex) + createNativeObject(574, scriptIndex) } public open fun _editorCanReloadFromFile(): Boolean { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguage.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguage.kt index feb2f03586..0e2346d7ed 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguage.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguage.kt @@ -15,7 +15,7 @@ import kotlin.Unit @GodotBaseType public open class ScriptLanguage internal constructor() : Object() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(574, scriptIndex) + createNativeObject(575, scriptIndex) } public enum class ScriptNameCasing( diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguageExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguageExtension.kt index d34ea43ec0..a56937a5f5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguageExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScriptLanguageExtension.kt @@ -24,7 +24,7 @@ import kotlin.Unit @GodotBaseType public open class ScriptLanguageExtension : ScriptLanguage() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(575, scriptIndex) + createNativeObject(576, scriptIndex) } public open fun _getName(): String { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollBar.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollBar.kt index f014e07b68..dff910f0df 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollBar.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollBar.kt @@ -44,7 +44,7 @@ public open class ScrollBar internal constructor() : Range() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(576, scriptIndex) + createNativeObject(577, scriptIndex) } public final fun setCustomStep(step: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollContainer.kt index 406c5519f8..f67c97662d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ScrollContainer.kt @@ -175,7 +175,7 @@ public open class ScrollContainer : Container() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(577, scriptIndex) + createNativeObject(578, scriptIndex) } public final fun setHScroll(`value`: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SegmentShape2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SegmentShape2D.kt index 5fd35c5f6f..f1508f6d25 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SegmentShape2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SegmentShape2D.kt @@ -65,7 +65,7 @@ public open class SegmentShape2D : Shape2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(578, scriptIndex) + createNativeObject(579, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Semaphore.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Semaphore.kt index 6e6a109e88..52b4ebf61a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Semaphore.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Semaphore.kt @@ -37,7 +37,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class Semaphore : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(579, scriptIndex) + createNativeObject(580, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape2D.kt index a99326dcf4..2aafd8b796 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape2D.kt @@ -55,7 +55,7 @@ public open class SeparationRayShape2D : Shape2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(580, scriptIndex) + createNativeObject(581, scriptIndex) } public final fun setLength(length: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape3D.kt index 636f37a0ce..cd4b935220 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SeparationRayShape3D.kt @@ -55,7 +55,7 @@ public open class SeparationRayShape3D : Shape3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(581, scriptIndex) + createNativeObject(582, scriptIndex) } public final fun setLength(length: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Separator.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Separator.kt index 28a1d7b23f..502686cd78 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Separator.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Separator.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class Separator internal constructor() : Control() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(582, scriptIndex) + createNativeObject(583, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shader.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shader.kt index 21448475cd..d9f916165b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shader.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shader.kt @@ -53,7 +53,7 @@ public open class Shader : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(583, scriptIndex) + createNativeObject(584, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderGlobalsOverride.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderGlobalsOverride.kt index 445b8b2abd..f1d68ac95b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderGlobalsOverride.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderGlobalsOverride.kt @@ -29,7 +29,7 @@ import kotlin.Unit @GodotBaseType public open class ShaderGlobalsOverride : Node() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(584, scriptIndex) + createNativeObject(585, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderInclude.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderInclude.kt index 4f033004b3..3487c682bb 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderInclude.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderInclude.kt @@ -39,7 +39,7 @@ public open class ShaderInclude : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(585, scriptIndex) + createNativeObject(586, scriptIndex) } public final fun setCode(code: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderIncludeDB.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderIncludeDB.kt index 20865da97b..1b7bd61a0c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderIncludeDB.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderIncludeDB.kt @@ -29,7 +29,7 @@ import kotlin.jvm.JvmStatic @GodotBaseType public open class ShaderIncludeDB : Object() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(586, scriptIndex) + createNativeObject(587, scriptIndex) } public companion object { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderMaterial.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderMaterial.kt index 799bc19718..6f49793dc4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderMaterial.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShaderMaterial.kt @@ -49,7 +49,7 @@ public open class ShaderMaterial : Material() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(587, scriptIndex) + createNativeObject(588, scriptIndex) } public final fun setShader(shader: Shader?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape2D.kt index d1d00ac209..d683943ad0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape2D.kt @@ -58,7 +58,7 @@ public open class Shape2D internal constructor() : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(588, scriptIndex) + createNativeObject(589, scriptIndex) } public final fun setCustomSolverBias(bias: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape3D.kt index 3c38fa9c36..a934d0121e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shape3D.kt @@ -61,7 +61,7 @@ public open class Shape3D internal constructor() : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(589, scriptIndex) + createNativeObject(590, scriptIndex) } public final fun setCustomSolverBias(bias: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast2D.kt index 5a850cc5f1..c1aadadb00 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast2D.kt @@ -168,7 +168,7 @@ public open class ShapeCast2D : Node2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(590, scriptIndex) + createNativeObject(591, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast3D.kt index 98773b383d..96b66e5753 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ShapeCast3D.kt @@ -194,7 +194,7 @@ public open class ShapeCast3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(591, scriptIndex) + createNativeObject(592, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shortcut.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shortcut.kt index 49e0aa30f7..bc34996efc 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shortcut.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Shortcut.kt @@ -48,7 +48,7 @@ public open class Shortcut : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(592, scriptIndex) + createNativeObject(593, scriptIndex) } public final fun setEvents(events: VariantArray): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton2D.kt index 2e9f9a9331..b8b5514a94 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton2D.kt @@ -44,7 +44,7 @@ public open class Skeleton2D : Node2D() { public val boneSetupChanged: Signal0 by Signal0 public override fun new(scriptIndex: Int): Unit { - createNativeObject(593, scriptIndex) + createNativeObject(594, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton3D.kt index f3493a52da..73d64d9078 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skeleton3D.kt @@ -149,7 +149,7 @@ public open class Skeleton3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(594, scriptIndex) + createNativeObject(595, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonIK3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonIK3D.kt index e61be1d374..703f3d7dfc 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonIK3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonIK3D.kt @@ -211,7 +211,7 @@ public open class SkeletonIK3D : SkeletonModifier3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(595, scriptIndex) + createNativeObject(596, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2D.kt index ec88fc1256..6542b434f3 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2D.kt @@ -59,7 +59,7 @@ public open class SkeletonModification2D : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(596, scriptIndex) + createNativeObject(597, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DCCDIK.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DCCDIK.kt index c6553cd1a9..c1512bb2df 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DCCDIK.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DCCDIK.kt @@ -82,7 +82,7 @@ public open class SkeletonModification2DCCDIK : SkeletonModification2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(597, scriptIndex) + createNativeObject(598, scriptIndex) } public final fun setTargetNode(targetNodepath: NodePath): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DFABRIK.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DFABRIK.kt index 4cb6e299a6..14dcb8d705 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DFABRIK.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DFABRIK.kt @@ -75,7 +75,7 @@ public open class SkeletonModification2DFABRIK : SkeletonModification2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(598, scriptIndex) + createNativeObject(599, scriptIndex) } public final fun setTargetNode(targetNodepath: NodePath): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DJiggle.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DJiggle.kt index fb34d514a3..8371cade87 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DJiggle.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DJiggle.kt @@ -139,7 +139,7 @@ public open class SkeletonModification2DJiggle : SkeletonModification2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(599, scriptIndex) + createNativeObject(600, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DLookAt.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DLookAt.kt index 0a303d1aee..8239aa5b11 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DLookAt.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DLookAt.kt @@ -69,7 +69,7 @@ public open class SkeletonModification2DLookAt : SkeletonModification2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(600, scriptIndex) + createNativeObject(601, scriptIndex) } public final fun setBone2dNode(bone2dNodepath: NodePath): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DPhysicalBones.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DPhysicalBones.kt index 76ff444517..fe6be4fb36 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DPhysicalBones.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DPhysicalBones.kt @@ -45,7 +45,7 @@ public open class SkeletonModification2DPhysicalBones : SkeletonModification2D() } public override fun new(scriptIndex: Int): Unit { - createNativeObject(601, scriptIndex) + createNativeObject(602, scriptIndex) } public final fun setPhysicalBoneChainLength(length: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DStackHolder.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DStackHolder.kt index 6135a028ba..d10db47a4d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DStackHolder.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DStackHolder.kt @@ -26,7 +26,7 @@ import kotlin.Unit @GodotBaseType public open class SkeletonModification2DStackHolder : SkeletonModification2D() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(602, scriptIndex) + createNativeObject(603, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DTwoBoneIK.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DTwoBoneIK.kt index f67652867d..e61da28715 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DTwoBoneIK.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModification2DTwoBoneIK.kt @@ -91,7 +91,7 @@ public open class SkeletonModification2DTwoBoneIK : SkeletonModification2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(603, scriptIndex) + createNativeObject(604, scriptIndex) } public final fun setTargetNode(targetNodepath: NodePath): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModificationStack2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModificationStack2D.kt index 8faf0ad6e5..3d1e589845 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModificationStack2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModificationStack2D.kt @@ -74,7 +74,7 @@ public open class SkeletonModificationStack2D : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(604, scriptIndex) + createNativeObject(605, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModifier3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModifier3D.kt index 6de2d35d3c..354d0092be 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModifier3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonModifier3D.kt @@ -69,7 +69,7 @@ public open class SkeletonModifier3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(605, scriptIndex) + createNativeObject(606, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfile.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfile.kt index e334ab70c7..65c726c647 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfile.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfile.kt @@ -103,7 +103,7 @@ public open class SkeletonProfile : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(606, scriptIndex) + createNativeObject(607, scriptIndex) } public final fun setRootBone(boneName: StringName): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfileHumanoid.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfileHumanoid.kt index 3ef80cb63c..0248f9727e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfileHumanoid.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkeletonProfileHumanoid.kt @@ -137,7 +137,7 @@ import kotlin.Unit @GodotBaseType public open class SkeletonProfileHumanoid : SkeletonProfile() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(607, scriptIndex) + createNativeObject(608, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skin.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skin.kt index df7f20913a..ed4b36e462 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skin.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Skin.kt @@ -27,7 +27,7 @@ import kotlin.Unit @GodotBaseType public open class Skin : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(608, scriptIndex) + createNativeObject(609, scriptIndex) } public final fun setBindCount(bindCount: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkinReference.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkinReference.kt index 525fb49ec6..635e1da9f6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkinReference.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SkinReference.kt @@ -36,7 +36,7 @@ import kotlin.Unit @GodotBaseType public open class SkinReference internal constructor() : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(609, scriptIndex) + createNativeObject(610, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sky.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sky.kt index bc78b906e5..b5588c36de 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sky.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sky.kt @@ -68,7 +68,7 @@ public open class Sky : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(610, scriptIndex) + createNativeObject(611, scriptIndex) } public final fun setRadianceSize(size: RadianceSize): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Slider.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Slider.kt index 661747adec..8da2d11e16 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Slider.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Slider.kt @@ -87,7 +87,7 @@ public open class Slider internal constructor() : Range() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(611, scriptIndex) + createNativeObject(612, scriptIndex) } public final fun setTicks(count: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SliderJoint3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SliderJoint3D.kt index 24fbc03168..d7a8713794 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SliderJoint3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SliderJoint3D.kt @@ -28,7 +28,7 @@ import kotlin.Unit @GodotBaseType public open class SliderJoint3D : Joint3D() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(612, scriptIndex) + createNativeObject(613, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SoftBody3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SoftBody3D.kt index 72af319f4a..e77cd31929 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SoftBody3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SoftBody3D.kt @@ -188,7 +188,7 @@ public open class SoftBody3D : MeshInstance3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(613, scriptIndex) + createNativeObject(614, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereMesh.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereMesh.kt index 18cfab66db..d03fbd13b8 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereMesh.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereMesh.kt @@ -86,7 +86,7 @@ public open class SphereMesh : PrimitiveMesh() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(614, scriptIndex) + createNativeObject(615, scriptIndex) } public final fun setRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereOccluder3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereOccluder3D.kt index c3baa0dbec..7bfb2ea5b5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereOccluder3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereOccluder3D.kt @@ -39,7 +39,7 @@ public open class SphereOccluder3D : Occluder3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(615, scriptIndex) + createNativeObject(616, scriptIndex) } public final fun setRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereShape3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereShape3D.kt index bb78e88162..4cf1a4f709 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereShape3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SphereShape3D.kt @@ -40,7 +40,7 @@ public open class SphereShape3D : Shape3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(616, scriptIndex) + createNativeObject(617, scriptIndex) } public final fun setRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpinBox.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpinBox.kt index 607822e1d2..36dea5acb3 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpinBox.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpinBox.kt @@ -146,7 +146,7 @@ public open class SpinBox : Range() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(617, scriptIndex) + createNativeObject(618, scriptIndex) } public final fun setHorizontalAlignment(alignment: HorizontalAlignment): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SplitContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SplitContainer.kt index 2781897ffd..7d57377df9 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SplitContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SplitContainer.kt @@ -154,7 +154,7 @@ public open class SplitContainer : Container() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(618, scriptIndex) + createNativeObject(619, scriptIndex) } public final fun setSplitOffset(offset: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpotLight3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpotLight3D.kt index 7032ed07fb..cc3cba58b2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpotLight3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpotLight3D.kt @@ -95,7 +95,7 @@ public open class SpotLight3D : Light3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(619, scriptIndex) + createNativeObject(620, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringArm3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringArm3D.kt index 3954a7fb7e..c6d4af0219 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringArm3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringArm3D.kt @@ -95,7 +95,7 @@ public open class SpringArm3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(620, scriptIndex) + createNativeObject(621, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollision3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollision3D.kt index 31ce288f46..6ffc90f5c2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollision3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollision3D.kt @@ -104,7 +104,7 @@ public open class SpringBoneCollision3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(621, scriptIndex) + createNativeObject(622, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionCapsule3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionCapsule3D.kt index 6f225706b6..f8f8916e44 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionCapsule3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionCapsule3D.kt @@ -60,7 +60,7 @@ public open class SpringBoneCollisionCapsule3D : SpringBoneCollision3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(622, scriptIndex) + createNativeObject(623, scriptIndex) } public final fun setRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionPlane3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionPlane3D.kt index 8c0d5db957..eb4df6eddd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionPlane3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionPlane3D.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class SpringBoneCollisionPlane3D : SpringBoneCollision3D() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(623, scriptIndex) + createNativeObject(624, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionSphere3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionSphere3D.kt index a73f4f1a37..34ece1add4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionSphere3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneCollisionSphere3D.kt @@ -49,7 +49,7 @@ public open class SpringBoneCollisionSphere3D : SpringBoneCollision3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(624, scriptIndex) + createNativeObject(625, scriptIndex) } public final fun setRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneSimulator3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneSimulator3D.kt index 232d9efc7b..cc434085c2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneSimulator3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpringBoneSimulator3D.kt @@ -68,7 +68,7 @@ public open class SpringBoneSimulator3D : SkeletonModifier3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(625, scriptIndex) + createNativeObject(626, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite2D.kt index a65627101c..275475346a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite2D.kt @@ -216,7 +216,7 @@ public open class Sprite2D : Node2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(626, scriptIndex) + createNativeObject(627, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite3D.kt index 3420d0181a..7509237708 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Sprite3D.kt @@ -147,7 +147,7 @@ public open class Sprite3D : SpriteBase3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(627, scriptIndex) + createNativeObject(628, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteBase3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteBase3D.kt index ecb2f482b8..e781b639bd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteBase3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteBase3D.kt @@ -305,7 +305,7 @@ public open class SpriteBase3D internal constructor() : GeometryInstance3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(628, scriptIndex) + createNativeObject(629, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteFrames.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteFrames.kt index fd6d71ad93..378d18ab0b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteFrames.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SpriteFrames.kt @@ -37,7 +37,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class SpriteFrames : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(629, scriptIndex) + createNativeObject(630, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StandardMaterial3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StandardMaterial3D.kt index e1c96ebdf1..99317584ae 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StandardMaterial3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StandardMaterial3D.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class StandardMaterial3D : BaseMaterial3D() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(630, scriptIndex) + createNativeObject(631, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody2D.kt index c2d20fd5cd..0cf317e471 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody2D.kt @@ -85,7 +85,7 @@ public open class StaticBody2D : PhysicsBody2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(631, scriptIndex) + createNativeObject(632, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody3D.kt index 56e7ecb6c3..82c28f36e0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StaticBody3D.kt @@ -90,7 +90,7 @@ public open class StaticBody3D : PhysicsBody3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(632, scriptIndex) + createNativeObject(633, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StatusIndicator.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StatusIndicator.kt index cab3cf855b..f79ece8638 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StatusIndicator.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StatusIndicator.kt @@ -84,7 +84,7 @@ public open class StatusIndicator : Node() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(633, scriptIndex) + createNativeObject(634, scriptIndex) } public final fun setTooltip(tooltip: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeer.kt index d2a7c35a84..5d385bdf68 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeer.kt @@ -55,7 +55,7 @@ public open class StreamPeer internal constructor() : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(634, scriptIndex) + createNativeObject(635, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerBuffer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerBuffer.kt index e0f4b93c88..d7e5fa502b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerBuffer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerBuffer.kt @@ -55,7 +55,7 @@ public open class StreamPeerBuffer : StreamPeer() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(635, scriptIndex) + createNativeObject(636, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerExtension.kt index 118819324b..b428095a82 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerExtension.kt @@ -15,7 +15,7 @@ import kotlin.Unit @GodotBaseType public open class StreamPeerExtension : StreamPeer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(636, scriptIndex) + createNativeObject(637, scriptIndex) } public open fun _getAvailableBytes(): Int { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerGZIP.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerGZIP.kt index c4515d12da..770694f461 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerGZIP.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerGZIP.kt @@ -37,7 +37,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class StreamPeerGZIP : StreamPeer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(637, scriptIndex) + createNativeObject(638, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTCP.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTCP.kt index 940cbf6bd0..4be323f75d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTCP.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTCP.kt @@ -34,7 +34,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class StreamPeerTCP : StreamPeer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(638, scriptIndex) + createNativeObject(639, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTLS.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTLS.kt index 4e04fef2a8..09509e51f0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTLS.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StreamPeerTLS.kt @@ -33,7 +33,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class StreamPeerTLS : StreamPeer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(639, scriptIndex) + createNativeObject(640, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBox.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBox.kt index 34f1c11bf6..a9923e9f90 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBox.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBox.kt @@ -107,7 +107,7 @@ public open class StyleBox : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(640, scriptIndex) + createNativeObject(641, scriptIndex) } public open fun _draw(toCanvasItem: RID, rect: Rect2): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxEmpty.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxEmpty.kt index 94f3d0f374..6957593d11 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxEmpty.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxEmpty.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class StyleBoxEmpty : StyleBox() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(641, scriptIndex) + createNativeObject(642, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxFlat.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxFlat.kt index 5fdfd0aab8..e6699523c5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxFlat.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxFlat.kt @@ -396,7 +396,7 @@ public open class StyleBoxFlat : StyleBox() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(642, scriptIndex) + createNativeObject(643, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxLine.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxLine.kt index 10bbc8f40c..8125dfe180 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxLine.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxLine.kt @@ -99,7 +99,7 @@ public open class StyleBoxLine : StyleBox() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(643, scriptIndex) + createNativeObject(644, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxTexture.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxTexture.kt index dcac546c62..28246690b1 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxTexture.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/StyleBoxTexture.kt @@ -239,7 +239,7 @@ public open class StyleBoxTexture : StyleBox() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(644, scriptIndex) + createNativeObject(645, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewport.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewport.kt index ecafd3c56c..f96447bd9d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewport.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewport.kt @@ -116,7 +116,7 @@ public open class SubViewport : Viewport() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(645, scriptIndex) + createNativeObject(646, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewportContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewportContainer.kt index 7165241f6f..ece2aa767e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewportContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubViewportContainer.kt @@ -82,7 +82,7 @@ public open class SubViewportContainer : Container() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(646, scriptIndex) + createNativeObject(647, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubtweenTweener.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubtweenTweener.kt index 4049439273..3aba7b581b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubtweenTweener.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SubtweenTweener.kt @@ -27,7 +27,7 @@ import kotlin.Unit @GodotBaseType public open class SubtweenTweener : Tweener() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(647, scriptIndex) + createNativeObject(648, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SurfaceTool.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SurfaceTool.kt index bebc9a4ca0..42667f29b2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SurfaceTool.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SurfaceTool.kt @@ -91,7 +91,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class SurfaceTool : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(648, scriptIndex) + createNativeObject(649, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SyntaxHighlighter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SyntaxHighlighter.kt index e79f8ff782..3b1abf0f89 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SyntaxHighlighter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SyntaxHighlighter.kt @@ -30,7 +30,7 @@ import kotlin.Unit @GodotBaseType public open class SyntaxHighlighter : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(649, scriptIndex) + createNativeObject(650, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SystemFont.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SystemFont.kt index ce307ba902..0ffed133d3 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SystemFont.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/SystemFont.kt @@ -241,7 +241,7 @@ public open class SystemFont : Font() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(650, scriptIndex) + createNativeObject(651, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TCPServer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TCPServer.kt index c70976a6c1..a81ef325bd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TCPServer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TCPServer.kt @@ -35,7 +35,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class TCPServer : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(651, scriptIndex) + createNativeObject(652, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TLSOptions.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TLSOptions.kt index 432dc5c49a..eb387e0930 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TLSOptions.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TLSOptions.kt @@ -43,7 +43,7 @@ import kotlin.jvm.JvmStatic @GodotBaseType public open class TLSOptions internal constructor() : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(652, scriptIndex) + createNativeObject(653, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabBar.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabBar.kt index d3d0aff214..5ba77bedc6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabBar.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabBar.kt @@ -230,7 +230,7 @@ public open class TabBar : Control() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(653, scriptIndex) + createNativeObject(654, scriptIndex) } public final fun setTabCount(count: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabContainer.kt index 56a341dccf..d19de5e307 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TabContainer.kt @@ -208,7 +208,7 @@ public open class TabContainer : Container() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(654, scriptIndex) + createNativeObject(655, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextEdit.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextEdit.kt index 0ac3ac2418..a3b26fdb56 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextEdit.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextEdit.kt @@ -617,7 +617,7 @@ public open class TextEdit : Control() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(655, scriptIndex) + createNativeObject(656, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextLine.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextLine.kt index d37c3a780c..1556a37a79 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextLine.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextLine.kt @@ -149,7 +149,7 @@ public open class TextLine : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(656, scriptIndex) + createNativeObject(657, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextMesh.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextMesh.kt index 979f1984e6..5e335bf1f0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextMesh.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextMesh.kt @@ -264,7 +264,7 @@ public open class TextMesh : PrimitiveMesh() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(657, scriptIndex) + createNativeObject(658, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextParagraph.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextParagraph.kt index d779f75113..f465880ed3 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextParagraph.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextParagraph.kt @@ -197,7 +197,7 @@ public open class TextParagraph : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(658, scriptIndex) + createNativeObject(659, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServer.kt index 39c26f907a..2b221b9005 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServer.kt @@ -108,7 +108,7 @@ public infix fun Long.and(other: TextServer.FontStyle): Long = this.and(other.fl @GodotBaseType public open class TextServer internal constructor() : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(659, scriptIndex) + createNativeObject(660, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerAdvanced.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerAdvanced.kt index 4121aad15c..6e2fc2ad36 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerAdvanced.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerAdvanced.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class TextServerAdvanced : TextServerExtension() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(660, scriptIndex) + createNativeObject(661, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerDummy.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerDummy.kt index 74a05b0df8..bbb68ca671 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerDummy.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerDummy.kt @@ -35,7 +35,7 @@ import kotlin.Unit @GodotBaseType public open class TextServerDummy : TextServerExtension() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(661, scriptIndex) + createNativeObject(662, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerExtension.kt index a920159a67..3955ed13a0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextServerExtension.kt @@ -38,7 +38,7 @@ import kotlin.Unit @GodotBaseType public open class TextServerExtension : TextServer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(662, scriptIndex) + createNativeObject(663, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture.kt index e058a822ff..ab268cb2dd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class Texture : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(664, scriptIndex) + createNativeObject(665, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2D.kt index 5d1a446485..83b0c01878 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2D.kt @@ -44,7 +44,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class Texture2D : Texture() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(665, scriptIndex) + createNativeObject(666, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArray.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArray.kt index 475ee951b3..4dc32d2e91 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArray.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArray.kt @@ -33,7 +33,7 @@ import kotlin.Unit @GodotBaseType public open class Texture2DArray : ImageTextureLayered() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(666, scriptIndex) + createNativeObject(667, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArrayRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArrayRD.kt index da4af8f499..d7e0fc866b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArrayRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DArrayRD.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class Texture2DArrayRD : TextureLayeredRD() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(667, scriptIndex) + createNativeObject(668, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DRD.kt index 9158e73fc9..422448bbca 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture2DRD.kt @@ -36,7 +36,7 @@ public open class Texture2DRD : Texture2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(668, scriptIndex) + createNativeObject(669, scriptIndex) } public final fun setTextureRdRid(textureRdRid: RID): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3D.kt index eeb308bc76..48c488a499 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3D.kt @@ -35,7 +35,7 @@ import kotlin.Unit @GodotBaseType public open class Texture3D : Texture() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(669, scriptIndex) + createNativeObject(670, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3DRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3DRD.kt index 65cd5b1a91..6bc618a572 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3DRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Texture3DRD.kt @@ -36,7 +36,7 @@ public open class Texture3DRD : Texture3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(670, scriptIndex) + createNativeObject(671, scriptIndex) } public final fun setTextureRdRid(textureRdRid: RID): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureButton.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureButton.kt index 0214366de7..7ddcd0b83a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureButton.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureButton.kt @@ -159,7 +159,7 @@ public open class TextureButton : BaseButton() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(671, scriptIndex) + createNativeObject(672, scriptIndex) } public final fun setTextureNormal(texture: Texture2D?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapArrayRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapArrayRD.kt index a76f727d41..0b7cf7502b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapArrayRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapArrayRD.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class TextureCubemapArrayRD : TextureLayeredRD() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(672, scriptIndex) + createNativeObject(673, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapRD.kt index 88f1f60f3d..8410535247 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureCubemapRD.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class TextureCubemapRD : TextureLayeredRD() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(673, scriptIndex) + createNativeObject(674, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayered.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayered.kt index 9cbc72ced1..e0d9b6d60a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayered.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayered.kt @@ -36,7 +36,7 @@ import kotlin.Unit @GodotBaseType public open class TextureLayered : Texture() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(674, scriptIndex) + createNativeObject(675, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayeredRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayeredRD.kt index 19babbe656..6203d70598 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayeredRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureLayeredRD.kt @@ -36,7 +36,7 @@ public open class TextureLayeredRD internal constructor() : TextureLayered() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(675, scriptIndex) + createNativeObject(676, scriptIndex) } public final fun setTextureRdRid(textureRdRid: RID): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureProgressBar.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureProgressBar.kt index 7c82b1cca1..bf27e9c7cb 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureProgressBar.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureProgressBar.kt @@ -280,7 +280,7 @@ public open class TextureProgressBar : Range() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(676, scriptIndex) + createNativeObject(677, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureRect.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureRect.kt index 6f66c0af4c..f4fadcbe28 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureRect.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TextureRect.kt @@ -85,7 +85,7 @@ public open class TextureRect : Control() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(677, scriptIndex) + createNativeObject(678, scriptIndex) } public final fun setTexture(texture: Texture2D?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Theme.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Theme.kt index 61a8c14469..11e88a3438 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Theme.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Theme.kt @@ -99,7 +99,7 @@ public open class Theme : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(678, scriptIndex) + createNativeObject(679, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Thread.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Thread.kt index ad860ecb99..ee1764bd8e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Thread.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Thread.kt @@ -46,7 +46,7 @@ import kotlin.jvm.JvmStatic @GodotBaseType public open class Thread : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(680, scriptIndex) + createNativeObject(681, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileData.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileData.kt index e2af634964..a028c49b9f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileData.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileData.kt @@ -191,7 +191,7 @@ public open class TileData : Object() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(681, scriptIndex) + createNativeObject(682, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMap.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMap.kt index e2019b2171..cfe0344a18 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMap.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMap.kt @@ -132,7 +132,7 @@ public open class TileMap : Node2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(682, scriptIndex) + createNativeObject(683, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapLayer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapLayer.kt index bccda60d10..74a737d507 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapLayer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapLayer.kt @@ -224,7 +224,7 @@ public open class TileMapLayer : Node2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(683, scriptIndex) + createNativeObject(684, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapPattern.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapPattern.kt index 4b64a15035..12f1bcdf6c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapPattern.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileMapPattern.kt @@ -33,7 +33,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class TileMapPattern : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(684, scriptIndex) + createNativeObject(685, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSet.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSet.kt index ade92ec513..70f454e5cc 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSet.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSet.kt @@ -126,7 +126,7 @@ public open class TileSet : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(685, scriptIndex) + createNativeObject(686, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetAtlasSource.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetAtlasSource.kt index 6810c4a30c..5069f0f9e7 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetAtlasSource.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetAtlasSource.kt @@ -139,7 +139,7 @@ public open class TileSetAtlasSource : TileSetSource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(686, scriptIndex) + createNativeObject(687, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetScenesCollectionSource.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetScenesCollectionSource.kt index 343b07f431..ab0aacc928 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetScenesCollectionSource.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetScenesCollectionSource.kt @@ -64,7 +64,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class TileSetScenesCollectionSource : TileSetSource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(687, scriptIndex) + createNativeObject(688, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetSource.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetSource.kt index 87cc421bf1..4fadc356f7 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetSource.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TileSetSource.kt @@ -39,7 +39,7 @@ import kotlin.Unit @GodotBaseType public open class TileSetSource internal constructor() : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(688, scriptIndex) + createNativeObject(689, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Timer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Timer.kt index 8a3ae1374b..2fe3eca897 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Timer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Timer.kt @@ -140,7 +140,7 @@ public open class Timer : Node() { get() = getTimeLeft() public override fun new(scriptIndex: Int): Unit { - createNativeObject(690, scriptIndex) + createNativeObject(691, scriptIndex) } public final fun setWaitTime(timeSec: Double): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TorusMesh.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TorusMesh.kt index 3daeba6231..3d21a9e614 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TorusMesh.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TorusMesh.kt @@ -71,7 +71,7 @@ public open class TorusMesh : PrimitiveMesh() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(691, scriptIndex) + createNativeObject(692, scriptIndex) } public final fun setInnerRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TouchScreenButton.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TouchScreenButton.kt index f09294645a..b98a0d6a4b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TouchScreenButton.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TouchScreenButton.kt @@ -155,7 +155,7 @@ public open class TouchScreenButton : Node2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(692, scriptIndex) + createNativeObject(693, scriptIndex) } public final fun setTextureNormal(texture: Texture2D?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Translation.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Translation.kt index 13036ea14d..0921761472 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Translation.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Translation.kt @@ -45,7 +45,7 @@ public open class Translation : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(693, scriptIndex) + createNativeObject(694, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TranslationDomain.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TranslationDomain.kt index fa3ac119c7..d33afcaefb 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TranslationDomain.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TranslationDomain.kt @@ -180,7 +180,7 @@ public open class TranslationDomain : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(694, scriptIndex) + createNativeObject(695, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tree.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tree.kt index 7b1667b258..8055756e08 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tree.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tree.kt @@ -316,7 +316,7 @@ public open class Tree : Control() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(696, scriptIndex) + createNativeObject(697, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TreeItem.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TreeItem.kt index 5a1c52130a..d16201862c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TreeItem.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TreeItem.kt @@ -103,7 +103,7 @@ public open class TreeItem internal constructor() : Object() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(697, scriptIndex) + createNativeObject(698, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TriangleMesh.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TriangleMesh.kt index d3d32c776a..1418d0afe8 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TriangleMesh.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TriangleMesh.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class TriangleMesh : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(698, scriptIndex) + createNativeObject(699, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TubeTrailMesh.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TubeTrailMesh.kt index b4715527b1..33e4db6a81 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TubeTrailMesh.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/TubeTrailMesh.kt @@ -130,7 +130,7 @@ public open class TubeTrailMesh : PrimitiveMesh() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(699, scriptIndex) + createNativeObject(700, scriptIndex) } public final fun setRadius(radius: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tween.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tween.kt index 73234677d2..ffb1e88976 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tween.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tween.kt @@ -198,7 +198,7 @@ public open class Tween : RefCounted() { public val finished: Signal0 by Signal0 public override fun new(scriptIndex: Int): Unit { - createNativeObject(700, scriptIndex) + createNativeObject(701, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tweener.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tweener.kt index 7437c1f048..af8be3d496 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tweener.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Tweener.kt @@ -26,7 +26,7 @@ public open class Tweener internal constructor() : RefCounted() { public val finished: Signal0 by Signal0 public override fun new(scriptIndex: Int): Unit { - createNativeObject(701, scriptIndex) + createNativeObject(702, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UDPServer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UDPServer.kt index bc7272655a..3e9962b1b4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UDPServer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UDPServer.kt @@ -171,7 +171,7 @@ public open class UDPServer : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(702, scriptIndex) + createNativeObject(703, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNP.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNP.kt index 15294f60f2..1c7830111d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNP.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNP.kt @@ -156,7 +156,7 @@ public open class UPNP : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(703, scriptIndex) + createNativeObject(704, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNPDevice.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNPDevice.kt index a9c9184500..6daf485bea 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNPDevice.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UPNPDevice.kt @@ -98,7 +98,7 @@ public open class UPNPDevice : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(704, scriptIndex) + createNativeObject(705, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UndoRedo.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UndoRedo.kt index d76afd9a13..700aac4d98 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UndoRedo.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UndoRedo.kt @@ -159,7 +159,7 @@ public open class UndoRedo : Object() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(705, scriptIndex) + createNativeObject(706, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UniformSetCacheRD.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UniformSetCacheRD.kt index 69f33be4a0..1fb50d4986 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UniformSetCacheRD.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/UniformSetCacheRD.kt @@ -29,7 +29,7 @@ import kotlin.jvm.JvmStatic @GodotBaseType public open class UniformSetCacheRD : Object() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(706, scriptIndex) + createNativeObject(707, scriptIndex) } public companion object { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VBoxContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VBoxContainer.kt index 71ed1f0cc9..316d52d2b8 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VBoxContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VBoxContainer.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VBoxContainer : BoxContainer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(707, scriptIndex) + createNativeObject(708, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VFlowContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VFlowContainer.kt index 1abfc29962..cdeddcd541 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VFlowContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VFlowContainer.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VFlowContainer : FlowContainer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(708, scriptIndex) + createNativeObject(709, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VScrollBar.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VScrollBar.kt index 4698b6154a..5392a53800 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VScrollBar.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VScrollBar.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VScrollBar : ScrollBar() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(709, scriptIndex) + createNativeObject(710, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSeparator.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSeparator.kt index b674ad9678..72d9760192 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSeparator.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSeparator.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VSeparator : Separator() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(710, scriptIndex) + createNativeObject(711, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSlider.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSlider.kt index 22a3f73db1..125f3ee237 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSlider.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSlider.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VSlider : Slider() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(711, scriptIndex) + createNativeObject(712, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSplitContainer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSplitContainer.kt index 9a76b7e312..a06704a303 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSplitContainer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VSplitContainer.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VSplitContainer : SplitContainer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(712, scriptIndex) + createNativeObject(713, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleBody3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleBody3D.kt index 3864bfede4..eb222f6f1e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleBody3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleBody3D.kt @@ -87,7 +87,7 @@ public open class VehicleBody3D : RigidBody3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(713, scriptIndex) + createNativeObject(714, scriptIndex) } public final fun setEngineForce(engineForce: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleWheel3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleWheel3D.kt index 9e9be8ebc5..15c3dcfaaa 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleWheel3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VehicleWheel3D.kt @@ -226,7 +226,7 @@ public open class VehicleWheel3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(714, scriptIndex) + createNativeObject(715, scriptIndex) } public final fun setRadius(length: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStream.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStream.kt index 5f163856f2..1560312e30 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStream.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStream.kt @@ -40,7 +40,7 @@ public open class VideoStream : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(715, scriptIndex) + createNativeObject(716, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayback.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayback.kt index 95abb31758..2ae9a2d910 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayback.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayback.kt @@ -29,7 +29,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class VideoStreamPlayback : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(716, scriptIndex) + createNativeObject(717, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayer.kt index b12282a5e6..4037cc89a8 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamPlayer.kt @@ -172,7 +172,7 @@ public open class VideoStreamPlayer : Control() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(717, scriptIndex) + createNativeObject(718, scriptIndex) } public final fun setStream(stream: VideoStream?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamTheora.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamTheora.kt index d775dad2d0..b191ecd819 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamTheora.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VideoStreamTheora.kt @@ -21,7 +21,7 @@ import kotlin.Unit @GodotBaseType public open class VideoStreamTheora : VideoStream() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(718, scriptIndex) + createNativeObject(719, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Viewport.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Viewport.kt index 0625c401b8..ee3e34d437 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Viewport.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Viewport.kt @@ -813,7 +813,7 @@ public open class Viewport internal constructor() : Node() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(719, scriptIndex) + createNativeObject(720, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ViewportTexture.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ViewportTexture.kt index 26bca212ce..07edadf676 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ViewportTexture.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ViewportTexture.kt @@ -67,7 +67,7 @@ public open class ViewportTexture : Texture2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(720, scriptIndex) + createNativeObject(721, scriptIndex) } public final fun setViewportPathInScene(path: NodePath): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler2D.kt index ef551d4a17..92bc673699 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler2D.kt @@ -63,7 +63,7 @@ public open class VisibleOnScreenEnabler2D : VisibleOnScreenNotifier2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(721, scriptIndex) + createNativeObject(722, scriptIndex) } public final fun setEnableMode(mode: EnableMode): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler3D.kt index 34325643a8..e1681f0d0f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenEnabler3D.kt @@ -64,7 +64,7 @@ public open class VisibleOnScreenEnabler3D : VisibleOnScreenNotifier3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(722, scriptIndex) + createNativeObject(723, scriptIndex) } public final fun setEnableMode(mode: EnableMode): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier2D.kt index 482436ceaf..4f64825c6c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier2D.kt @@ -66,7 +66,7 @@ public open class VisibleOnScreenNotifier2D : Node2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(723, scriptIndex) + createNativeObject(724, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier3D.kt index dc6d98efca..2b201ef2e1 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisibleOnScreenNotifier3D.kt @@ -67,7 +67,7 @@ public open class VisibleOnScreenNotifier3D : VisualInstance3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(724, scriptIndex) + createNativeObject(725, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualInstance3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualInstance3D.kt index db6ca4c383..7b3a27eef2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualInstance3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualInstance3D.kt @@ -95,7 +95,7 @@ public open class VisualInstance3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(725, scriptIndex) + createNativeObject(726, scriptIndex) } public open fun _getAabb(): AABB { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShader.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShader.kt index 63630d721d..d26df0ee9c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShader.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShader.kt @@ -65,7 +65,7 @@ public open class VisualShader : Shader() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(726, scriptIndex) + createNativeObject(727, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNode.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNode.kt index 40ba04914e..89b41f899e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNode.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNode.kt @@ -63,7 +63,7 @@ public open class VisualShaderNode internal constructor() : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(727, scriptIndex) + createNativeObject(728, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBillboard.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBillboard.kt index 2595a50ec9..83a10405f9 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBillboard.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBillboard.kt @@ -50,7 +50,7 @@ public open class VisualShaderNodeBillboard : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(728, scriptIndex) + createNativeObject(729, scriptIndex) } public final fun setBillboardType(billboardType: BillboardType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanConstant.kt index 308fcef324..4772d64df0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanConstant.kt @@ -37,7 +37,7 @@ public open class VisualShaderNodeBooleanConstant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(729, scriptIndex) + createNativeObject(730, scriptIndex) } public final fun setConstant(constant: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanParameter.kt index c2951b3274..7c1af9a27f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeBooleanParameter.kt @@ -46,7 +46,7 @@ public open class VisualShaderNodeBooleanParameter : VisualShaderNodeParameter() } public override fun new(scriptIndex: Int): Unit { - createNativeObject(730, scriptIndex) + createNativeObject(731, scriptIndex) } public final fun setDefaultValueEnabled(enabled: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeClamp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeClamp.kt index 5868a243a2..9e5ec7ab7f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeClamp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeClamp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeClamp : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(731, scriptIndex) + createNativeObject(732, scriptIndex) } public final fun setOpType(opType: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorConstant.kt index 482abc59d5..3b7eb98e98 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorConstant.kt @@ -47,7 +47,7 @@ public open class VisualShaderNodeColorConstant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(732, scriptIndex) + createNativeObject(733, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorFunc.kt index a374b57abd..4954d2cf48 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorFunc.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeColorFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(733, scriptIndex) + createNativeObject(734, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorOp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorOp.kt index 9172d75b6c..404cdf361f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorOp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorOp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeColorOp : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(734, scriptIndex) + createNativeObject(735, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorParameter.kt index 2e05fdf4d5..006ed04617 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeColorParameter.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeColorParameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(735, scriptIndex) + createNativeObject(736, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeComment.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeComment.kt index 9390dc1794..ee28bd2bdd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeComment.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeComment.kt @@ -37,7 +37,7 @@ public open class VisualShaderNodeComment : VisualShaderNodeFrame() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(736, scriptIndex) + createNativeObject(737, scriptIndex) } public final fun setDescription(description: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCompare.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCompare.kt index 9b37fb8285..b26778e8a7 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCompare.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCompare.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeCompare : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(737, scriptIndex) + createNativeObject(738, scriptIndex) } public final fun setComparisonType(type: ComparisonType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeConstant.kt index a6736814a6..14b76fd715 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeConstant.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeConstant internal constructor() : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(738, scriptIndex) + createNativeObject(739, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemap.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemap.kt index babc9bbb3a..05200326ca 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemap.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemap.kt @@ -59,7 +59,7 @@ public open class VisualShaderNodeCubemap : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(739, scriptIndex) + createNativeObject(740, scriptIndex) } public final fun setSource(`value`: Source): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemapParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemapParameter.kt index faffdef327..7402178a28 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemapParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCubemapParameter.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeCubemapParameter : VisualShaderNodeTextureParameter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(740, scriptIndex) + createNativeObject(741, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveTexture.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveTexture.kt index 45d2fc25ab..09703b2ec4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveTexture.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveTexture.kt @@ -34,7 +34,7 @@ public open class VisualShaderNodeCurveTexture : VisualShaderNodeResizableBase() } public override fun new(scriptIndex: Int): Unit { - createNativeObject(741, scriptIndex) + createNativeObject(742, scriptIndex) } public final fun setTexture(texture: CurveTexture?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveXYZTexture.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveXYZTexture.kt index bacbc881de..fc31093e4b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveXYZTexture.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCurveXYZTexture.kt @@ -34,7 +34,7 @@ public open class VisualShaderNodeCurveXYZTexture : VisualShaderNodeResizableBas } public override fun new(scriptIndex: Int): Unit { - createNativeObject(742, scriptIndex) + createNativeObject(743, scriptIndex) } public final fun setTexture(texture: CurveXYZTexture?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCustom.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCustom.kt index 77122db8d7..867fe88d93 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCustom.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeCustom.kt @@ -39,7 +39,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeCustom : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(743, scriptIndex) + createNativeObject(744, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDerivativeFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDerivativeFunc.kt index bfd7cbdfe7..f141394178 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDerivativeFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDerivativeFunc.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeDerivativeFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(744, scriptIndex) + createNativeObject(745, scriptIndex) } public final fun setOpType(type: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDeterminant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDeterminant.kt index a03fe45054..cbec83980c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDeterminant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDeterminant.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeDeterminant : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(745, scriptIndex) + createNativeObject(746, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDistanceFade.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDistanceFade.kt index 51d824ef3b..dc42dd6d99 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDistanceFade.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDistanceFade.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeDistanceFade : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(746, scriptIndex) + createNativeObject(747, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDotProduct.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDotProduct.kt index c5c2172a39..e4804dfe0b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDotProduct.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeDotProduct.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeDotProduct : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(747, scriptIndex) + createNativeObject(748, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeExpression.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeExpression.kt index a9ddf7c8fb..324afd8180 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeExpression.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeExpression.kt @@ -41,7 +41,7 @@ public open class VisualShaderNodeExpression : VisualShaderNodeGroupBase() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(748, scriptIndex) + createNativeObject(749, scriptIndex) } public final fun setExpression(expression: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFaceForward.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFaceForward.kt index 6d033311b5..ab5527e093 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFaceForward.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFaceForward.kt @@ -20,7 +20,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeFaceForward : VisualShaderNodeVectorBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(749, scriptIndex) + createNativeObject(750, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatConstant.kt index 8e52a50d74..a3920c6c23 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatConstant.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeFloatConstant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(750, scriptIndex) + createNativeObject(751, scriptIndex) } public final fun setConstant(constant: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatFunc.kt index b08272d5f0..a36d220b5a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatFunc.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeFloatFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(751, scriptIndex) + createNativeObject(752, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatOp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatOp.kt index d33e7e659b..bb3aa0aa82 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatOp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatOp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeFloatOp : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(752, scriptIndex) + createNativeObject(753, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatParameter.kt index 6154924057..d13f8c7e14 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFloatParameter.kt @@ -97,7 +97,7 @@ public open class VisualShaderNodeFloatParameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(753, scriptIndex) + createNativeObject(754, scriptIndex) } public final fun setHint(hint: Hint): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFrame.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFrame.kt index be440a957f..a8affd0a8e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFrame.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFrame.kt @@ -110,7 +110,7 @@ public open class VisualShaderNodeFrame : VisualShaderNodeResizableBase() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(754, scriptIndex) + createNativeObject(755, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFresnel.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFresnel.kt index 4fcdfc49ac..e490b52105 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFresnel.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeFresnel.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeFresnel : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(755, scriptIndex) + createNativeObject(756, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGlobalExpression.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGlobalExpression.kt index 8a834778aa..d4dcced5e2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGlobalExpression.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGlobalExpression.kt @@ -20,7 +20,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeGlobalExpression : VisualShaderNodeExpression() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(756, scriptIndex) + createNativeObject(757, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGroupBase.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGroupBase.kt index bfa52cd263..301c9e2da2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGroupBase.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeGroupBase.kt @@ -28,7 +28,7 @@ import kotlin.Unit public open class VisualShaderNodeGroupBase internal constructor() : VisualShaderNodeResizableBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(757, scriptIndex) + createNativeObject(758, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIf.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIf.kt index a76848c3d4..108992221f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIf.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIf.kt @@ -25,7 +25,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeIf : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(758, scriptIndex) + createNativeObject(759, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeInput.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeInput.kt index 0a88da0efc..5df26b63fb 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeInput.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeInput.kt @@ -43,7 +43,7 @@ public open class VisualShaderNodeInput : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(759, scriptIndex) + createNativeObject(760, scriptIndex) } public final fun setInputName(name: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntConstant.kt index 8ed1f2f74d..662991465d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntConstant.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeIntConstant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(760, scriptIndex) + createNativeObject(761, scriptIndex) } public final fun setConstant(constant: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntFunc.kt index 02901d4fae..8ff26473b1 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntFunc.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeIntFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(761, scriptIndex) + createNativeObject(762, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntOp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntOp.kt index 1eeb74ba17..8d9abf4d56 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntOp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntOp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeIntOp : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(762, scriptIndex) + createNativeObject(763, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntParameter.kt index c127446aa7..e85d2445fa 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIntParameter.kt @@ -122,7 +122,7 @@ public open class VisualShaderNodeIntParameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(763, scriptIndex) + createNativeObject(764, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIs.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIs.kt index af0e69f244..053a9a5d0f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIs.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeIs.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeIs : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(764, scriptIndex) + createNativeObject(765, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeLinearSceneDepth.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeLinearSceneDepth.kt index dc1331c7b2..81135191ee 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeLinearSceneDepth.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeLinearSceneDepth.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeLinearSceneDepth : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(765, scriptIndex) + createNativeObject(766, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMix.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMix.kt index 0a24153149..c21be384d0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMix.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMix.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeMix : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(766, scriptIndex) + createNativeObject(767, scriptIndex) } public final fun setOpType(opType: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMultiplyAdd.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMultiplyAdd.kt index 6a6144b9fc..81d60e95cf 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMultiplyAdd.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeMultiplyAdd.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeMultiplyAdd : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(767, scriptIndex) + createNativeObject(768, scriptIndex) } public final fun setOpType(type: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOuterProduct.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOuterProduct.kt index ee16ac1c06..2a9b051598 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOuterProduct.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOuterProduct.kt @@ -20,7 +20,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeOuterProduct : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(768, scriptIndex) + createNativeObject(769, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOutput.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOutput.kt index 803064a7c8..57fc743e5a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOutput.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeOutput.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeOutput internal constructor() : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(769, scriptIndex) + createNativeObject(770, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameter.kt index 641e17adb2..6626dc4dc1 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameter.kt @@ -50,7 +50,7 @@ public open class VisualShaderNodeParameter internal constructor() : VisualShade } public override fun new(scriptIndex: Int): Unit { - createNativeObject(770, scriptIndex) + createNativeObject(771, scriptIndex) } public final fun setParameterName(name: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameterRef.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameterRef.kt index d0734d2ebd..61160048ee 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameterRef.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParameterRef.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeParameterRef : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(771, scriptIndex) + createNativeObject(772, scriptIndex) } public final fun setParameterName(name: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleAccelerator.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleAccelerator.kt index 1789352ace..44c98a47b6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleAccelerator.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleAccelerator.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeParticleAccelerator : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(772, scriptIndex) + createNativeObject(773, scriptIndex) } public final fun setMode(mode: Mode): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleBoxEmitter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleBoxEmitter.kt index c7966aba76..9fdd79a90b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleBoxEmitter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleBoxEmitter.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeParticleBoxEmitter : VisualShaderNodeParticleEmitter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(773, scriptIndex) + createNativeObject(774, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleConeVelocity.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleConeVelocity.kt index d8f2212f83..e143fb9f86 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleConeVelocity.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleConeVelocity.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeParticleConeVelocity : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(774, scriptIndex) + createNativeObject(775, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmit.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmit.kt index 12e6a4afc5..971737b08b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmit.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmit.kt @@ -37,7 +37,7 @@ public open class VisualShaderNodeParticleEmit : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(775, scriptIndex) + createNativeObject(776, scriptIndex) } public final fun setFlags(flags: EmitFlags): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmitter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmitter.kt index ee61b8ea59..508f320c7c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmitter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleEmitter.kt @@ -37,7 +37,7 @@ public open class VisualShaderNodeParticleEmitter internal constructor() : Visua } public override fun new(scriptIndex: Int): Unit { - createNativeObject(776, scriptIndex) + createNativeObject(777, scriptIndex) } public final fun setMode2d(enabled: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMeshEmitter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMeshEmitter.kt index d9ca626e18..138ded98d9 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMeshEmitter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMeshEmitter.kt @@ -62,7 +62,7 @@ public open class VisualShaderNodeParticleMeshEmitter : VisualShaderNodeParticle } public override fun new(scriptIndex: Int): Unit { - createNativeObject(777, scriptIndex) + createNativeObject(778, scriptIndex) } public final fun setMesh(mesh: Mesh?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMultiplyByAxisAngle.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMultiplyByAxisAngle.kt index aacb77fccc..bd23823656 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMultiplyByAxisAngle.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleMultiplyByAxisAngle.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeParticleMultiplyByAxisAngle : VisualShaderNode } public override fun new(scriptIndex: Int): Unit { - createNativeObject(778, scriptIndex) + createNativeObject(779, scriptIndex) } public final fun setDegreesMode(enabled: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleOutput.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleOutput.kt index f3232810ca..4887667671 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleOutput.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleOutput.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeParticleOutput : VisualShaderNodeOutput() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(779, scriptIndex) + createNativeObject(780, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRandomness.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRandomness.kt index 416a8d4ee3..97fa371552 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRandomness.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRandomness.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeParticleRandomness : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(780, scriptIndex) + createNativeObject(781, scriptIndex) } public final fun setOpType(type: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRingEmitter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRingEmitter.kt index 705e5cc58f..fdb887d359 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRingEmitter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleRingEmitter.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeParticleRingEmitter : VisualShaderNodeParticleEmitter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(781, scriptIndex) + createNativeObject(782, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleSphereEmitter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleSphereEmitter.kt index b51648221e..94a56a7fb0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleSphereEmitter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeParticleSphereEmitter.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeParticleSphereEmitter : VisualShaderNodeParticleEmitter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(782, scriptIndex) + createNativeObject(783, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeProximityFade.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeProximityFade.kt index 915b0dd9a4..3aebd52202 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeProximityFade.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeProximityFade.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeProximityFade : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(783, scriptIndex) + createNativeObject(784, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRandomRange.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRandomRange.kt index 0bf515420e..a937de26a4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRandomRange.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRandomRange.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeRandomRange : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(784, scriptIndex) + createNativeObject(785, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRemap.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRemap.kt index c4a2200e1a..d43f2b9b10 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRemap.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRemap.kt @@ -33,7 +33,7 @@ public open class VisualShaderNodeRemap : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(785, scriptIndex) + createNativeObject(786, scriptIndex) } public final fun setOpType(opType: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeReroute.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeReroute.kt index 2304465dc7..c5162f0b15 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeReroute.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeReroute.kt @@ -28,7 +28,7 @@ public open class VisualShaderNodeReroute : VisualShaderNode() { get() = getPortType() public override fun new(scriptIndex: Int): Unit { - createNativeObject(786, scriptIndex) + createNativeObject(787, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeResizableBase.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeResizableBase.kt index 75850e7ab9..b021a7f271 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeResizableBase.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeResizableBase.kt @@ -45,7 +45,7 @@ public open class VisualShaderNodeResizableBase internal constructor() : VisualS } public override fun new(scriptIndex: Int): Unit { - createNativeObject(787, scriptIndex) + createNativeObject(788, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRotationByAxis.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRotationByAxis.kt index d4a8a8db99..f2abaa9d2b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRotationByAxis.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeRotationByAxis.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeRotationByAxis : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(788, scriptIndex) + createNativeObject(789, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFRaymarch.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFRaymarch.kt index 56d9c857c1..77a7c25966 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFRaymarch.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFRaymarch.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeSDFRaymarch : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(789, scriptIndex) + createNativeObject(790, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFToScreenUV.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFToScreenUV.kt index 19529df317..a378a00b58 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFToScreenUV.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSDFToScreenUV.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeSDFToScreenUV : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(790, scriptIndex) + createNativeObject(791, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSample3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSample3D.kt index 1a683a2e10..729abbe98f 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSample3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSample3D.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeSample3D internal constructor() : VisualShader } public override fun new(scriptIndex: Int): Unit { - createNativeObject(791, scriptIndex) + createNativeObject(792, scriptIndex) } public final fun setSource(`value`: Source): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenNormalWorldSpace.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenNormalWorldSpace.kt index c47c6aefb2..28a340cb81 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenNormalWorldSpace.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenNormalWorldSpace.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeScreenNormalWorldSpace : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(792, scriptIndex) + createNativeObject(793, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenUVToSDF.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenUVToSDF.kt index 275c3f7b70..77a1380daa 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenUVToSDF.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeScreenUVToSDF.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeScreenUVToSDF : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(793, scriptIndex) + createNativeObject(794, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSmoothStep.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSmoothStep.kt index 51c1793242..38aea8b8f4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSmoothStep.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSmoothStep.kt @@ -38,7 +38,7 @@ public open class VisualShaderNodeSmoothStep : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(794, scriptIndex) + createNativeObject(795, scriptIndex) } public final fun setOpType(opType: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeStep.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeStep.kt index 3995a74438..6b6c0c3a3a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeStep.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeStep.kt @@ -37,7 +37,7 @@ public open class VisualShaderNodeStep : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(795, scriptIndex) + createNativeObject(796, scriptIndex) } public final fun setOpType(opType: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSwitch.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSwitch.kt index b9104c82c0..a0bcceaf27 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSwitch.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeSwitch.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeSwitch : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(796, scriptIndex) + createNativeObject(797, scriptIndex) } public final fun setOpType(type: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture.kt index 29960d443e..2fae728120 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture.kt @@ -60,7 +60,7 @@ public open class VisualShaderNodeTexture : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(797, scriptIndex) + createNativeObject(798, scriptIndex) } public final fun setSource(`value`: Source): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArray.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArray.kt index 1d8cb2986a..e9f0222cee 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArray.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArray.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeTexture2DArray : VisualShaderNodeSample3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(798, scriptIndex) + createNativeObject(799, scriptIndex) } public final fun setTextureArray(`value`: TextureLayered?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArrayParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArrayParameter.kt index e35ecf49b6..85bf6079f6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArrayParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DArrayParameter.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTexture2DArrayParameter : VisualShaderNodeTextureParameter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(799, scriptIndex) + createNativeObject(800, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DParameter.kt index c401549a9e..e7f16ae904 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture2DParameter.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTexture2DParameter : VisualShaderNodeTextureParameter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(800, scriptIndex) + createNativeObject(801, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3D.kt index c0eb899974..90f0484ea1 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3D.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeTexture3D : VisualShaderNodeSample3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(801, scriptIndex) + createNativeObject(802, scriptIndex) } public final fun setTexture(`value`: Texture3D?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3DParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3DParameter.kt index 28c4231dcd..cf2d3a5775 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3DParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTexture3DParameter.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTexture3DParameter : VisualShaderNodeTextureParameter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(802, scriptIndex) + createNativeObject(803, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameter.kt index 0553d5de90..a8f2ceae3b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameter.kt @@ -81,7 +81,7 @@ public open class VisualShaderNodeTextureParameter internal constructor() : } public override fun new(scriptIndex: Int): Unit { - createNativeObject(803, scriptIndex) + createNativeObject(804, scriptIndex) } public final fun setTextureType(type: TextureType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameterTriplanar.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameterTriplanar.kt index 4a626e0d71..29167d4958 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameterTriplanar.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureParameterTriplanar.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTextureParameterTriplanar : VisualShaderNodeTextureParameter() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(804, scriptIndex) + createNativeObject(805, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDF.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDF.kt index 581656e021..be711a2a82 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDF.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDF.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTextureSDF : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(805, scriptIndex) + createNativeObject(806, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDFNormal.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDFNormal.kt index ea7613c4da..25bb6e02bf 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDFNormal.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTextureSDFNormal.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTextureSDFNormal : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(806, scriptIndex) + createNativeObject(807, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformCompose.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformCompose.kt index 14886d8cc6..671ba8cd64 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformCompose.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformCompose.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTransformCompose : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(807, scriptIndex) + createNativeObject(808, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformConstant.kt index ec978fc480..6271870c6e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformConstant.kt @@ -45,7 +45,7 @@ public open class VisualShaderNodeTransformConstant : VisualShaderNodeConstant() } public override fun new(scriptIndex: Int): Unit { - createNativeObject(808, scriptIndex) + createNativeObject(809, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformDecompose.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformDecompose.kt index c2c8065221..33105bced2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformDecompose.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformDecompose.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeTransformDecompose : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(809, scriptIndex) + createNativeObject(810, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformFunc.kt index 95bf85e8a3..3c557351db 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformFunc.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeTransformFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(810, scriptIndex) + createNativeObject(811, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformOp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformOp.kt index 953bbf1b82..94756552b5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformOp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformOp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeTransformOp : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(811, scriptIndex) + createNativeObject(812, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformParameter.kt index c4d1361a94..3c9f87ddb6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformParameter.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeTransformParameter : VisualShaderNodeParameter } public override fun new(scriptIndex: Int): Unit { - createNativeObject(812, scriptIndex) + createNativeObject(813, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformVecMult.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformVecMult.kt index dd693e546a..3c1d0111f0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformVecMult.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeTransformVecMult.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeTransformVecMult : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(813, scriptIndex) + createNativeObject(814, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntConstant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntConstant.kt index a5d991c281..0859567fe8 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntConstant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntConstant.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeUIntConstant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(814, scriptIndex) + createNativeObject(815, scriptIndex) } public final fun setConstant(constant: Int): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntFunc.kt index 7e36baeb94..f079e60d74 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntFunc.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeUIntFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(815, scriptIndex) + createNativeObject(816, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntOp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntOp.kt index a74360c913..134ebf1b55 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntOp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntOp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeUIntOp : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(816, scriptIndex) + createNativeObject(817, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntParameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntParameter.kt index f90e29d8d9..f3da09fb46 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntParameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUIntParameter.kt @@ -50,7 +50,7 @@ public open class VisualShaderNodeUIntParameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(817, scriptIndex) + createNativeObject(818, scriptIndex) } public final fun setDefaultValueEnabled(enabled: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVFunc.kt index 38896e363b..7427f8eec2 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVFunc.kt @@ -36,7 +36,7 @@ public open class VisualShaderNodeUVFunc : VisualShaderNode() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(818, scriptIndex) + createNativeObject(819, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVPolarCoord.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVPolarCoord.kt index 1e0b49637c..edb4666b6c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVPolarCoord.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeUVPolarCoord.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeUVPolarCoord : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(819, scriptIndex) + createNativeObject(820, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVarying.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVarying.kt index bc49e477a8..f7effe707a 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVarying.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVarying.kt @@ -49,7 +49,7 @@ public open class VisualShaderNodeVarying internal constructor() : VisualShaderN } public override fun new(scriptIndex: Int): Unit { - createNativeObject(820, scriptIndex) + createNativeObject(821, scriptIndex) } public final fun setVaryingName(name: String): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingGetter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingGetter.kt index b42cf00749..ec15152be5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingGetter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingGetter.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVaryingGetter : VisualShaderNodeVarying() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(821, scriptIndex) + createNativeObject(822, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingSetter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingSetter.kt index c1ce4c7a67..0fc35c2e76 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingSetter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVaryingSetter.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVaryingSetter : VisualShaderNodeVarying() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(822, scriptIndex) + createNativeObject(823, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Constant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Constant.kt index 3dcb68b9db..a73318a197 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Constant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Constant.kt @@ -45,7 +45,7 @@ public open class VisualShaderNodeVec2Constant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(823, scriptIndex) + createNativeObject(824, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Parameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Parameter.kt index da7283752b..e24c2f6e60 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Parameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec2Parameter.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeVec2Parameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(824, scriptIndex) + createNativeObject(825, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Constant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Constant.kt index 6cf727ad70..8ca95c0498 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Constant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Constant.kt @@ -45,7 +45,7 @@ public open class VisualShaderNodeVec3Constant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(825, scriptIndex) + createNativeObject(826, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Parameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Parameter.kt index f44f1d0fb3..e3ed3b4190 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Parameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec3Parameter.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeVec3Parameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(826, scriptIndex) + createNativeObject(827, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Constant.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Constant.kt index d3822d6e06..a5d80d66ac 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Constant.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Constant.kt @@ -45,7 +45,7 @@ public open class VisualShaderNodeVec4Constant : VisualShaderNodeConstant() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(827, scriptIndex) + createNativeObject(828, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Parameter.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Parameter.kt index 4adb834bd6..013276a8fd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Parameter.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVec4Parameter.kt @@ -58,7 +58,7 @@ public open class VisualShaderNodeVec4Parameter : VisualShaderNodeParameter() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(828, scriptIndex) + createNativeObject(829, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorBase.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorBase.kt index d6b51ecc42..c87ff555c0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorBase.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorBase.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeVectorBase internal constructor() : VisualShad } public override fun new(scriptIndex: Int): Unit { - createNativeObject(829, scriptIndex) + createNativeObject(830, scriptIndex) } public final fun setOpType(type: OpType): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorCompose.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorCompose.kt index 8d2185be4e..e49b35a1b0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorCompose.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorCompose.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVectorCompose : VisualShaderNodeVectorBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(830, scriptIndex) + createNativeObject(831, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDecompose.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDecompose.kt index 2eff98944c..801ac2286d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDecompose.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDecompose.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVectorDecompose : VisualShaderNodeVectorBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(831, scriptIndex) + createNativeObject(832, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDistance.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDistance.kt index ec5798e0a2..fb11ae28e6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDistance.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorDistance.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVectorDistance : VisualShaderNodeVectorBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(832, scriptIndex) + createNativeObject(833, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorFunc.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorFunc.kt index dc88ab5a8c..8f0ffd1b58 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorFunc.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorFunc.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeVectorFunc : VisualShaderNodeVectorBase() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(833, scriptIndex) + createNativeObject(834, scriptIndex) } public final fun setFunction(func: Function): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorLen.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorLen.kt index 3830205531..006ded2dc5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorLen.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorLen.kt @@ -17,7 +17,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVectorLen : VisualShaderNodeVectorBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(834, scriptIndex) + createNativeObject(835, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorOp.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorOp.kt index f64d2cb28c..641da8d257 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorOp.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorOp.kt @@ -35,7 +35,7 @@ public open class VisualShaderNodeVectorOp : VisualShaderNodeVectorBase() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(835, scriptIndex) + createNativeObject(836, scriptIndex) } public final fun setOperator(op: Operator): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorRefract.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorRefract.kt index 0dbfbd864b..911dc27b2c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorRefract.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeVectorRefract.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeVectorRefract : VisualShaderNodeVectorBase() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(836, scriptIndex) + createNativeObject(837, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeWorldPositionFromDepth.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeWorldPositionFromDepth.kt index 32e71209de..bc27e845c0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeWorldPositionFromDepth.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VisualShaderNodeWorldPositionFromDepth.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class VisualShaderNodeWorldPositionFromDepth : VisualShaderNode() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(837, scriptIndex) + createNativeObject(838, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGI.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGI.kt index 541f01d4b4..34d0cf7e20 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGI.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGI.kt @@ -118,7 +118,7 @@ public open class VoxelGI : VisualInstance3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(838, scriptIndex) + createNativeObject(839, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGIData.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGIData.kt index 52b670c2c8..cdf27db8fb 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGIData.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/VoxelGIData.kt @@ -141,7 +141,7 @@ public open class VoxelGIData : Resource() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(839, scriptIndex) + createNativeObject(840, scriptIndex) } public final fun allocate( diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WeakRef.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WeakRef.kt index 1f52f62417..df69bf6e9d 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WeakRef.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WeakRef.kt @@ -28,7 +28,7 @@ import kotlin.Unit @GodotBaseType public open class WeakRef : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(840, scriptIndex) + createNativeObject(841, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannel.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannel.kt index faad01944e..bc975d95c0 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannel.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannel.kt @@ -37,7 +37,7 @@ public open class WebRTCDataChannel internal constructor() : PacketPeer() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(841, scriptIndex) + createNativeObject(842, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannelExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannelExtension.kt index 113de78d7e..4dd38d8749 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannelExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCDataChannelExtension.kt @@ -18,7 +18,7 @@ import kotlin.Unit @GodotBaseType public open class WebRTCDataChannelExtension : WebRTCDataChannel() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(842, scriptIndex) + createNativeObject(843, scriptIndex) } public open fun _getAvailablePacketCount(): Int { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCMultiplayerPeer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCMultiplayerPeer.kt index f180f9b6bc..7b59ab77d5 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCMultiplayerPeer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCMultiplayerPeer.kt @@ -47,7 +47,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class WebRTCMultiplayerPeer : MultiplayerPeer() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(843, scriptIndex) + createNativeObject(844, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnection.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnection.kt index 5e4deb8177..7694a74e34 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnection.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnection.kt @@ -74,7 +74,7 @@ public open class WebRTCPeerConnection : RefCounted() { public val dataChannelReceived: Signal1 by Signal1 public override fun new(scriptIndex: Int): Unit { - createNativeObject(844, scriptIndex) + createNativeObject(845, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnectionExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnectionExtension.kt index 9de9b28e79..5c684fcd44 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnectionExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebRTCPeerConnectionExtension.kt @@ -19,7 +19,7 @@ import kotlin.Unit @GodotBaseType public open class WebRTCPeerConnectionExtension : WebRTCPeerConnection() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(845, scriptIndex) + createNativeObject(846, scriptIndex) } public open fun _getConnectionState(): WebRTCPeerConnection.ConnectionState { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketMultiplayerPeer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketMultiplayerPeer.kt index 9ace54ed55..516b90a347 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketMultiplayerPeer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketMultiplayerPeer.kt @@ -127,7 +127,7 @@ public open class WebSocketMultiplayerPeer : MultiplayerPeer() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(846, scriptIndex) + createNativeObject(847, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketPeer.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketPeer.kt index 26d97e453a..6a2764a87e 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketPeer.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebSocketPeer.kt @@ -165,7 +165,7 @@ public open class WebSocketPeer : PacketPeer() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(847, scriptIndex) + createNativeObject(848, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebXRInterface.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebXRInterface.kt index e48ea15475..78460aa9dd 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebXRInterface.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WebXRInterface.kt @@ -369,7 +369,7 @@ public open class WebXRInterface internal constructor() : XRInterface() { get() = getVisibilityState() public override fun new(scriptIndex: Int): Unit { - createNativeObject(848, scriptIndex) + createNativeObject(849, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Window.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Window.kt index 5c5bee7e5a..2cbff4331c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Window.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/Window.kt @@ -677,7 +677,7 @@ public open class Window : Viewport() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(849, scriptIndex) + createNativeObject(850, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World2D.kt index a1051e12ae..4d29e846e6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World2D.kt @@ -56,7 +56,7 @@ public open class World2D : Resource() { get() = getDirectSpaceState() public override fun new(scriptIndex: Int): Unit { - createNativeObject(851, scriptIndex) + createNativeObject(852, scriptIndex) } public final fun getCanvas(): RID { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World3D.kt index a57fd526a3..4d996c4c72 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/World3D.kt @@ -89,7 +89,7 @@ public open class World3D : Resource() { get() = getDirectSpaceState() public override fun new(scriptIndex: Int): Unit { - createNativeObject(852, scriptIndex) + createNativeObject(853, scriptIndex) } public final fun getSpace(): RID { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape2D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape2D.kt index 84bb7661a6..0365984f1c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape2D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape2D.kt @@ -68,7 +68,7 @@ public open class WorldBoundaryShape2D : Shape2D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(853, scriptIndex) + createNativeObject(854, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape3D.kt index 4f7c0f607b..40d819f815 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldBoundaryShape3D.kt @@ -53,7 +53,7 @@ public open class WorldBoundaryShape3D : Shape3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(854, scriptIndex) + createNativeObject(855, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldEnvironment.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldEnvironment.kt index e01c09f472..8aa6e49b3c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldEnvironment.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/WorldEnvironment.kt @@ -65,7 +65,7 @@ public open class WorldEnvironment : Node() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(855, scriptIndex) + createNativeObject(856, scriptIndex) } public final fun setEnvironment(env: Environment?): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/X509Certificate.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/X509Certificate.kt index c34c7ac409..f8702f60e3 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/X509Certificate.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/X509Certificate.kt @@ -30,7 +30,7 @@ import kotlin.Unit @GodotBaseType public open class X509Certificate : Resource() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(856, scriptIndex) + createNativeObject(857, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XMLParser.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XMLParser.kt index 2d39c8c0e6..4250907597 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XMLParser.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XMLParser.kt @@ -71,7 +71,7 @@ import kotlin.Unit @GodotBaseType public open class XMLParser : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(857, scriptIndex) + createNativeObject(858, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRAnchor3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRAnchor3D.kt index 2ab458d514..eddd90830b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRAnchor3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRAnchor3D.kt @@ -35,7 +35,7 @@ import kotlin.Unit @GodotBaseType public open class XRAnchor3D : XRNode3D() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(858, scriptIndex) + createNativeObject(859, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyModifier3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyModifier3D.kt index e4bbda216a..153ae73b0c 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyModifier3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyModifier3D.kt @@ -75,7 +75,7 @@ public open class XRBodyModifier3D : SkeletonModifier3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(859, scriptIndex) + createNativeObject(860, scriptIndex) } public final fun setBodyTracker(trackerName: StringName): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyTracker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyTracker.kt index 6889f79c68..aa2086c340 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyTracker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRBodyTracker.kt @@ -67,7 +67,7 @@ public open class XRBodyTracker : XRPositionalTracker() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(860, scriptIndex) + createNativeObject(861, scriptIndex) } public final fun setHasTrackingData(hasData: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRCamera3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRCamera3D.kt index 432872904e..35ca9d0036 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRCamera3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRCamera3D.kt @@ -25,7 +25,7 @@ import kotlin.Unit @GodotBaseType public open class XRCamera3D : Camera3D() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(861, scriptIndex) + createNativeObject(862, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRController3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRController3D.kt index 5efe27a6e8..df359838ac 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRController3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRController3D.kt @@ -74,7 +74,7 @@ public open class XRController3D : XRNode3D() { public val profileChanged: Signal1 by Signal1 public override fun new(scriptIndex: Int): Unit { - createNativeObject(862, scriptIndex) + createNativeObject(863, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRControllerTracker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRControllerTracker.kt index cdef631079..5fa9cdc762 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRControllerTracker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRControllerTracker.kt @@ -22,7 +22,7 @@ import kotlin.Unit @GodotBaseType public open class XRControllerTracker : XRPositionalTracker() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(863, scriptIndex) + createNativeObject(864, scriptIndex) } public companion object diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceModifier3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceModifier3D.kt index b7abab4e8f..f86dc470b8 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceModifier3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceModifier3D.kt @@ -60,7 +60,7 @@ public open class XRFaceModifier3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(864, scriptIndex) + createNativeObject(865, scriptIndex) } public final fun setFaceTracker(trackerName: StringName): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceTracker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceTracker.kt index 737796fb0d..dd7ef401ca 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceTracker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRFaceTracker.kt @@ -59,7 +59,7 @@ public open class XRFaceTracker : XRTracker() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(865, scriptIndex) + createNativeObject(866, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandModifier3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandModifier3D.kt index 49b2806597..a1cc88fa89 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandModifier3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandModifier3D.kt @@ -57,7 +57,7 @@ public open class XRHandModifier3D : SkeletonModifier3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(866, scriptIndex) + createNativeObject(867, scriptIndex) } public final fun setHandTracker(trackerName: StringName): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandTracker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandTracker.kt index 14aa176da2..9060d6b5bc 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandTracker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRHandTracker.kt @@ -66,7 +66,7 @@ public open class XRHandTracker : XRPositionalTracker() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(867, scriptIndex) + createNativeObject(868, scriptIndex) } public final fun setHasTrackingData(hasData: Boolean): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterface.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterface.kt index d3d304e7f6..b5549e9631 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterface.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterface.kt @@ -96,7 +96,7 @@ public open class XRInterface internal constructor() : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(868, scriptIndex) + createNativeObject(869, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterfaceExtension.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterfaceExtension.kt index 5250083dac..ab813170d6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterfaceExtension.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRInterfaceExtension.kt @@ -44,7 +44,7 @@ import kotlin.Unit @GodotBaseType public open class XRInterfaceExtension : XRInterface() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(869, scriptIndex) + createNativeObject(870, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRNode3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRNode3D.kt index 6c3a2a135c..a2743aeb33 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRNode3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRNode3D.kt @@ -82,7 +82,7 @@ public open class XRNode3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(870, scriptIndex) + createNativeObject(871, scriptIndex) } public final fun setTracker(trackerName: StringName): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XROrigin3D.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XROrigin3D.kt index 7362c62ae6..947afd5021 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XROrigin3D.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XROrigin3D.kt @@ -65,7 +65,7 @@ public open class XROrigin3D : Node3D() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(871, scriptIndex) + createNativeObject(872, scriptIndex) } public final fun setWorldScale(worldScale: Float): Unit { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPose.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPose.kt index 34005ccfe3..9d6848837b 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPose.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPose.kt @@ -143,7 +143,7 @@ public open class XRPose : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(872, scriptIndex) + createNativeObject(873, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPositionalTracker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPositionalTracker.kt index eb4f3b06d9..c9527eccf6 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPositionalTracker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRPositionalTracker.kt @@ -109,7 +109,7 @@ public open class XRPositionalTracker : XRTracker() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(873, scriptIndex) + createNativeObject(874, scriptIndex) } public final fun getTrackerProfile(): String { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRTracker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRTracker.kt index 0fc33334de..78a9b19441 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRTracker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRTracker.kt @@ -78,7 +78,7 @@ public open class XRTracker internal constructor() : RefCounted() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(875, scriptIndex) + createNativeObject(876, scriptIndex) } public final fun getTrackerType(): XRServer.TrackerType { diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRVRS.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRVRS.kt index 219fb9d856..8433c03567 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRVRS.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/XRVRS.kt @@ -79,7 +79,7 @@ public open class XRVRS : Object() { } public override fun new(scriptIndex: Int): Unit { - createNativeObject(876, scriptIndex) + createNativeObject(877, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPPacker.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPPacker.kt index 470cc096e5..1c1d0c20ce 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPPacker.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPPacker.kt @@ -44,7 +44,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class ZIPPacker : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(877, scriptIndex) + createNativeObject(878, scriptIndex) } /** diff --git a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPReader.kt b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPReader.kt index 653961adb8..2535db8bc4 100644 --- a/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPReader.kt +++ b/kt/godot-library/godot-api-library/src/main/kotlin/godot/api/ZIPReader.kt @@ -73,7 +73,7 @@ import kotlin.jvm.JvmOverloads @GodotBaseType public open class ZIPReader : RefCounted() { public override fun new(scriptIndex: Int): Unit { - createNativeObject(878, scriptIndex) + createNativeObject(879, scriptIndex) } /** diff --git a/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisterConstructor.kt b/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisterConstructor.kt deleted file mode 100644 index 4b8a1af307..0000000000 --- a/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisterConstructor.kt +++ /dev/null @@ -1,8 +0,0 @@ -package godot.annotation - -/** - * Registeres a constructor in godot so it can be used from another language - */ -@Target(AnnotationTarget.CONSTRUCTOR) -@Retention(AnnotationRetention.RUNTIME) -annotation class RegisterConstructor diff --git a/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisteredClassMetadata.kt b/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisteredClassMetadata.kt index 7be948a604..e394bfe349 100644 --- a/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisteredClassMetadata.kt +++ b/kt/godot-library/godot-core-library/src/main/kotlin/godot/annotation/RegisteredClassMetadata.kt @@ -6,7 +6,6 @@ annotation class RegisteredClassMetadata( val registeredName: String, val baseType: String, val fqName: String, - val relativeSourcePath: String, val compilationTimeRelativeRegistrationFilePath: String, val projectName: String, val superTypes: String, diff --git a/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Constructors.kt b/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Constructors.kt index 4ca4dcb712..1041777ba4 100644 --- a/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Constructors.kt +++ b/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Constructors.kt @@ -2,184 +2,13 @@ package godot.core -import godot.internal.memory.TransferContext -import godot.common.constants.Constraints import godot.common.interop.ObjectID -import godot.common.interop.VariantConverter import godot.common.interop.VoidPtr -import godot.common.util.threadLocal -abstract class KtConstructor( - vararg argsTypes: VariantConverter +class KtConstructor( + private val constructor: () -> T ) { - val parameterCount: Int = argsTypes.size - val parameterTypes: Array = argsTypes.toList().toTypedArray() - abstract operator fun invoke(): T - fun construct(rawPtr: VoidPtr, instanceId: Long) = KtObject.createScriptInstance(rawPtr, ObjectID(instanceId)) { - TransferContext.readArguments(parameterTypes, paramsArray) - val instance = invoke() - resetParamsArray() - instance - } - - companion object { - val paramsArray by threadLocal { arrayOfNulls(Constraints.MAX_CONSTRUCTOR_ARG_COUNT) } - - fun resetParamsArray() { - paramsArray.fill(null) - } - } -} - -class KtConstructor0( - private val constructor: () -> T -) : KtConstructor() { - override fun invoke(): T { - return constructor() - } -} - -class KtConstructor1( - private val constructor: (P0) -> T, - p0Type: VariantConverter -) : KtConstructor(p0Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0 - ) - } -} - -class KtConstructor2( - private val constructor: (P0, P1) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter -) : KtConstructor(p0Type, p1Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1 - ) - } -} - -class KtConstructor3( - private val constructor: (P0, P1, P2) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter, - p2Type: VariantConverter -) : KtConstructor(p0Type, p1Type, p2Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1, - paramsArray[2] as P2 - ) - } -} - -class KtConstructor4( - private val constructor: (P0, P1, P2, P3) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter, - p2Type: VariantConverter, - p3Type: VariantConverter -) : KtConstructor(p0Type, p1Type, p2Type, p3Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1, - paramsArray[2] as P2, - paramsArray[3] as P3 - ) - } -} - -class KtConstructor5( - private val constructor: (P0, P1, P2, P3, P4) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter, - p2Type: VariantConverter, - p3Type: VariantConverter, - p4Type: VariantConverter -) : KtConstructor(p0Type, p1Type, p2Type, p3Type, p4Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1, - paramsArray[2] as P2, - paramsArray[3] as P3, - paramsArray[4] as P4 - ) - } -} - -class KtConstructor6( - private val constructor: (P0, P1, P2, P3, P4, P5) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter, - p2Type: VariantConverter, - p3Type: VariantConverter, - p4Type: VariantConverter, - p5Type: VariantConverter, -) : KtConstructor(p0Type, p1Type, p2Type, p3Type, p4Type, p5Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1, - paramsArray[2] as P2, - paramsArray[3] as P3, - paramsArray[4] as P4, - paramsArray[5] as P5, - ) - } -} - -class KtConstructor7( - private val constructor: (P0, P1, P2, P3, P4, P5, P6) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter, - p2Type: VariantConverter, - p3Type: VariantConverter, - p4Type: VariantConverter, - p5Type: VariantConverter, - p6Type: VariantConverter, -) : KtConstructor(p0Type, p1Type, p2Type, p3Type, p4Type, p5Type, p6Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1, - paramsArray[2] as P2, - paramsArray[3] as P3, - paramsArray[4] as P4, - paramsArray[5] as P5, - paramsArray[6] as P6, - ) - } -} - -class KtConstructor8( - private val constructor: (P0, P1, P2, P3, P4, P5, P6, P7) -> T, - p0Type: VariantConverter, - p1Type: VariantConverter, - p2Type: VariantConverter, - p3Type: VariantConverter, - p4Type: VariantConverter, - p5Type: VariantConverter, - p6Type: VariantConverter, - p7Type: VariantConverter, -) : KtConstructor(p0Type, p1Type, p2Type, p3Type, p4Type, p5Type, p6Type, p7Type) { - override fun invoke(): T { - return constructor( - paramsArray[0] as P0, - paramsArray[1] as P1, - paramsArray[2] as P2, - paramsArray[3] as P3, - paramsArray[4] as P4, - paramsArray[5] as P5, - paramsArray[6] as P6, - paramsArray[7] as P7, - ) + constructor() } } diff --git a/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/KtClass.kt b/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/KtClass.kt index 89db6fb0f0..0ae3bd8e72 100644 --- a/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/KtClass.kt +++ b/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/KtClass.kt @@ -5,10 +5,10 @@ import godot.internal.memory.TransferContext @Suppress("unused") data class KtClass( val registeredName: String, - val relativeSourcePath: String, + val fqdn: String, val compilationTimeRelativeRegistrationFilePath: String, private val _registeredSupertypes: List, - private val _constructors: List?>, + val constructor: KtConstructor, private val _properties: Map>, private val _functions: Map>, private val _notificationFunctions: List Unit>, @@ -17,8 +17,6 @@ data class KtClass( ) { val registeredSupertypes: Array get() = _registeredSupertypes.toTypedArray() - val constructors: Array?> - get() = _constructors.toTypedArray() val functions: Array> get() = _functions.values.toTypedArray() val properties: Array> diff --git a/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Properties.kt b/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Properties.kt index 72e42be1d7..20480f22f6 100644 --- a/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Properties.kt +++ b/kt/godot-library/godot-core-library/src/main/kotlin/godot/core/Properties.kt @@ -3,7 +3,6 @@ package godot.core import godot.common.interop.VariantConverter import godot.internal.logging.GodotLogging import godot.internal.memory.TransferContext -import kotlin.reflect.KMutableProperty1 data class KtPropertyInfo( val _type: VariantConverter, @@ -26,14 +25,15 @@ data class KtPropertyInfo( open class KtProperty( val ktPropertyInfo: KtPropertyInfo, - protected val kProperty: KMutableProperty1, + protected val getter: (T) -> P, + protected val setter: (T, P) -> Unit, protected val variantConverter: VariantConverter, ) { open fun callGet(instance: T) { try { - TransferContext.writeReturnValue(kProperty.get(instance), variantConverter) + TransferContext.writeReturnValue(getter(instance), variantConverter) } catch (t: Throwable) { - GodotLogging.error("Error calling JVM getter ${kProperty.name} of script $instance from Godot\n:" + t.stackTraceToString()) + GodotLogging.error("Error calling JVM getter ${ktPropertyInfo.name} of script $instance from Godot\n:" + t.stackTraceToString()) TransferContext.writeReturnValue(null, VariantParser.NIL) } } @@ -41,9 +41,9 @@ open class KtProperty( open fun callSet(instance: T) { val arg = extractSetterArgument

() try { - kProperty.set(instance, arg) + setter(instance, arg) } catch (t: Throwable) { - GodotLogging.error("Error calling JVM setter ${kProperty.name} of script $instance from Godot:\n" + t.stackTraceToString()) + GodotLogging.error("Error calling JVM setter ${ktPropertyInfo.name} of script $instance from Godot:\n" + t.stackTraceToString()) } } @@ -57,41 +57,45 @@ open class KtProperty( class KtEnumProperty( ktPropertyInfo: KtPropertyInfo, - kProperty: KMutableProperty1, + getter: (T) -> P, + setter: (T, P) -> Unit, val getValueConverter: (P?) -> Int, val setValueConverter: (Int) -> P ) : KtProperty( ktPropertyInfo, - kProperty, + getter, + setter, VariantCaster.INT ) { override fun callGet(instance: T) { - TransferContext.writeReturnValue(getValueConverter(kProperty.get(instance)), VariantCaster.INT) + TransferContext.writeReturnValue(getValueConverter(getter(instance)), VariantCaster.INT) } override fun callSet(instance: T) { val arg = extractSetterArgument() - kProperty.set(instance, setValueConverter(arg)) + setter(instance, setValueConverter(arg)) } } class KtEnumListProperty, L : Collection

>( ktPropertyInfo: KtPropertyInfo, - kProperty: KMutableProperty1, + getter: (T) -> L, + setter: (T, L) -> Unit, val getValueConverter: (L?) -> VariantArray, val setValueConverter: (VariantArray) -> L ) : KtProperty( ktPropertyInfo, - kProperty, + getter, + setter, VariantParser.ARRAY ) { override fun callGet(instance: T) { - TransferContext.writeReturnValue(getValueConverter(kProperty.get(instance)), VariantParser.ARRAY) + TransferContext.writeReturnValue(getValueConverter(getter(instance)), VariantParser.ARRAY) } override fun callSet(instance: T) { val arg = extractSetterArgument>() - kProperty.set(instance, setValueConverter(arg)) + setter(instance, setValueConverter(arg)) } } diff --git a/kt/godot-library/godot-core-library/src/main/kotlin/godot/registration/Registration.kt b/kt/godot-library/godot-core-library/src/main/kotlin/godot/registration/Registration.kt index 6b18be53d3..a06cec2add 100644 --- a/kt/godot-library/godot-core-library/src/main/kotlin/godot/registration/Registration.kt +++ b/kt/godot-library/godot-core-library/src/main/kotlin/godot/registration/Registration.kt @@ -1,6 +1,7 @@ package godot.registration -import godot.core.PropertyHint +import godot.common.extensions.convertToSnakeCase +import godot.common.interop.VariantConverter import godot.core.KtClass import godot.core.KtConstructor import godot.core.KtEnumListProperty @@ -29,14 +30,13 @@ import godot.core.KtProperty import godot.core.KtPropertyInfo import godot.core.KtRpcConfig import godot.core.KtSignalInfo -import godot.internal.reflection.TypeManager -import godot.common.interop.VariantConverter +import godot.core.PropertyHint import godot.core.VariantParser import godot.core.toVariantArray import godot.core.variantArrayOf -import godot.common.constants.Constraints -import godot.common.extensions.convertToSnakeCase +import godot.internal.reflection.TypeManager import kotlin.reflect.KClass +import kotlin.reflect.KFunction import kotlin.reflect.KFunction1 import kotlin.reflect.KFunction10 import kotlin.reflect.KFunction11 @@ -74,12 +74,12 @@ data class KtFunctionArgument( class ClassBuilderDsl( @PublishedApi internal val registeredName: String, - private val relativeSourcePath: String, + private val fqdn: String, private val compilationTimeRelativeRegistrationFilePath: String, private val superClasses: List, private val baseGodotClass: String ) { - private val constructors = mutableMapOf>() + private lateinit var constructorField: KtConstructor private val functions = mutableMapOf>() private var notificationFunctions = listOf Unit>() @@ -90,13 +90,7 @@ class ClassBuilderDsl( private val signals = mutableMapOf() fun constructor(constructor: KtConstructor) { - require(!constructors.containsKey(constructor.parameterCount)) { - "A constructor with ${constructor.parameterCount} argument(s) already exists." - } - require(constructor.parameterCount <= Constraints.MAX_CONSTRUCTOR_ARG_COUNT) { - "Cannot register a constructor with ${constructor.parameterCount} arguments, max argument count is ${Constraints.MAX_CONSTRUCTOR_ARG_COUNT}" - } - constructors[constructor.parameterCount] = constructor + constructorField = constructor } fun

property( @@ -107,70 +101,108 @@ class ClassBuilderDsl( hint: PropertyHint = PropertyHint.NONE, hintString: String = "", usage: Long + ) = property( + kProperty.name.convertToSnakeCase(), + { instance: T -> kProperty.get(instance) }, + { instance: T, p: P -> kProperty.set(instance, p) }, + variantType, + type, + className, + hint, + hintString, + usage + ) + + fun

property( + name: String, + getter: (T) -> P, + setter: (T, P) -> Unit, + variantType: VariantConverter, + type: VariantConverter, + className: String, + hint: PropertyHint = PropertyHint.NONE, + hintString: String = "", + usage: Long ) { - val propertyName = kProperty.name.convertToSnakeCase() - require(!properties.contains(propertyName)) { - "Found two properties with name $propertyName for class $registeredName" + require(!properties.contains(name)) { + "Found two properties with name $name for class $registeredName" } - properties[propertyName] = KtProperty( + properties[name] = KtProperty( KtPropertyInfo( type, - propertyName, + name, className, hint, hintString, usage ), - kProperty, + getter, + setter, variantType ) } inline fun > enumProperty( - kProperty: KMutableProperty1, + name: String, + noinline getter: (T) -> P, + noinline setter: (T, P) -> Unit, usage: Long, hintString: String ) { - val propertyName = kProperty.name.convertToSnakeCase() - require(!properties.contains(propertyName)) { - "Found two properties with name $propertyName for class $registeredName" + require(!properties.contains(name)) { + "Found two properties with name $name for class $registeredName" } - properties[propertyName] = KtEnumProperty( + properties[name] = KtEnumProperty( KtPropertyInfo( VariantParser.LONG, - propertyName, + name, "Int", PropertyHint.ENUM, hintString, usage, ), - kProperty, + getter, + setter, { enum: P? -> enum?.ordinal ?: 1 }, { i -> enumValues

()[i] } ) } + inline fun > enumProperty( + kProperty: KMutableProperty1, + usage: Long, + hintString: String + ) = enumProperty( + kProperty.name.convertToSnakeCase(), + { instance: T -> kProperty.get(instance) }, + { instance: T, p: P -> kProperty.set(instance, p) }, + usage, + hintString + ) + inline fun , L : Collection

> enumListProperty( - kProperty: KMutableProperty1, + name: String, + noinline getter: (T) -> L, + noinline setter: (T, L) -> Unit, usage: Long, hintString: String ) { - val propertyName = kProperty.name.convertToSnakeCase() - require(!properties.contains(propertyName)) { - "Found two properties with name $propertyName for class $registeredName" + require(!properties.contains(name)) { + "Found two properties with name $name for class $registeredName" } - properties[propertyName] = KtEnumListProperty( + properties[name] = KtEnumListProperty( KtPropertyInfo( VariantParser.ARRAY, - propertyName, + name, "Int", PropertyHint.ENUM, hintString, usage, ), - kProperty, + getter, + setter, { enumList: Collection

? -> enumList ?.map { it.ordinal } @@ -184,6 +216,18 @@ class ClassBuilderDsl( ) } + inline fun , L : Collection

> enumListProperty( + kProperty: KMutableProperty1, + usage: Long, + hintString: String + ) = enumListProperty( + kProperty.name.convertToSnakeCase(), + { instance: T -> kProperty.get(instance) }, + { instance: T, l: L -> kProperty.set(instance, l) }, + usage, + hintString + ) + @JvmName("enumFlagPropertyMutable") @Suppress("UNCHECKED_CAST") inline fun > enumFlagProperty( @@ -193,30 +237,31 @@ class ClassBuilderDsl( ) = enumFlagProperty( kProperty as KMutableProperty1>, usage, - hintString, - - ) + hintString + ) inline fun > enumFlagProperty( - kProperty: KMutableProperty1>, + name: String, + noinline getter: (T) -> Set

, + noinline setter: (T, Set

) -> Unit, usage: Long, hintString: String ) { - val propertyName = kProperty.name.convertToSnakeCase() - require(!properties.contains(propertyName)) { - "Found two properties with name $propertyName for class $registeredName" + require(!properties.contains(name)) { + "Found two properties with name $name for class $registeredName" } - properties[propertyName] = KtEnumProperty( + properties[name] = KtEnumProperty( KtPropertyInfo( VariantParser.LONG, - propertyName, + name, "Int", PropertyHint.FLAGS, hintString, usage, ), - kProperty, + getter, + setter, { enumSet -> var intFlag = 0 enumSet?.forEach { enum -> @@ -246,6 +291,18 @@ class ClassBuilderDsl( ) } + inline fun > enumFlagProperty( + kProperty: KMutableProperty1>, + usage: Long, + hintString: String + ) = enumFlagProperty( + kProperty.name.convertToSnakeCase(), + { instance: T -> kProperty.get(instance) }, + { instance: T, set: Set

-> kProperty.set(instance, set) }, + usage, + hintString + ) + /** * Notification functions of class hierarchy * @@ -1162,98 +1219,22 @@ class ClassBuilderDsl( ) } - fun signal(kProperty: KProperty) { - appendSignal( - KtSignalInfo(kProperty.name.convertToSnakeCase(), listOf()) - ) - } - - fun signal( - kProperty: KProperty, - p0: KtFunctionArgument - ) { - appendSignal( - KtSignalInfo( - kProperty.name.convertToSnakeCase(), - listOf( - p0.toKtPropertyInfo() - ) - ) - ) - } - - fun signal( - kProperty: KProperty, - p0: KtFunctionArgument, - p1: KtFunctionArgument - ) { - appendSignal( - KtSignalInfo( - kProperty.name.convertToSnakeCase(), - listOf( - p0.toKtPropertyInfo(), - p1.toKtPropertyInfo() - ) - ) - ) - } - - fun signal( - kProperty: KProperty, - p0: KtFunctionArgument, - p1: KtFunctionArgument, - p2: KtFunctionArgument - ) { - appendSignal( - KtSignalInfo( - kProperty.name.convertToSnakeCase(), - listOf( - p0.toKtPropertyInfo(), - p1.toKtPropertyInfo(), - p2.toKtPropertyInfo() - ) - ) - ) - } + fun signal(kProperty: KProperty, vararg parameters: KtFunctionArgument) = signal( + kProperty.name.convertToSnakeCase(), + *parameters + ) - fun signal( - kProperty: KProperty, - p0: KtFunctionArgument, - p1: KtFunctionArgument, - p2: KtFunctionArgument, - p3: KtFunctionArgument - ) { - appendSignal( - KtSignalInfo( - kProperty.name.convertToSnakeCase(), - listOf( - p0.toKtPropertyInfo(), - p1.toKtPropertyInfo(), - p2.toKtPropertyInfo(), - p3.toKtPropertyInfo() - ) - ) - ) - } + fun signal(kFunction: KFunction, vararg parameters: KtFunctionArgument) = signal( + kFunction.name.convertToSnakeCase(), + *parameters + ) - fun signal( - kProperty: KProperty, - p0: KtFunctionArgument, - p1: KtFunctionArgument, - p2: KtFunctionArgument, - p3: KtFunctionArgument, - p4: KtFunctionArgument - ) { + private fun signal(name: String, vararg parameters: KtFunctionArgument) { appendSignal( KtSignalInfo( - kProperty.name.convertToSnakeCase(), - listOf( - p0.toKtPropertyInfo(), - p1.toKtPropertyInfo(), - p2.toKtPropertyInfo(), - p3.toKtPropertyInfo(), - p4.toKtPropertyInfo() - ) + name, + parameters + .map { it.toKtPropertyInfo() } ) ) } @@ -1274,18 +1255,15 @@ class ClassBuilderDsl( } internal fun build(): KtClass { - check(constructors.isNotEmpty()) { "Please provide at least one constructor." } - // Constraints.MAX_CONSTRUCTOR_ARG_COUNT + 1 because we have no arg constructor. - val constructorArray = arrayOfNulls>(Constraints.MAX_CONSTRUCTOR_ARG_COUNT + 1) - constructors.forEach { - constructorArray[it.key] = it.value + check(this::constructorField.isInitialized) { + "Please provide a default constructor." } return KtClass( registeredName = registeredName, - relativeSourcePath = relativeSourcePath, + fqdn = fqdn, compilationTimeRelativeRegistrationFilePath = compilationTimeRelativeRegistrationFilePath, _registeredSupertypes = superClasses, - _constructors = constructorArray.toList(), + constructor = constructorField, _properties = properties, _functions = functions, _notificationFunctions = notificationFunctions, @@ -1308,11 +1286,11 @@ class ClassRegistry( isTool: Boolean = false, baseGodotClass: String, registeredName: String, - relativeSourcePath: String, + fqdn: String, compilationTimeRelativeRegistrationFilePath: String, cb: ClassBuilderDsl.() -> Unit ) { - val builder = ClassBuilderDsl(registeredName, relativeSourcePath, compilationTimeRelativeRegistrationFilePath, superClass, baseGodotClass) + val builder = ClassBuilderDsl(registeredName, fqdn, compilationTimeRelativeRegistrationFilePath, superClass, baseGodotClass) builder.cb() TypeManager.registerUserType(registeredName, kClass) registerClass(builder.build()) diff --git a/kt/gradle/libs.versions.toml b/kt/gradle/libs.versions.toml index f30b7ac5ff..e1af91c70c 100644 --- a/kt/gradle/libs.versions.toml +++ b/kt/gradle/libs.versions.toml @@ -31,6 +31,9 @@ iosJdk = "21" iosGraalJdkBuild = "v23.1.3-21-b33" iosCapCache = "0.1.0" +classGraph = "4.8.179" +slf4j = "1.7.36" + [libraries] shadowJar = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "shadowJar" } kotlinPoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinPoet" } @@ -40,6 +43,8 @@ jacksonDataBind = { module = "com.fasterxml.jackson.core:jackson-databind", vers jacksonDataFormatXml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml", version.ref = "jacksonDataFormatXml" } grgit = { module = "org.ajoberstar.grgit:grgit-gradle", version.ref = "grgit" } ideaSync = { module = "org.jetbrains.gradle.plugin.idea-ext:org.jetbrains.gradle.plugin.idea-ext.gradle.plugin", version.ref = "ideaSync" } +classGraph = { module = "io.github.classgraph:classgraph", version.ref = "classGraph"} +slf4jApi = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } [plugins] changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" } diff --git a/kt/plugins/godot-gradle-plugin/build.gradle.kts b/kt/plugins/godot-gradle-plugin/build.gradle.kts index 831ed63b31..83fcb0deef 100644 --- a/kt/plugins/godot-gradle-plugin/build.gradle.kts +++ b/kt/plugins/godot-gradle-plugin/build.gradle.kts @@ -39,6 +39,8 @@ dependencies { implementation(project(":godot-build-props")) implementation(project(":godot-plugins-common")) implementation("com.utopia-rise:tools-common:$fullGodotKotlinJvmVersion") + + implementation(project(":godot-class-graph-symbol-processor")) } tasks { diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/GodotExtension.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/GodotExtension.kt index 08827a3bce..3a44ba5cb6 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/GodotExtension.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/GodotExtension.kt @@ -173,6 +173,11 @@ open class GodotExtension(objects: ObjectFactory) { */ val isGodotCoroutinesEnabled: Property = objects.property(Boolean::class.java) + /** + * Sets the scala version used to support scala language, default 3.6.3 + */ + val scalaVersion: Property = objects.property(String::class.java) + internal fun configureExtensionDefaults(target: Project) { val androidSdkRoot = System.getenv("ANDROID_SDK_ROOT")?.let { androidSdkRoot -> File(androidSdkRoot) @@ -228,6 +233,8 @@ open class GodotExtension(objects: ObjectFactory) { isGodotCoroutinesEnabled.set(false) + scalaVersion.set("3.6.3") + System.getenv("VC_VARS_PATH")?.let { windowsDeveloperVCVarsPath.set(File(it)) } diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/configureThirdPartyPlugins.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/configureThirdPartyPlugins.kt index 9ad0c316d3..b966ee0425 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/configureThirdPartyPlugins.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/configureThirdPartyPlugins.kt @@ -1,20 +1,17 @@ package godot.gradle.projectExt import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin -import com.google.devtools.ksp.gradle.KspGradleSubplugin -import godot.tools.common.constants.FileExtensions import org.gradle.api.Project +import org.gradle.api.plugins.scala.ScalaPlugin import org.gradle.plugins.ide.idea.IdeaPlugin import org.jetbrains.gradle.ext.IdeaExtPlugin -import java.io.File fun Project.configureThirdPartyPlugins() { //apply needed third party plugins - repositories.google() //add google repository for ksp (kotlin symbol processing - pluginManager.apply(KspGradleSubplugin::class.java) - pluginManager.apply(IdeaPlugin::class.java) //needed so idea can find and index the generated sources from ksp - pluginManager.apply(IdeaExtPlugin::class.java) //needed so idea can find and index the generated sources from ksp + pluginManager.apply(IdeaPlugin::class.java) //needed so idea can find and index the generated sources from classgraph + pluginManager.apply(IdeaExtPlugin::class.java) //needed so idea can find and index the generated sources from classgraph pluginManager.apply(ShadowPlugin::class.java) + pluginManager.apply(ScalaPlugin::class.java) // apply the idea plugin to the *root* project. // this is necessary because the IntelliJ IDEA plugin is used for managing some @@ -24,80 +21,21 @@ fun Project.configureThirdPartyPlugins() { this.rootProject.pluginManager.apply(IdeaExtPlugin::class.java) } - addKspGeneratedSourcesToMainSourceSet() - afterEvaluate { - kspExtension.apply { - arg( - "srcDirs", - kotlinJvmExtension - .sourceSets - .getByName("main") - .kotlin - .srcDirs - .joinToString(File.pathSeparator) { - it.absolutePath.replace(File.separator, "/") - } - ) - arg( - "projectBasePath", - projectDir.absolutePath.replace(File.separator, "/") - ) - arg( - "projectName", - (godotJvmExtension.projectName.orNull ?: project.name).replace(" ", "_") - ) - arg( - "registrationFileBaseDir", - ( - godotJvmExtension - .registrationFileBaseDir - .orNull - ?.asFile - ?: projectDir - .resolve(FileExtensions.GodotKotlinJvm.registrationFile) - .apply { - if (godotJvmExtension.isRegistrationFileGenerationEnabled.getOrElse(true)) { - mkdirs() - } - } - ) - .relativeTo(projectDir) - .path - .replace(File.separator, "/") - .removePrefix("/") - .removeSuffix("/") - ) - arg( - "classPrefix", - godotJvmExtension.classPrefix.orNull.toString() - ) - arg( - "isRegistrationFileHierarchyEnabled", - godotJvmExtension.isRegistrationFileHierarchyEnabled.getOrElse(true).toString() - ) - arg( - "isFqNameRegistrationEnabled", - godotJvmExtension.isFqNameRegistrationEnabled.getOrElse(false).toString() - ) - arg( - "isRegistrationFileGenerationEnabled", - godotJvmExtension.isRegistrationFileGenerationEnabled.getOrElse(true).toString() - ) - } + addClassGraphGeneratedSourcesToMainSourceSet() ideaExtension.apply { module { ideaModule -> - ideaModule.generatedSourceDirs.add(layout.buildDirectory.asFile.get().resolve("generated/ksp/main/kotlin/")) + ideaModule.generatedSourceDirs.add(layout.buildDirectory.asFile.get().resolve("generated/classgraph/main/kotlin/")) } } } } -private fun Project.addKspGeneratedSourcesToMainSourceSet() { +private fun Project.addClassGraphGeneratedSourcesToMainSourceSet() { kotlinJvmExtension .sourceSets .getByName("main") .kotlin - .srcDirs(layout.buildDirectory.asFile.get().resolve("generated/ksp/main/kotlin/")) + .srcDirs(classGraphGeneratedDirectory.resolve("main/kotlin/")) } diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/projectExtensions.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/projectExtensions.kt index 596372f155..df03354813 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/projectExtensions.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/projectExtensions.kt @@ -1,10 +1,10 @@ package godot.gradle.projectExt -import com.google.devtools.ksp.gradle.KspExtension import godot.gradle.GodotExtension import org.gradle.api.Project import org.gradle.plugins.ide.idea.model.IdeaModel import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import java.io.File val Project.godotJvmExtension: GodotExtension get() = extensions.getByType(GodotExtension::class.java) @@ -15,14 +15,6 @@ val Project.kotlinJvmExtension: KotlinJvmProjectExtension ?: rootProject.extensions.getByType(KotlinJvmProjectExtension::class.java) -val Project.kspExtension: KspExtension - get() = requireNotNull( - extensions - .findByType(KspExtension::class.java) - ) { - "kspExtension not found" - } - val Project.ideaExtension: IdeaModel get() = requireNotNull( extensions @@ -48,3 +40,6 @@ val Project.godotExtensionArtifactName: String val Project.godotCoroutineLibraryArtifactName: String get() = "godot-coroutine-library-${if (isRelease) "release" else "debug"}" + +val Project.classGraphGeneratedDirectory: File + get() = layout.buildDirectory.asFile.get().resolve("generated/classgraph/") diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupConfigurationsAndCompilations.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupConfigurationsAndCompilations.kt index b8df9d6110..afad75b016 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupConfigurationsAndCompilations.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupConfigurationsAndCompilations.kt @@ -24,11 +24,9 @@ fun Project.setupConfigurationsAndCompilations() { compileOnly("com.utopia-rise:$godotApiArtifactName:${GodotBuildProperties.assembledGodotKotlinJvmVersion}") compileOnly("com.utopia-rise:$godotExtensionArtifactName:${GodotBuildProperties.assembledGodotKotlinJvmVersion}") compileOnly("com.utopia-rise:godot-kotlin-symbol-processor:${GodotBuildProperties.assembledGodotKotlinJvmVersion}") + + implementation("org.scala-lang:scala3-library_3:${godotJvmExtension.scalaVersion.get()}") } - dependencies.add( - "ksp", - "com.utopia-rise:godot-kotlin-symbol-processor:${GodotBuildProperties.assembledGodotKotlinJvmVersion}" - ) } //bootstrap configuration containing all glue code but no user code diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupTasks.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupTasks.kt index cf0df0a9b1..61ca198339 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupTasks.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupTasks.kt @@ -7,7 +7,9 @@ import godot.gradle.tasks.android.createBootstrapDexJarTask import godot.gradle.tasks.android.createMainDexFileTask import godot.gradle.tasks.android.packageBootstrapDexJarTask import godot.gradle.tasks.android.packageMainDexJarTask +import godot.gradle.tasks.classGraphSymbolsProcess import godot.gradle.tasks.createCopyJarsTask +import godot.gradle.tasks.deleteClassGraphGeneratedSourceTask import godot.gradle.tasks.generateGdIgnoreFilesTask import godot.gradle.tasks.graal.checkNativeImageToolAccessibleTask import godot.gradle.tasks.graal.copyDefaultGraalJniConfigTask @@ -17,6 +19,9 @@ import godot.gradle.tasks.graal.ios.createIOSGraalNativeImageTask import godot.gradle.tasks.graal.ios.createIOSStaticLibraryTask import godot.gradle.tasks.graal.ios.downloadIOSCapCacheFiles import godot.gradle.tasks.graal.ios.downloadIOSJdkStaticLibraries +import godot.gradle.tasks.initialJavaCompileForClassGraph +import godot.gradle.tasks.initialKotlinCompileForClassGraph +import godot.gradle.tasks.initialScalaCompileForClassGraph import godot.gradle.tasks.packageBootstrapJarTask import godot.gradle.tasks.packageMainJarTask import godot.gradle.tasks.setupAfterIdeaSyncTasks @@ -32,8 +37,22 @@ fun Project.setupTasks() { afterEvaluate { with(it) { + val classGraphScalaCompile = initialScalaCompileForClassGraph() + val classGraphJavaCompile = initialJavaCompileForClassGraph() + val classGraphKotlinCompile = initialKotlinCompileForClassGraph( + classGraphScalaCompile, + classGraphJavaCompile + ) + + val deleteClassGraphGeneratedTask = deleteClassGraphGeneratedSourceTask() + + val classGraphGenerationTask = classGraphSymbolsProcess( + classGraphKotlinCompile, + deleteClassGraphGeneratedTask + ) + val packageBootstrapJarTask = packageBootstrapJarTask() - val packageMainJarTask = packageMainJarTask() + val packageMainJarTask = packageMainJarTask(classGraphGenerationTask = classGraphGenerationTask) val generateGdIgnoreFilesTask = generateGdIgnoreFilesTask() // START: android specific tasks diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/DeleteClassGraphGenerated.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/DeleteClassGraphGenerated.kt new file mode 100644 index 0000000000..0d95aea868 --- /dev/null +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/DeleteClassGraphGenerated.kt @@ -0,0 +1,14 @@ +package godot.gradle.tasks + +import godot.gradle.projectExt.classGraphGeneratedDirectory +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.TaskProvider + +fun Project.deleteClassGraphGeneratedSourceTask(): TaskProvider { + val directory = classGraphGeneratedDirectory + + return tasks.register("deleteClassGraphGeneratedSource") { + directory.deleteRecursively() + } +} diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/classGraphSymbolsProcess.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/classGraphSymbolsProcess.kt new file mode 100644 index 0000000000..0f7454b24c --- /dev/null +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/classGraphSymbolsProcess.kt @@ -0,0 +1,73 @@ +package godot.gradle.tasks + +import godot.annotation.processor.classgraph.Settings +import godot.annotation.processor.classgraph.generateEntryUsingClassGraph +import godot.gradle.projectExt.godotJvmExtension +import godot.tools.common.constants.FileExtensions +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation +import java.io.File + +fun Project.classGraphSymbolsProcess( + classGraphKotlinCompile: KotlinWithJavaCompilation, + deleteClassGraphGeneratedTask: TaskProvider +): TaskProvider { + val classGraphGenerationTask = tasks.register( + "classGraphSymbolsProcess" + ) { + group = "godot-kotlin-jvm-internal" + description = "Generates entry files using ClassGraph api" + + with(it) { + dependsOn(classGraphKotlinCompile.compileTaskProvider) + dependsOn(deleteClassGraphGeneratedTask) + + doFirst { + val classPath = (classGraphKotlinCompile.compileDependencyFiles + classGraphKotlinCompile.output.allOutputs).files + + generateEntryUsingClassGraph( + Settings( + classPrefix = godotJvmExtension.classPrefix.orNull, + isFqNameRegistrationEnabled = godotJvmExtension.isFqNameRegistrationEnabled.get(), + projectName = (godotJvmExtension.projectName.orNull ?: project.name).replace(" ", "_"), + projectBaseDir = File(projectDir.absolutePath.replace(File.separator, "/")), + registrationBaseDirPathRelativeToProjectDir = ( + godotJvmExtension + .registrationFileBaseDir + .orNull + ?.asFile + ?: projectDir + .resolve(FileExtensions.GodotKotlinJvm.registrationFile) + .apply { + if (godotJvmExtension.isRegistrationFileGenerationEnabled.getOrElse(true)) { + mkdirs() + } + } + ) + .relativeTo(projectDir) + .path + .replace(File.separator, "/") + .removePrefix("/") + .removeSuffix("/"), + isRegistrationFileHierarchyEnabled = godotJvmExtension.isRegistrationFileHierarchyEnabled.get(), + isRegistrationFileGenerationEnabled = godotJvmExtension.isRegistrationFileGenerationEnabled.getOrElse(true), + generatedSourceRootDir = layout.buildDirectory.get() + .asFile + .resolve("generated") + .resolve("classgraph") + ), + logger, + classPath + ) + } + } + } + + tasks.getByName("compileKotlin").dependsOn(classGraphGenerationTask) + + return classGraphGenerationTask +} diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialJavaCompileForClassGraph.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialJavaCompileForClassGraph.kt new file mode 100644 index 0000000000..ae2cce6c34 --- /dev/null +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialJavaCompileForClassGraph.kt @@ -0,0 +1,24 @@ +package godot.gradle.tasks + +import org.gradle.api.Project +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.compile.JavaCompile + +fun Project.initialJavaCompileForClassGraph(): TaskProvider { + val mainSourceSet = project.extensions + .getByType(SourceSetContainer::class.java) + .getByName("main") + + val classGraphJavaCompile = tasks.register("intitialForClassGraphCompileJava", JavaCompile::class.java) { + it.source = mainSourceSet.allJava.asFileTree + it.destinationDirectory.set(layout.buildDirectory.dir("classes/java/main")) + it.classpath = mainSourceSet.compileClasspath + } + + tasks.withType(JavaCompile::class.java) { javaCompile -> + javaCompile.options.compilerArgs.add("-parameters") + } + + return classGraphJavaCompile +} diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialKotlinCompileForClassGraph.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialKotlinCompileForClassGraph.kt new file mode 100644 index 0000000000..dcc11d5a58 --- /dev/null +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialKotlinCompileForClassGraph.kt @@ -0,0 +1,49 @@ +package godot.gradle.tasks + +import godot.gradle.projectExt.kotlinJvmExtension +import org.gradle.api.Project +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.api.tasks.scala.ScalaCompile +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +fun Project.initialKotlinCompileForClassGraph( + classGraphScalaCompile: TaskProvider, + classGraphJavaCompile: TaskProvider +): KotlinWithJavaCompilation { + val mainCompilation = kotlinJvmExtension.target.compilations.getByName("main") + + val mainSourceSet = project.extensions + .getByType(SourceSetContainer::class.java) + .getByName("main") + + val classGraphKotlinCompile = kotlinJvmExtension.target.compilations.create("initialForClassGraphCompile") { kotlinCompile -> + kotlinCompile.defaultSourceSet { + this.kotlin.srcDirs(mainSourceSet.allSource.srcDirs) + } + + kotlinCompile.compileDependencyFiles += mainCompilation.compileDependencyFiles + kotlinCompile.compileDependencyFiles += classGraphScalaCompile.get().outputs.files + kotlinCompile.compileDependencyFiles += classGraphJavaCompile.get().outputs.files + kotlinCompile.runtimeDependencyFiles += mainCompilation.runtimeDependencyFiles + + kotlinCompile.compileTaskProvider.get().dependsOn(classGraphScalaCompile) + kotlinCompile.compileTaskProvider.get().dependsOn(classGraphJavaCompile) + } + + tasks.withType(KotlinCompile::class.java) { kotlinCompile -> + kotlinCompile.compilerOptions { + javaParameters.set(true) + } + } + + kotlinJvmExtension.target.compilations.getByName("main") { + it.compileDependencyFiles += classGraphScalaCompile.get().outputs.files + } + + return classGraphKotlinCompile +} diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialScalaCompileForClassGraph.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialScalaCompileForClassGraph.kt new file mode 100644 index 0000000000..59b7d7f075 --- /dev/null +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/initialScalaCompileForClassGraph.kt @@ -0,0 +1,35 @@ +package godot.gradle.tasks + +import godot.gradle.projectExt.kotlinJvmExtension +import org.gradle.api.Project +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.scala.ScalaCompile + +fun Project.initialScalaCompileForClassGraph(): TaskProvider { + val mainCompilation = kotlinJvmExtension.target.compilations.getByName("main") + + val mainSourceSet = project.extensions + .getByType(SourceSetContainer::class.java) + .getByName("main") + + val scalaCompileTask = tasks.getByName("compileScala") as ScalaCompile + + return tasks.register("initialCompileScala", org.gradle.api.tasks.scala.ScalaCompile::class.java) { scalaCompile -> + scalaCompile.source = mainSourceSet.allSource.filter { it.extension == "scala" }.asFileTree // Include Scala sources + scalaCompile.classpath = mainCompilation.compileDependencyFiles // Include compiled Kotlin classes + + // Output directory for compiled Scala classes + scalaCompile.destinationDirectory.set(layout.buildDirectory.dir("classes/scala/main")) + + // Add Scala compilation options + scalaCompile.scalaCompileOptions.incrementalOptions.analysisFile.set( + // Use the provider from the default compile task + scalaCompileTask.scalaCompileOptions.incrementalOptions.analysisFile + ) + scalaCompile.scalaCompileOptions.incrementalOptions.classfileBackupDir.set( + // Use the provider from the default compile task + scalaCompileTask.scalaCompileOptions.incrementalOptions.classfileBackupDir + ) + } +} diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/packageMainJar.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/packageMainJar.kt index b8e81f2eb1..1270041a73 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/packageMainJar.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/packageMainJar.kt @@ -9,6 +9,7 @@ import org.gradle.api.Task import org.gradle.api.tasks.TaskProvider fun Project.packageMainJarTask( + classGraphGenerationTask: TaskProvider ): TaskProvider { return tasks.named("shadowJar", ShadowJar::class.java) { with(it) { @@ -19,6 +20,8 @@ fun Project.packageMainJarTask( archiveVersion.set("") archiveClassifier.set("") + dependsOn(classGraphGenerationTask) + // merges all service files from all dependencies into on // needed so we can loop over and load all entry files from within Bootstrap.kt mergeServiceFiles() diff --git a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/setupBuildTask.kt b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/setupBuildTask.kt index 16bf2c1e96..623eedb767 100644 --- a/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/setupBuildTask.kt +++ b/kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/setupBuildTask.kt @@ -28,7 +28,7 @@ fun Project.setupBuildTask( task.finalizedBy( copyJarTask, packageBootstrapJarTask, - packageMainJarTask, + packageMainJarTask ) if (godotJvmExtension.isAndroidExportEnabled.get()) { diff --git a/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/annotator/clazz/RegisterClassAnnotator.kt b/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/annotator/clazz/RegisterClassAnnotator.kt index 4eb4ccca46..4220525e43 100644 --- a/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/annotator/clazz/RegisterClassAnnotator.kt +++ b/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/annotator/clazz/RegisterClassAnnotator.kt @@ -8,7 +8,6 @@ import godot.intellij.plugin.GodotPluginBundle import godot.intellij.plugin.annotator.base.BaseAnnotator import godot.intellij.plugin.annotator.general.checkNotGeneric import godot.intellij.plugin.data.model.REGISTER_CLASS_ANNOTATION -import godot.intellij.plugin.data.model.REGISTER_CONSTRUCTOR_ANNOTATION import godot.intellij.plugin.data.model.REGISTER_FUNCTION_ANNOTATION import godot.intellij.plugin.data.model.REGISTER_PROPERTY_ANNOTATION import godot.intellij.plugin.data.model.REGISTER_SIGNAL_ANNOTATION @@ -67,8 +66,6 @@ class RegisterClassAnnotator : BaseAnnotator { checkNotGeneric(element, holder) checkExtendsGodotType(element, holder) checkDefaultConstructorExistence(element, holder) - checkConstructorParameterCount(element, holder) - checkConstructorOverloading(element, holder) checkRegisteredClassName(element, holder) } } @@ -96,42 +93,6 @@ class RegisterClassAnnotator : BaseAnnotator { } } - private fun checkConstructorParameterCount(psiClass: PsiClass, holder: AnnotationHolder) { - psiClass - .constructors - .filter { it.getAnnotation(REGISTER_CONSTRUCTOR_ANNOTATION) != null } - .forEach { ktConstructor -> - if (ktConstructor.parameterList.parametersCount > Constraints.MAX_CONSTRUCTOR_ARG_COUNT) { - holder.registerProblem( - GodotPluginBundle.message("problem.class.constructor.toManyParams", Constraints.MAX_CONSTRUCTOR_ARG_COUNT), - ktConstructor.parameterList - ) - } - } - } - - private fun checkConstructorOverloading(psiClass: PsiClass, holder: AnnotationHolder) { - val constructors = psiClass - .constructors - .filter { it.getAnnotation(REGISTER_CONSTRUCTOR_ANNOTATION) != null } - - val constructorsByArgCount = constructors - .filter { it.getAnnotation(REGISTER_CONSTRUCTOR_ANNOTATION) != null } - .groupBy { it.parameterList.parametersCount } - - if (constructorsByArgCount.size != constructors.size) { - constructorsByArgCount - .filter { it.value.size > 1 } - .flatMap { it.value } - .forEach { ktConstructor -> - holder.registerProblem( - GodotPluginBundle.message("problem.class.constructor.overloading"), - ktConstructor.parameterList - ) - } - } - } - private fun checkRegisteredClassName(psiClass: PsiClass, holder: AnnotationHolder) { val (fqName, registeredName) = psiClass.getRegisteredClassName() ?: return val fqNames = psiClass diff --git a/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/data/model/annotations.kt b/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/data/model/annotations.kt index 63eebeb27d..d01eaf89d8 100644 --- a/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/data/model/annotations.kt +++ b/kt/plugins/godot-intellij-plugin/src/main/kotlin/godot/intellij/plugin/data/model/annotations.kt @@ -5,7 +5,6 @@ import godot.tools.common.constants.godotAnnotationPackage const val REGISTER_CLASS_ANNOTATION = "$godotAnnotationPackage.${GodotKotlinJvmTypes.Annotations.registerClass}" const val TOOL_ANNOTATION = "$godotAnnotationPackage.${GodotKotlinJvmTypes.Annotations.tool}" -const val REGISTER_CONSTRUCTOR_ANNOTATION = "$godotAnnotationPackage.${GodotKotlinJvmTypes.Annotations.registerConstructor}" const val REGISTER_FUNCTION_ANNOTATION = "$godotAnnotationPackage.${GodotKotlinJvmTypes.Annotations.registerFunction}" const val REGISTER_PROPERTY_ANNOTATION = "$godotAnnotationPackage.${GodotKotlinJvmTypes.Annotations.registerProperty}" const val EXPORT_ANNOTATION = "$godotAnnotationPackage.${GodotKotlinJvmTypes.Annotations.export}" diff --git a/kt/plugins/godot-intellij-plugin/src/main/resources/messages/generalLabels.properties b/kt/plugins/godot-intellij-plugin/src/main/resources/messages/generalLabels.properties index d7fde697e6..2bfc00a777 100644 --- a/kt/plugins/godot-intellij-plugin/src/main/resources/messages/generalLabels.properties +++ b/kt/plugins/godot-intellij-plugin/src/main/resources/messages/generalLabels.properties @@ -35,8 +35,6 @@ problem.class.notRegistered.functions=This class contains registered functions b problem.class.notRegistered.signals=This class contains registered signals but is not registered problem.class.inheritance.notInheritingGodotObject=Registered class not inheriting godot type problem.class.constructor.defaultConstructorMissing=There is no default constructor defined. Godot needs a default constructor (no args) -problem.class.constructor.toManyParams=Godot cannot handle constructors for registered classes with more than {0} parameters. Reduce your parameter count -problem.class.constructor.overloading=Constructor overloading for registered constructors is not yet supported. Multiple registered constructors in the same class need a different argument count problem.class.nameAlreadyRegistered=Class name already registered problem.function.notificationFunctionNotRegistered=Overridden virtual function which is not registered will not be called by Godot.\n\ Using virtual functions for other purposes than to be called from Godot is considered a bad practise.\n\ diff --git a/kt/settings.gradle.kts b/kt/settings.gradle.kts index f4c1342db9..f1d92e61ea 100644 --- a/kt/settings.gradle.kts +++ b/kt/settings.gradle.kts @@ -53,6 +53,7 @@ subdir("godot-library") { subdir("entry-generation") { include("godot-kotlin-symbol-processor") + include("godot-class-graph-symbol-processor") include("godot-entry-generator") } diff --git a/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Classes.kt b/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Classes.kt index dfc673ec64..a5262fff19 100644 --- a/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Classes.kt +++ b/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Classes.kt @@ -54,7 +54,6 @@ object GodotKotlinJvmTypes { const val coreTypeLocalCopy = "CoreTypeLocalCopy" const val registerClass = "RegisterClass" - const val registerConstructor = "RegisterConstructor" const val registerProperty = "RegisterProperty" const val registerFunction = "RegisterFunction" const val registerSignal = "RegisterSignal" diff --git a/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Packages.kt b/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Packages.kt index 0a3274aafd..8c235fe10b 100644 --- a/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Packages.kt +++ b/kt/tools-common/src/main/kotlin/godot/tools/common/constants/Packages.kt @@ -34,3 +34,6 @@ const val kotlinReflectPackage = "$kotlinPackage.reflect" const val kotlinTextPackage = "$kotlinPackage.text" const val kotlinCoroutinePackage = "$kotlinPackage.coroutines" const val kotlinxCoroutinePackage = "kotlinx.coroutines" + +const val javaPackage = "java" +const val javaUtilPackage = "$javaPackage.util" diff --git a/register_types.cpp b/register_types.cpp index c80744783b..e52b6126d6 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -20,6 +20,8 @@ #include "script/language/java_script.h" #include "script/language/kotlin_script.h" #include "script/jvm_script_manager.h" +#include "script/language/scala_script.h" +#include "language/scala_language.h" Ref resource_format_loader; Ref resource_format_saver; @@ -47,10 +49,12 @@ void initialize_kotlin_jvm_module(ModuleInitializationLevel p_level) { GDREGISTER_CLASS(GdjScript); GDREGISTER_CLASS(KotlinScript); GDREGISTER_CLASS(JavaScript); + GDREGISTER_CLASS(ScalaScript); ScriptServer::register_language(GdjLanguage::get_instance()); ScriptServer::register_language(KotlinLanguage::get_instance()); ScriptServer::register_language(JavaLanguage::get_instance()); + ScriptServer::register_language(ScalaLanguage::get_instance()); resource_format_loader.instantiate(); ResourceLoader::add_resource_format_loader(resource_format_loader); @@ -91,6 +95,10 @@ void uninitialize_kotlin_jvm_module(ModuleInitializationLevel p_level) { ScriptServer::unregister_language(kotlin_language); memdelete(kotlin_language); + ScalaLanguage* scala_language {ScalaLanguage::get_instance()}; + ScriptServer::unregister_language(scala_language); + memdelete(scala_language); + JvmLanguage* jvm_language {GdjLanguage::get_instance()}; ScriptServer::unregister_language(jvm_language); memdelete(jvm_language); diff --git a/src/constraints.h b/src/constraints.h index 3bbefdadbc..c4b7a0f673 100644 --- a/src/constraints.h +++ b/src/constraints.h @@ -1,9 +1,6 @@ #ifndef GODOT_JVM_CONSTRAINTS_H #define GODOT_JVM_CONSTRAINTS_H -// when changed, also update godot.common.constants.Constraints.MAX_CONSTRUCTOR_ARG_COUNT! -static constexpr const int MAX_CONSTRUCTOR_ARG_COUNT {8}; - // when changed, also update godot.common.constants.Constraints.MAX_FUNCTION_ARG_COUNT! static constexpr const int MAX_FUNCTION_ARG_COUNT {16}; diff --git a/src/editor/project/templates.h b/src/editor/project/templates.h index a20f00728e..6720502f24 100644 --- a/src/editor/project/templates.h +++ b/src/editor/project/templates.h @@ -5,26 +5,26 @@ #ifndef FILE_CONTENTS_H #define FILE_CONTENTS_H -constexpr const char* _gitattributes_file_name = R"(.gitattributes)"; -constexpr const char* _gitattributes_file_content = "Iw0KIyBodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy9kZWFsaW5nLXdpdGgtbGluZS1lbmRpbmdzLw0KIw0KIyBUaGVzZSBhcmUgZXhwbGljaXRseSB3aW5kb3dzIGZpbGVzIGFuZCBzaG91bGQgdXNlIGNybGYNCiouYmF0ICAgICAgICAgICB0ZXh0IGVvbD1jcmxmDQoNCg=="; +constexpr const char* gradle_properties_file_name = R"(gradle.properties)"; +constexpr const char* gradle_properties_file_content = "b3JnLmdyYWRsZS5qdm1hcmdzPS1YbXgzRwoKIyBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGRpc2FibGUga290bGluIGp2bSBwbHVnaW4gdmVyc2lvbiBjaGVjawojIEF0dGVudGlvbjogdGhpcyBpcyBhbiBhZHZhbmNlZCBmZWF0dXJlLiBPbmx5IHVzZSBpdCBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyEgV2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IG91ciBjb21waWxlciBwbHVnaW4gaXMgY29tcGF0aWJsZSB3aXRoIG90aGVyIGtvdGxpbiB2ZXJzaW9ucyB0aGFuIHRoZSBvbmUgd2UgYnVpbGQgaXQgZm9yLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSBjYW4gbGVhZCB0byBidWlsZCBhbmQvb3IgcnVudGltZSBlcnJvcnMuCiNnb2RvdC5qdm0uc3VwcHJlc3NLb3RsaW5JbmNvbXBhdGliaWxpdHk9dHJ1ZQo="; constexpr const char* _gitignore_file_name = R"(.gitignore)"; -constexpr const char* _gitignore_file_content = "LmdvZG90Lw0KL2FuZHJvaWQvDQouZ3JhZGxlDQoua290bGluDQouaWRlYQ0KYnVpbGQNCmp2bQ=="; +constexpr const char* _gitignore_file_content = "LmdvZG90LwovYW5kcm9pZC8KLmdyYWRsZQoua290bGluCi5pZGVhCmJ1aWxkCmp2bQ=="; constexpr const char* build_gradle_kts_file_name = R"(build.gradle.kts)"; -constexpr const char* build_gradle_kts_file_content = "cGx1Z2lucyB7DQogICAgaWQoImNvbS51dG9waWEtcmlzZS5nb2RvdC1rb3RsaW4tanZtIikgdmVyc2lvbiAiR09ET1RfS09UTElOX0pWTV9WRVJTSU9OIg0KfQ0KDQpyZXBvc2l0b3JpZXMgew0KICAgIG1hdmVuQ2VudHJhbCgpDQp9DQoNCmtvdGxpbiB7DQogICAganZtVG9vbGNoYWluKDE3KQ0KfQ0KDQpnb2RvdCB7DQogICAgLy8gLS0tLS0tLS0tU2V0dXAtLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgLy8gdGhlIHNjcmlwdCByZWdpc3RyYXRpb24gd2hpY2ggeW91J2xsIGF0dGFjaCB0byBub2RlcyBhcmUgZ2VuZXJhdGVkIGludG8gdGhpcyBkaXJlY3RvcnkNCiAgICByZWdpc3RyYXRpb25GaWxlQmFzZURpci5zZXQocHJvamVjdERpci5yZXNvbHZlKCJnZGoiKSkNCg0KCS8vIENyZWF0ZSAuZ2RqIGZpbGVzIGZyb20gYWxsIEpWTSBzY3JpcHRzDQoJaXNSZWdpc3RyYXRpb25GaWxlR2VuZXJhdGlvbkVuYWJsZWQuc2V0KHRydWUpDQoNCiAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHNjcmlwdCByZWdpc3RyYXRpb24gZmlsZXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBoaWVyYXJjaGljYWxseSBhY2NvcmRpbmcgdG8gdGhlIGNsYXNzZXMgcGFja2FnZSBwYXRoIG9yIGZsYXR0ZW5lZCBpbnRvIGByZWdpc3RyYXRpb25GaWxlQmFzZURpcmANCiAgICAvL2lzUmVnaXN0cmF0aW9uRmlsZUhpZXJhcmNoeUVuYWJsZWQuc2V0KHRydWUpDQoNCiAgICAvLyBkZWZpbmVzIHdoZXRoZXIgeW91ciBzY3JpcHRzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggdGhlaXIgZnFOYW1lIG9yIHRoZWlyIHNpbXBsZSBuYW1lIChjYW4gaGVscCB3aXRoIHJlc29sdmluZyBzY3JpcHQgbmFtZSBjb25mbGljdHMpDQogICAgLy9pc0ZxTmFtZVJlZ2lzdHJhdGlvbkVuYWJsZWQuc2V0KGZhbHNlKQ0KDQogICAgLy8gLS0tLS0tLS0tQW5kcm9pZC0tLS0tLS0tLS0tLS0tLS0NCg0KICAgIC8vIE5PVEU6IE1ha2Ugc3VyZSB5b3UgcmVhZDogaHR0cHM6Ly9nb2RvdC1rb3RsLmluL2VuL3N0YWJsZS91c2VyLWd1aWRlL2V4cG9ydGluZy8jYW5kcm9pZCBhcyBub3QgYWxsIGp2bSBsaWJyYXJpZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBhbmRyb2lkIQ0KICAgIC8vIElNUE9SVEFOVDogQW5kcm9pZCBleHBvcnQgc2hvdWxkIHRvIGJlIGNvbnNpZGVyZWQgZnJvbSB0aGUgc3RhcnQgb2YgZGV2ZWxvcG1lbnQhDQogICAgLy9pc0FuZHJvaWRFeHBvcnRFbmFibGVkLnNldChBTkRST0lEX0VOQUJMRUQpDQogICAgLy9kOFRvb2xQYXRoLnNldChGaWxlKCJEOF9UT09MX1BBVEgiKSkNCiAgICAvL2FuZHJvaWRDb21waWxlU2RrRGlyLnNldChGaWxlKCJBTkRST0lEX0NPTVBJTEVfU0RLX0RJUiIpKQ0KDQogICAgLy8gLS0tLS0tLS1JT1MgYW5kIEdyYWFsLS0tLS0tLS0tLS0tDQoNCiAgICAvLyBOT1RFOiB0aGlzIGlzIGFuIGFkdmFuY2VkIGZlYXR1cmUhIFJlYWQ6IGh0dHBzOi8vZ29kb3Qta290bC5pbi9lbi9zdGFibGUvdXNlci1ndWlkZS9hZHZhbmNlZC9ncmFhbC12bS1uYXRpdmUtaW1hZ2UvDQogICAgLy8gSU1QT1JUQU5UOiBHcmFhbCBOYXRpdmUgSW1hZ2UgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBmcm9tIHRoZSBzdGFydCBvZiBkZXZlbG9wbWVudCENCiAgICAvL2lzR3JhYWxOYXRpdmVJbWFnZUV4cG9ydEVuYWJsZWQuc2V0KElTX0dSQUFMX1ZNX0VOQUJMRUQpDQogICAgLy9ncmFhbFZtRGlyZWN0b3J5LnNldChGaWxlKCJHUkFBTF9WTV9ESVIiKSkNCiAgICAvL3dpbmRvd3NEZXZlbG9wZXJWQ1ZhcnNQYXRoLnNldChGaWxlKCJXSU5ET1dTX0RFVkVMT1BFUl9WU19WQVJTX1BBVEgiKSkNCiAgICAvL2lzSU9TRXhwb3J0RW5hYmxlZC5zZXQoSVNfSU9TX0VOQUJMRUQpDQoNCgkvLyAtLS0tLS0tLUxpYnJhcnkgYXV0aG9ycy0tLS0tLS0tLS0tLQ0KDQoJLy8gbGlicmFyeSBzZXR1cC4gU2VlOiBodHRwczovL2dvZG90LWtvdGwuaW4vZW4vc3RhYmxlL2RldmVsb3AtbGlicmFyaWVzLw0KICAgIC8vY2xhc3NQcmVmaXguc2V0KCJNeUN1c3RvbUNsYXNzUHJlZml4IikNCiAgICAvL3Byb2plY3ROYW1lLnNldCgiTGlicmFyeVByb2plY3ROYW1lIikNCiAgICAvL3Byb2plY3ROYW1lLnNldCgiTGlicmFyeVByb2plY3ROYW1lIikNCn0NCg=="; - -constexpr const char* gradle_properties_file_name = R"(gradle.properties)"; -constexpr const char* gradle_properties_file_content = "b3JnLmdyYWRsZS5qdm1hcmdzPS1YbXgzRw0KDQojIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gZGlzYWJsZSBrb3RsaW4ganZtIHBsdWdpbiB2ZXJzaW9uIGNoZWNrDQojIEF0dGVudGlvbjogdGhpcyBpcyBhbiBhZHZhbmNlZCBmZWF0dXJlLiBPbmx5IHVzZSBpdCBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyEgV2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IG91ciBjb21waWxlciBwbHVnaW4gaXMgY29tcGF0aWJsZSB3aXRoIG90aGVyIGtvdGxpbiB2ZXJzaW9ucyB0aGFuIHRoZSBvbmUgd2UgYnVpbGQgaXQgZm9yLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSBjYW4gbGVhZCB0byBidWlsZCBhbmQvb3IgcnVudGltZSBlcnJvcnMuDQojZ29kb3QuanZtLnN1cHByZXNzS290bGluSW5jb21wYXRpYmlsaXR5PXRydWUNCg=="; +constexpr const char* build_gradle_kts_file_content = "cGx1Z2lucyB7CiAgICBpZCgiY29tLnV0b3BpYS1yaXNlLmdvZG90LWtvdGxpbi1qdm0iKSB2ZXJzaW9uICJHT0RPVF9LT1RMSU5fSlZNX1ZFUlNJT04iCn0KCnJlcG9zaXRvcmllcyB7CiAgICBtYXZlbkNlbnRyYWwoKQp9Cgprb3RsaW4gewogICAganZtVG9vbGNoYWluKDE3KQp9Cgpnb2RvdCB7CiAgICAvLyAtLS0tLS0tLS1TZXR1cC0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gdGhlIHNjcmlwdCByZWdpc3RyYXRpb24gd2hpY2ggeW91J2xsIGF0dGFjaCB0byBub2RlcyBhcmUgZ2VuZXJhdGVkIGludG8gdGhpcyBkaXJlY3RvcnkKICAgIHJlZ2lzdHJhdGlvbkZpbGVCYXNlRGlyLnNldChwcm9qZWN0RGlyLnJlc29sdmUoImdkaiIpKQoKCS8vIENyZWF0ZSAuZ2RqIGZpbGVzIGZyb20gYWxsIEpWTSBzY3JpcHRzCglpc1JlZ2lzdHJhdGlvbkZpbGVHZW5lcmF0aW9uRW5hYmxlZC5zZXQodHJ1ZSkKCiAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHNjcmlwdCByZWdpc3RyYXRpb24gZmlsZXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBoaWVyYXJjaGljYWxseSBhY2NvcmRpbmcgdG8gdGhlIGNsYXNzZXMgcGFja2FnZSBwYXRoIG9yIGZsYXR0ZW5lZCBpbnRvIGByZWdpc3RyYXRpb25GaWxlQmFzZURpcmAKICAgIC8vaXNSZWdpc3RyYXRpb25GaWxlSGllcmFyY2h5RW5hYmxlZC5zZXQodHJ1ZSkKCiAgICAvLyBkZWZpbmVzIHdoZXRoZXIgeW91ciBzY3JpcHRzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggdGhlaXIgZnFOYW1lIG9yIHRoZWlyIHNpbXBsZSBuYW1lIChjYW4gaGVscCB3aXRoIHJlc29sdmluZyBzY3JpcHQgbmFtZSBjb25mbGljdHMpCiAgICAvL2lzRnFOYW1lUmVnaXN0cmF0aW9uRW5hYmxlZC5zZXQoZmFsc2UpCgogICAgLy8gLS0tLS0tLS0tQW5kcm9pZC0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBOT1RFOiBNYWtlIHN1cmUgeW91IHJlYWQ6IGh0dHBzOi8vZ29kb3Qta290bC5pbi9lbi9zdGFibGUvdXNlci1ndWlkZS9leHBvcnRpbmcvI2FuZHJvaWQgYXMgbm90IGFsbCBqdm0gbGlicmFyaWVzIGFyZSBjb21wYXRpYmxlIHdpdGggYW5kcm9pZCEKICAgIC8vIElNUE9SVEFOVDogQW5kcm9pZCBleHBvcnQgc2hvdWxkIHRvIGJlIGNvbnNpZGVyZWQgZnJvbSB0aGUgc3RhcnQgb2YgZGV2ZWxvcG1lbnQhCiAgICAvL2lzQW5kcm9pZEV4cG9ydEVuYWJsZWQuc2V0KEFORFJPSURfRU5BQkxFRCkKICAgIC8vZDhUb29sUGF0aC5zZXQoRmlsZSgiRDhfVE9PTF9QQVRIIikpCiAgICAvL2FuZHJvaWRDb21waWxlU2RrRGlyLnNldChGaWxlKCJBTkRST0lEX0NPTVBJTEVfU0RLX0RJUiIpKQoKICAgIC8vIC0tLS0tLS0tSU9TIGFuZCBHcmFhbC0tLS0tLS0tLS0tLQoKICAgIC8vIE5PVEU6IHRoaXMgaXMgYW4gYWR2YW5jZWQgZmVhdHVyZSEgUmVhZDogaHR0cHM6Ly9nb2RvdC1rb3RsLmluL2VuL3N0YWJsZS91c2VyLWd1aWRlL2FkdmFuY2VkL2dyYWFsLXZtLW5hdGl2ZS1pbWFnZS8KICAgIC8vIElNUE9SVEFOVDogR3JhYWwgTmF0aXZlIEltYWdlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgZnJvbSB0aGUgc3RhcnQgb2YgZGV2ZWxvcG1lbnQhCiAgICAvL2lzR3JhYWxOYXRpdmVJbWFnZUV4cG9ydEVuYWJsZWQuc2V0KElTX0dSQUFMX1ZNX0VOQUJMRUQpCiAgICAvL2dyYWFsVm1EaXJlY3Rvcnkuc2V0KEZpbGUoIkdSQUFMX1ZNX0RJUiIpKQogICAgLy93aW5kb3dzRGV2ZWxvcGVyVkNWYXJzUGF0aC5zZXQoRmlsZSgiV0lORE9XU19ERVZFTE9QRVJfVlNfVkFSU19QQVRIIikpCiAgICAvL2lzSU9TRXhwb3J0RW5hYmxlZC5zZXQoSVNfSU9TX0VOQUJMRUQpCgoJLy8gLS0tLS0tLS1MaWJyYXJ5IGF1dGhvcnMtLS0tLS0tLS0tLS0KCgkvLyBsaWJyYXJ5IHNldHVwLiBTZWU6IGh0dHBzOi8vZ29kb3Qta290bC5pbi9lbi9zdGFibGUvZGV2ZWxvcC1saWJyYXJpZXMvCiAgICAvL2NsYXNzUHJlZml4LnNldCgiTXlDdXN0b21DbGFzc1ByZWZpeCIpCiAgICAvL3Byb2plY3ROYW1lLnNldCgiTGlicmFyeVByb2plY3ROYW1lIikKICAgIC8vcHJvamVjdE5hbWUuc2V0KCJMaWJyYXJ5UHJvamVjdE5hbWUiKQp9Cg=="; constexpr const char* gradlew_bat_file_name = R"(gradlew.bat)"; -constexpr const char* gradlew_bat_file_content = "QHJlbQ0KQHJlbSBDb3B5cmlnaHQgMjAxNSB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuDQpAcmVtDQpAcmVtIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KQHJlbSB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpAcmVtIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KQHJlbQ0KQHJlbSAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCkByZW0NCkByZW0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KQHJlbSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KQHJlbSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCkByZW0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KQHJlbSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCkByZW0NCg0KQGlmICIlREVCVUclIiA9PSAiIiBAZWNobyBvZmYNCkByZW0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkByZW0NCkByZW0gIEdyYWRsZSBzdGFydHVwIHNjcmlwdCBmb3IgV2luZG93cw0KQHJlbQ0KQHJlbSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpAcmVtIFNldCBsb2NhbCBzY29wZSBmb3IgdGhlIHZhcmlhYmxlcyB3aXRoIHdpbmRvd3MgTlQgc2hlbGwNCmlmICIlT1MlIj09IldpbmRvd3NfTlQiIHNldGxvY2FsDQoNCnNldCBESVJOQU1FPSV+ZHAwDQppZiAiJURJUk5BTUUlIiA9PSAiIiBzZXQgRElSTkFNRT0uDQpzZXQgQVBQX0JBU0VfTkFNRT0lfm4wDQpzZXQgQVBQX0hPTUU9JURJUk5BTUUlDQoNCkByZW0gUmVzb2x2ZSBhbnkgIi4iIGFuZCAiLi4iIGluIEFQUF9IT01FIHRvIG1ha2UgaXQgc2hvcnRlci4NCmZvciAlJWkgaW4gKCIlQVBQX0hPTUUlIikgZG8gc2V0IEFQUF9IT01FPSUlfmZpDQoNCkByZW0gQWRkIGRlZmF1bHQgSlZNIG9wdGlvbnMgaGVyZS4gWW91IGNhbiBhbHNvIHVzZSBKQVZBX09QVFMgYW5kIEdSQURMRV9PUFRTIHRvIHBhc3MgSlZNIG9wdGlvbnMgdG8gdGhpcyBzY3JpcHQuDQpzZXQgREVGQVVMVF9KVk1fT1BUUz0iLVhteDY0bSIgIi1YbXM2NG0iDQoNCkByZW0gRmluZCBqYXZhLmV4ZQ0KaWYgZGVmaW5lZCBKQVZBX0hPTUUgZ290byBmaW5kSmF2YUZyb21KYXZhSG9tZQ0KDQpzZXQgSkFWQV9FWEU9amF2YS5leGUNCiVKQVZBX0VYRSUgLXZlcnNpb24gPk5VTCAyPiYxDQppZiAiJUVSUk9STEVWRUwlIiA9PSAiMCIgZ290byBpbml0DQoNCmVjaG8uDQplY2hvIEVSUk9SOiBKQVZBX0hPTUUgaXMgbm90IHNldCBhbmQgbm8gJ2phdmEnIGNvbW1hbmQgY291bGQgYmUgZm91bmQgaW4geW91ciBQQVRILg0KZWNoby4NCmVjaG8gUGxlYXNlIHNldCB0aGUgSkFWQV9IT01FIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgdG8gbWF0Y2ggdGhlDQplY2hvIGxvY2F0aW9uIG9mIHlvdXIgSmF2YSBpbnN0YWxsYXRpb24uDQoNCmdvdG8gZmFpbA0KDQo6ZmluZEphdmFGcm9tSmF2YUhvbWUNCnNldCBKQVZBX0hPTUU9JUpBVkFfSE9NRToiPSUNCnNldCBKQVZBX0VYRT0lSkFWQV9IT01FJS9iaW4vamF2YS5leGUNCg0KaWYgZXhpc3QgIiVKQVZBX0VYRSUiIGdvdG8gaW5pdA0KDQplY2hvLg0KZWNobyBFUlJPUjogSkFWQV9IT01FIGlzIHNldCB0byBhbiBpbnZhbGlkIGRpcmVjdG9yeTogJUpBVkFfSE9NRSUNCmVjaG8uDQplY2hvIFBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQ0KZWNobyBsb2NhdGlvbiBvZiB5b3VyIEphdmEgaW5zdGFsbGF0aW9uLg0KDQpnb3RvIGZhaWwNCg0KOmluaXQNCkByZW0gR2V0IGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGhhbmRsaW5nIFdpbmRvd3MgdmFyaWFudHMNCg0KaWYgbm90ICIlT1MlIiA9PSAiV2luZG93c19OVCIgZ290byB3aW45eE1FX2FyZ3MNCg0KOndpbjl4TUVfYXJncw0KQHJlbSBTbHVycCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4NCnNldCBDTURfTElORV9BUkdTPQ0Kc2V0IF9TS0lQPTINCg0KOndpbjl4TUVfYXJnc19zbHVycA0KaWYgInglfjEiID09ICJ4IiBnb3RvIGV4ZWN1dGUNCg0Kc2V0IENNRF9MSU5FX0FSR1M9JSoNCg0KOmV4ZWN1dGUNCkByZW0gU2V0dXAgdGhlIGNvbW1hbmQgbGluZQ0KDQpzZXQgQ0xBU1NQQVRIPSVBUFBfSE9NRSVcZ3JhZGxlXHdyYXBwZXJcZ3JhZGxlLXdyYXBwZXIuamFyDQoNCg0KQHJlbSBFeGVjdXRlIEdyYWRsZQ0KIiVKQVZBX0VYRSUiICVERUZBVUxUX0pWTV9PUFRTJSAlSkFWQV9PUFRTJSAlR1JBRExFX09QVFMlICItRG9yZy5ncmFkbGUuYXBwbmFtZT0lQVBQX0JBU0VfTkFNRSUiIC1jbGFzc3BhdGggIiVDTEFTU1BBVEglIiBvcmcuZ3JhZGxlLndyYXBwZXIuR3JhZGxlV3JhcHBlck1haW4gJUNNRF9MSU5FX0FSR1MlDQoNCjplbmQNCkByZW0gRW5kIGxvY2FsIHNjb3BlIGZvciB0aGUgdmFyaWFibGVzIHdpdGggd2luZG93cyBOVCBzaGVsbA0KaWYgIiVFUlJPUkxFVkVMJSI9PSIwIiBnb3RvIG1haW5FbmQNCg0KOmZhaWwNCnJlbSBTZXQgdmFyaWFibGUgR1JBRExFX0VYSVRfQ09OU09MRSBpZiB5b3UgbmVlZCB0aGUgX3NjcmlwdF8gcmV0dXJuIGNvZGUgaW5zdGVhZCBvZg0KcmVtIHRoZSBfY21kLmV4ZSAvY18gcmV0dXJuIGNvZGUhDQppZiAgbm90ICIiID09ICIlR1JBRExFX0VYSVRfQ09OU09MRSUiIGV4aXQgMQ0KZXhpdCAvYiAxDQoNCjptYWluRW5kDQppZiAiJU9TJSI9PSJXaW5kb3dzX05UIiBlbmRsb2NhbA0KDQo6b21lZ2ENCg=="; +constexpr const char* gradlew_bat_file_content = "QHJlbQpAcmVtIENvcHlyaWdodCAyMDE1IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycy4KQHJlbQpAcmVtIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAcmVtIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQHJlbSBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKQHJlbQpAcmVtICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMApAcmVtCkByZW0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpAcmVtIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCkByZW0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCkByZW0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApAcmVtIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpAcmVtCgpAaWYgIiVERUJVRyUiID09ICIiIEBlY2hvIG9mZgpAcmVtICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkByZW0KQHJlbSAgR3JhZGxlIHN0YXJ0dXAgc2NyaXB0IGZvciBXaW5kb3dzCkByZW0KQHJlbSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKQHJlbSBTZXQgbG9jYWwgc2NvcGUgZm9yIHRoZSB2YXJpYWJsZXMgd2l0aCB3aW5kb3dzIE5UIHNoZWxsCmlmICIlT1MlIj09IldpbmRvd3NfTlQiIHNldGxvY2FsCgpzZXQgRElSTkFNRT0lfmRwMAppZiAiJURJUk5BTUUlIiA9PSAiIiBzZXQgRElSTkFNRT0uCnNldCBBUFBfQkFTRV9OQU1FPSV+bjAKc2V0IEFQUF9IT01FPSVESVJOQU1FJQoKQHJlbSBSZXNvbHZlIGFueSAiLiIgYW5kICIuLiIgaW4gQVBQX0hPTUUgdG8gbWFrZSBpdCBzaG9ydGVyLgpmb3IgJSVpIGluICgiJUFQUF9IT01FJSIpIGRvIHNldCBBUFBfSE9NRT0lJX5maQoKQHJlbSBBZGQgZGVmYXVsdCBKVk0gb3B0aW9ucyBoZXJlLiBZb3UgY2FuIGFsc28gdXNlIEpBVkFfT1BUUyBhbmQgR1JBRExFX09QVFMgdG8gcGFzcyBKVk0gb3B0aW9ucyB0byB0aGlzIHNjcmlwdC4Kc2V0IERFRkFVTFRfSlZNX09QVFM9Ii1YbXg2NG0iICItWG1zNjRtIgoKQHJlbSBGaW5kIGphdmEuZXhlCmlmIGRlZmluZWQgSkFWQV9IT01FIGdvdG8gZmluZEphdmFGcm9tSmF2YUhvbWUKCnNldCBKQVZBX0VYRT1qYXZhLmV4ZQolSkFWQV9FWEUlIC12ZXJzaW9uID5OVUwgMj4mMQppZiAiJUVSUk9STEVWRUwlIiA9PSAiMCIgZ290byBpbml0CgplY2hvLgplY2hvIEVSUk9SOiBKQVZBX0hPTUUgaXMgbm90IHNldCBhbmQgbm8gJ2phdmEnIGNvbW1hbmQgY291bGQgYmUgZm91bmQgaW4geW91ciBQQVRILgplY2hvLgplY2hvIFBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQplY2hvIGxvY2F0aW9uIG9mIHlvdXIgSmF2YSBpbnN0YWxsYXRpb24uCgpnb3RvIGZhaWwKCjpmaW5kSmF2YUZyb21KYXZhSG9tZQpzZXQgSkFWQV9IT01FPSVKQVZBX0hPTUU6Ij0lCnNldCBKQVZBX0VYRT0lSkFWQV9IT01FJS9iaW4vamF2YS5leGUKCmlmIGV4aXN0ICIlSkFWQV9FWEUlIiBnb3RvIGluaXQKCmVjaG8uCmVjaG8gRVJST1I6IEpBVkFfSE9NRSBpcyBzZXQgdG8gYW4gaW52YWxpZCBkaXJlY3Rvcnk6ICVKQVZBX0hPTUUlCmVjaG8uCmVjaG8gUGxlYXNlIHNldCB0aGUgSkFWQV9IT01FIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgdG8gbWF0Y2ggdGhlCmVjaG8gbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4KCmdvdG8gZmFpbAoKOmluaXQKQHJlbSBHZXQgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgaGFuZGxpbmcgV2luZG93cyB2YXJpYW50cwoKaWYgbm90ICIlT1MlIiA9PSAiV2luZG93c19OVCIgZ290byB3aW45eE1FX2FyZ3MKCjp3aW45eE1FX2FyZ3MKQHJlbSBTbHVycCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4Kc2V0IENNRF9MSU5FX0FSR1M9CnNldCBfU0tJUD0yCgo6d2luOXhNRV9hcmdzX3NsdXJwCmlmICJ4JX4xIiA9PSAieCIgZ290byBleGVjdXRlCgpzZXQgQ01EX0xJTkVfQVJHUz0lKgoKOmV4ZWN1dGUKQHJlbSBTZXR1cCB0aGUgY29tbWFuZCBsaW5lCgpzZXQgQ0xBU1NQQVRIPSVBUFBfSE9NRSVcZ3JhZGxlXHdyYXBwZXJcZ3JhZGxlLXdyYXBwZXIuamFyCgoKQHJlbSBFeGVjdXRlIEdyYWRsZQoiJUpBVkFfRVhFJSIgJURFRkFVTFRfSlZNX09QVFMlICVKQVZBX09QVFMlICVHUkFETEVfT1BUUyUgIi1Eb3JnLmdyYWRsZS5hcHBuYW1lPSVBUFBfQkFTRV9OQU1FJSIgLWNsYXNzcGF0aCAiJUNMQVNTUEFUSCUiIG9yZy5ncmFkbGUud3JhcHBlci5HcmFkbGVXcmFwcGVyTWFpbiAlQ01EX0xJTkVfQVJHUyUKCjplbmQKQHJlbSBFbmQgbG9jYWwgc2NvcGUgZm9yIHRoZSB2YXJpYWJsZXMgd2l0aCB3aW5kb3dzIE5UIHNoZWxsCmlmICIlRVJST1JMRVZFTCUiPT0iMCIgZ290byBtYWluRW5kCgo6ZmFpbApyZW0gU2V0IHZhcmlhYmxlIEdSQURMRV9FWElUX0NPTlNPTEUgaWYgeW91IG5lZWQgdGhlIF9zY3JpcHRfIHJldHVybiBjb2RlIGluc3RlYWQgb2YKcmVtIHRoZSBfY21kLmV4ZSAvY18gcmV0dXJuIGNvZGUhCmlmICBub3QgIiIgPT0gIiVHUkFETEVfRVhJVF9DT05TT0xFJSIgZXhpdCAxCmV4aXQgL2IgMQoKOm1haW5FbmQKaWYgIiVPUyUiPT0iV2luZG93c19OVCIgZW5kbG9jYWwKCjpvbWVnYQo="; + +constexpr const char* settings_gradle_kts_file_name = R"(settings.gradle.kts)"; +constexpr const char* settings_gradle_kts_file_content = "CnBsdWdpbnMgewogICAgLy8gdG8gYXV0b21hdGljYWxseSBkb3dubG9hZCB0aGUgdG9vbGNoYWluIGpkayBpZiBtaXNzaW5nCiAgICBpZCgib3JnLmdyYWRsZS50b29sY2hhaW5zLmZvb2pheS1yZXNvbHZlci1jb252ZW50aW9uIikgdmVyc2lvbiAiMC45LjAiIC8vIGh0dHBzOi8vcGx1Z2lucy5ncmFkbGUub3JnL3BsdWdpbi9vcmcuZ3JhZGxlLnRvb2xjaGFpbnMuZm9vamF5LXJlc29sdmVyLWNvbnZlbnRpb24KfQoKcm9vdFByb2plY3QubmFtZSA9ICJQUk9KRUNUX05BTUUiCg=="; constexpr const char* gradlew_file_name = R"(gradlew)"; -constexpr const char* gradlew_file_content = "IyEvdXNyL2Jpbi9lbnYgc2gNCg0KIw0KIyBDb3B5cmlnaHQgMjAxNSB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuDQojDQojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KIw0KIyAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiMNCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIw0KIyMgIEdyYWRsZSBzdGFydCB1cCBzY3JpcHQgZm9yIFVOKlgNCiMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyBBdHRlbXB0IHRvIHNldCBBUFBfSE9NRQ0KIyBSZXNvbHZlIGxpbmtzOiAkMCBtYXkgYmUgYSBsaW5rDQpQUkc9IiQwIg0KIyBOZWVkIHRoaXMgZm9yIHJlbGF0aXZlIHN5bWxpbmtzLg0Kd2hpbGUgWyAtaCAiJFBSRyIgXSA7IGRvDQogICAgbHM9YGxzIC1sZCAiJFBSRyJgDQogICAgbGluaz1gZXhwciAiJGxzIiA6ICcuKi0+IFwoLipcKSQnYA0KICAgIGlmIGV4cHIgIiRsaW5rIiA6ICcvLionID4gL2Rldi9udWxsOyB0aGVuDQogICAgICAgIFBSRz0iJGxpbmsiDQogICAgZWxzZQ0KICAgICAgICBQUkc9YGRpcm5hbWUgIiRQUkciYCIvJGxpbmsiDQogICAgZmkNCmRvbmUNClNBVkVEPSJgcHdkYCINCmNkICJgZGlybmFtZSBcIiRQUkdcImAvIiA+L2Rldi9udWxsDQpBUFBfSE9NRT0iYHB3ZCAtUGAiDQpjZCAiJFNBVkVEIiA+L2Rldi9udWxsDQoNCkFQUF9OQU1FPSJHcmFkbGUiDQpBUFBfQkFTRV9OQU1FPWBiYXNlbmFtZSAiJDAiYA0KDQojIEFkZCBkZWZhdWx0IEpWTSBvcHRpb25zIGhlcmUuIFlvdSBjYW4gYWxzbyB1c2UgSkFWQV9PUFRTIGFuZCBHUkFETEVfT1BUUyB0byBwYXNzIEpWTSBvcHRpb25zIHRvIHRoaXMgc2NyaXB0Lg0KREVGQVVMVF9KVk1fT1BUUz0nIi1YbXg2NG0iICItWG1zNjRtIicNCg0KIyBVc2UgdGhlIG1heGltdW0gYXZhaWxhYmxlLCBvciBzZXQgTUFYX0ZEICE9IC0xIHRvIHVzZSB0aGF0IHZhbHVlLg0KTUFYX0ZEPSJtYXhpbXVtIg0KDQp3YXJuICgpIHsNCiAgICBlY2hvICIkKiINCn0NCg0KZGllICgpIHsNCiAgICBlY2hvDQogICAgZWNobyAiJCoiDQogICAgZWNobw0KICAgIGV4aXQgMQ0KfQ0KDQojIE9TIHNwZWNpZmljIHN1cHBvcnQgKG11c3QgYmUgJ3RydWUnIG9yICdmYWxzZScpLg0KY3lnd2luPWZhbHNlDQptc3lzPWZhbHNlDQpkYXJ3aW49ZmFsc2UNCm5vbnN0b3A9ZmFsc2UNCmNhc2UgImB1bmFtZWAiIGluDQogIENZR1dJTiogKQ0KICAgIGN5Z3dpbj10cnVlDQogICAgOzsNCiAgRGFyd2luKiApDQogICAgZGFyd2luPXRydWUNCiAgICA7Ow0KICBNSU5HVyogKQ0KICAgIG1zeXM9dHJ1ZQ0KICAgIDs7DQogIE5PTlNUT1AqICkNCiAgICBub25zdG9wPXRydWUNCiAgICA7Ow0KZXNhYw0KDQpDTEFTU1BBVEg9JEFQUF9IT01FL2dyYWRsZS93cmFwcGVyL2dyYWRsZS13cmFwcGVyLmphcg0KDQoNCiMgRGV0ZXJtaW5lIHRoZSBKYXZhIGNvbW1hbmQgdG8gdXNlIHRvIHN0YXJ0IHRoZSBKVk0uDQppZiBbIC1uICIkSkFWQV9IT01FIiBdIDsgdGhlbg0KICAgIGlmIFsgLXggIiRKQVZBX0hPTUUvanJlL3NoL2phdmEiIF0gOyB0aGVuDQogICAgICAgICMgSUJNJ3MgSkRLIG9uIEFJWCB1c2VzIHN0cmFuZ2UgbG9jYXRpb25zIGZvciB0aGUgZXhlY3V0YWJsZXMNCiAgICAgICAgSkFWQUNNRD0iJEpBVkFfSE9NRS9qcmUvc2gvamF2YSINCiAgICBlbHNlDQogICAgICAgIEpBVkFDTUQ9IiRKQVZBX0hPTUUvYmluL2phdmEiDQogICAgZmkNCiAgICBpZiBbICEgLXggIiRKQVZBQ01EIiBdIDsgdGhlbg0KICAgICAgICBkaWUgIkVSUk9SOiBKQVZBX0hPTUUgaXMgc2V0IHRvIGFuIGludmFsaWQgZGlyZWN0b3J5OiAkSkFWQV9IT01FDQoNClBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQ0KbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4iDQogICAgZmkNCmVsc2UNCiAgICBKQVZBQ01EPSJqYXZhIg0KICAgIHdoaWNoIGphdmEgPi9kZXYvbnVsbCAyPiYxIHx8IGRpZSAiRVJST1I6IEpBVkFfSE9NRSBpcyBub3Qgc2V0IGFuZCBubyAnamF2YScgY29tbWFuZCBjb3VsZCBiZSBmb3VuZCBpbiB5b3VyIFBBVEguDQoNClBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQ0KbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4iDQpmaQ0KDQojIEluY3JlYXNlIHRoZSBtYXhpbXVtIGZpbGUgZGVzY3JpcHRvcnMgaWYgd2UgY2FuLg0KaWYgWyAiJGN5Z3dpbiIgPSAiZmFsc2UiIC1hICIkZGFyd2luIiA9ICJmYWxzZSIgLWEgIiRub25zdG9wIiA9ICJmYWxzZSIgXSA7IHRoZW4NCiAgICBNQVhfRkRfTElNSVQ9YHVsaW1pdCAtSCAtbmANCiAgICBpZiBbICQ/IC1lcSAwIF0gOyB0aGVuDQogICAgICAgIGlmIFsgIiRNQVhfRkQiID0gIm1heGltdW0iIC1vICIkTUFYX0ZEIiA9ICJtYXgiIF0gOyB0aGVuDQogICAgICAgICAgICBNQVhfRkQ9IiRNQVhfRkRfTElNSVQiDQogICAgICAgIGZpDQogICAgICAgIHVsaW1pdCAtbiAkTUFYX0ZEDQogICAgICAgIGlmIFsgJD8gLW5lIDAgXSA7IHRoZW4NCiAgICAgICAgICAgIHdhcm4gIkNvdWxkIG5vdCBzZXQgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3IgbGltaXQ6ICRNQVhfRkQiDQogICAgICAgIGZpDQogICAgZWxzZQ0KICAgICAgICB3YXJuICJDb3VsZCBub3QgcXVlcnkgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3IgbGltaXQ6ICRNQVhfRkRfTElNSVQiDQogICAgZmkNCmZpDQoNCiMgRm9yIERhcndpbiwgYWRkIG9wdGlvbnMgdG8gc3BlY2lmeSBob3cgdGhlIGFwcGxpY2F0aW9uIGFwcGVhcnMgaW4gdGhlIGRvY2sNCmlmICRkYXJ3aW47IHRoZW4NCiAgICBHUkFETEVfT1BUUz0iJEdSQURMRV9PUFRTIFwiLVhkb2NrOm5hbWU9JEFQUF9OQU1FXCIgXCItWGRvY2s6aWNvbj0kQVBQX0hPTUUvbWVkaWEvZ3JhZGxlLmljbnNcIiINCmZpDQoNCiMgRm9yIEN5Z3dpbiBvciBNU1lTLCBzd2l0Y2ggcGF0aHMgdG8gV2luZG93cyBmb3JtYXQgYmVmb3JlIHJ1bm5pbmcgamF2YQ0KaWYgWyAiJGN5Z3dpbiIgPSAidHJ1ZSIgLW8gIiRtc3lzIiA9ICJ0cnVlIiBdIDsgdGhlbg0KICAgIEFQUF9IT01FPWBjeWdwYXRoIC0tcGF0aCAtLW1peGVkICIkQVBQX0hPTUUiYA0KICAgIENMQVNTUEFUSD1gY3lncGF0aCAtLXBhdGggLS1taXhlZCAiJENMQVNTUEFUSCJgDQogICAgDQogICAgSkFWQUNNRD1gY3lncGF0aCAtLXVuaXggIiRKQVZBQ01EImANCg0KICAgICMgV2UgYnVpbGQgdGhlIHBhdHRlcm4gZm9yIGFyZ3VtZW50cyB0byBiZSBjb252ZXJ0ZWQgdmlhIGN5Z3BhdGgNCiAgICBST09URElSU1JBVz1gZmluZCAtTCAvIC1tYXhkZXB0aCAxIC1taW5kZXB0aCAxIC10eXBlIGQgMj4vZGV2L251bGxgDQogICAgU0VQPSIiDQogICAgZm9yIGRpciBpbiAkUk9PVERJUlNSQVcgOyBkbw0KICAgICAgICBST09URElSUz0iJFJPT1RESVJTJFNFUCRkaXIiDQogICAgICAgIFNFUD0ifCINCiAgICBkb25lDQogICAgT1VSQ1lHUEFUVEVSTj0iKF4oJFJPT1RESVJTKSkiDQogICAgIyBBZGQgYSB1c2VyLWRlZmluZWQgcGF0dGVybiB0byB0aGUgY3lncGF0aCBhcmd1bWVudHMNCiAgICBpZiBbICIkR1JBRExFX0NZR1BBVFRFUk4iICE9ICIiIF0gOyB0aGVuDQogICAgICAgIE9VUkNZR1BBVFRFUk49IiRPVVJDWUdQQVRURVJOfCgkR1JBRExFX0NZR1BBVFRFUk4pIg0KICAgIGZpDQogICAgIyBOb3cgY29udmVydCB0aGUgYXJndW1lbnRzIC0ga2x1ZGdlIHRvIGxpbWl0IG91cnNlbHZlcyB0byAvYmluL3NoDQogICAgaT0wDQogICAgZm9yIGFyZyBpbiAiJEAiIDsgZG8NCiAgICAgICAgQ0hFQ0s9YGVjaG8gIiRhcmcifGVncmVwIC1jICIkT1VSQ1lHUEFUVEVSTiIgLWANCiAgICAgICAgQ0hFQ0syPWBlY2hvICIkYXJnInxlZ3JlcCAtYyAiXi0iYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyBEZXRlcm1pbmUgaWYgYW4gb3B0aW9uDQoNCiAgICAgICAgaWYgWyAkQ0hFQ0sgLW5lIDAgXSAmJiBbICRDSEVDSzIgLWVxIDAgXSA7IHRoZW4gICAgICAgICAgICAgICAgICAgICMjIyBBZGRlZCBhIGNvbmRpdGlvbg0KICAgICAgICAgICAgZXZhbCBgZWNobyBhcmdzJGlgPWBjeWdwYXRoIC0tcGF0aCAtLWlnbm9yZSAtLW1peGVkICIkYXJnImANCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgZXZhbCBgZWNobyBhcmdzJGlgPSJcIiRhcmdcIiINCiAgICAgICAgZmkNCiAgICAgICAgaT1gZXhwciAkaSArIDFgDQogICAgZG9uZQ0KICAgIGNhc2UgJGkgaW4NCiAgICAgICAgMCkgc2V0IC0tIDs7DQogICAgICAgIDEpIHNldCAtLSAiJGFyZ3MwIiA7Ow0KICAgICAgICAyKSBzZXQgLS0gIiRhcmdzMCIgIiRhcmdzMSIgOzsNCiAgICAgICAgMykgc2V0IC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiIDs7DQogICAgICAgIDQpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiA7Ow0KICAgICAgICA1KSBzZXQgLS0gIiRhcmdzMCIgIiRhcmdzMSIgIiRhcmdzMiIgIiRhcmdzMyIgIiRhcmdzNCIgOzsNCiAgICAgICAgNikgc2V0IC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQiICIkYXJnczUiIDs7DQogICAgICAgIDcpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiAiJGFyZ3M1IiAiJGFyZ3M2IiA7Ow0KICAgICAgICA4KSBzZXQgLS0gIiRhcmdzMCIgIiRhcmdzMSIgIiRhcmdzMiIgIiRhcmdzMyIgIiRhcmdzNCIgIiRhcmdzNSIgIiRhcmdzNiIgIiRhcmdzNyIgOzsNCiAgICAgICAgOSkgc2V0IC0tICIkYXJnczAiICIkYXJnczEiICIkYXJnczIiICIkYXJnczMiICIkYXJnczQiICIkYXJnczUiICIkYXJnczYiICIkYXJnczciICIkYXJnczgiIDs7DQogICAgZXNhYw0KZmkNCg0KIyBFc2NhcGUgYXBwbGljYXRpb24gYXJncw0Kc2F2ZSAoKSB7DQogICAgZm9yIGkgZG8gcHJpbnRmICVzXFxuICIkaSIgfCBzZWQgInMvJy8nXFxcXCcnL2c7MXMvXi8nLztcJHMvXCQvJyBcXFxcLyIgOyBkb25lDQogICAgZWNobyAiICINCn0NCkFQUF9BUkdTPWBzYXZlICIkQCJgDQoNCiMgQ29sbGVjdCBhbGwgYXJndW1lbnRzIGZvciB0aGUgamF2YSBjb21tYW5kLCBmb2xsb3dpbmcgdGhlIHNoZWxsIHF1b3RpbmcgYW5kIHN1YnN0aXR1dGlvbiBydWxlcw0KZXZhbCBzZXQgLS0gJERFRkFVTFRfSlZNX09QVFMgJEpBVkFfT1BUUyAkR1JBRExFX09QVFMgIlwiLURvcmcuZ3JhZGxlLmFwcG5hbWU9JEFQUF9CQVNFX05BTUVcIiIgLWNsYXNzcGF0aCAiXCIkQ0xBU1NQQVRIXCIiIG9yZy5ncmFkbGUud3JhcHBlci5HcmFkbGVXcmFwcGVyTWFpbiAiJEFQUF9BUkdTIg0KDQpleGVjICIkSkFWQUNNRCIgIiRAIg0K"; +constexpr const char* gradlew_file_content = "IyEvdXNyL2Jpbi9lbnYgc2gKCiMKIyBDb3B5cmlnaHQgMjAxNSB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjCiMjICBHcmFkbGUgc3RhcnQgdXAgc2NyaXB0IGZvciBVTipYCiMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBBdHRlbXB0IHRvIHNldCBBUFBfSE9NRQojIFJlc29sdmUgbGlua3M6ICQwIG1heSBiZSBhIGxpbmsKUFJHPSIkMCIKIyBOZWVkIHRoaXMgZm9yIHJlbGF0aXZlIHN5bWxpbmtzLgp3aGlsZSBbIC1oICIkUFJHIiBdIDsgZG8KICAgIGxzPWBscyAtbGQgIiRQUkciYAogICAgbGluaz1gZXhwciAiJGxzIiA6ICcuKi0+IFwoLipcKSQnYAogICAgaWYgZXhwciAiJGxpbmsiIDogJy8uKicgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICBQUkc9IiRsaW5rIgogICAgZWxzZQogICAgICAgIFBSRz1gZGlybmFtZSAiJFBSRyJgIi8kbGluayIKICAgIGZpCmRvbmUKU0FWRUQ9ImBwd2RgIgpjZCAiYGRpcm5hbWUgXCIkUFJHXCJgLyIgPi9kZXYvbnVsbApBUFBfSE9NRT0iYHB3ZCAtUGAiCmNkICIkU0FWRUQiID4vZGV2L251bGwKCkFQUF9OQU1FPSJHcmFkbGUiCkFQUF9CQVNFX05BTUU9YGJhc2VuYW1lICIkMCJgCgojIEFkZCBkZWZhdWx0IEpWTSBvcHRpb25zIGhlcmUuIFlvdSBjYW4gYWxzbyB1c2UgSkFWQV9PUFRTIGFuZCBHUkFETEVfT1BUUyB0byBwYXNzIEpWTSBvcHRpb25zIHRvIHRoaXMgc2NyaXB0LgpERUZBVUxUX0pWTV9PUFRTPSciLVhteDY0bSIgIi1YbXM2NG0iJwoKIyBVc2UgdGhlIG1heGltdW0gYXZhaWxhYmxlLCBvciBzZXQgTUFYX0ZEICE9IC0xIHRvIHVzZSB0aGF0IHZhbHVlLgpNQVhfRkQ9Im1heGltdW0iCgp3YXJuICgpIHsKICAgIGVjaG8gIiQqIgp9CgpkaWUgKCkgewogICAgZWNobwogICAgZWNobyAiJCoiCiAgICBlY2hvCiAgICBleGl0IDEKfQoKIyBPUyBzcGVjaWZpYyBzdXBwb3J0IChtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnKS4KY3lnd2luPWZhbHNlCm1zeXM9ZmFsc2UKZGFyd2luPWZhbHNlCm5vbnN0b3A9ZmFsc2UKY2FzZSAiYHVuYW1lYCIgaW4KICBDWUdXSU4qICkKICAgIGN5Z3dpbj10cnVlCiAgICA7OwogIERhcndpbiogKQogICAgZGFyd2luPXRydWUKICAgIDs7CiAgTUlOR1cqICkKICAgIG1zeXM9dHJ1ZQogICAgOzsKICBOT05TVE9QKiApCiAgICBub25zdG9wPXRydWUKICAgIDs7CmVzYWMKCkNMQVNTUEFUSD0kQVBQX0hPTUUvZ3JhZGxlL3dyYXBwZXIvZ3JhZGxlLXdyYXBwZXIuamFyCgoKIyBEZXRlcm1pbmUgdGhlIEphdmEgY29tbWFuZCB0byB1c2UgdG8gc3RhcnQgdGhlIEpWTS4KaWYgWyAtbiAiJEpBVkFfSE9NRSIgXSA7IHRoZW4KICAgIGlmIFsgLXggIiRKQVZBX0hPTUUvanJlL3NoL2phdmEiIF0gOyB0aGVuCiAgICAgICAgIyBJQk0ncyBKREsgb24gQUlYIHVzZXMgc3RyYW5nZSBsb2NhdGlvbnMgZm9yIHRoZSBleGVjdXRhYmxlcwogICAgICAgIEpBVkFDTUQ9IiRKQVZBX0hPTUUvanJlL3NoL2phdmEiCiAgICBlbHNlCiAgICAgICAgSkFWQUNNRD0iJEpBVkFfSE9NRS9iaW4vamF2YSIKICAgIGZpCiAgICBpZiBbICEgLXggIiRKQVZBQ01EIiBdIDsgdGhlbgogICAgICAgIGRpZSAiRVJST1I6IEpBVkFfSE9NRSBpcyBzZXQgdG8gYW4gaW52YWxpZCBkaXJlY3Rvcnk6ICRKQVZBX0hPTUUKClBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZQpsb2NhdGlvbiBvZiB5b3VyIEphdmEgaW5zdGFsbGF0aW9uLiIKICAgIGZpCmVsc2UKICAgIEpBVkFDTUQ9ImphdmEiCiAgICB3aGljaCBqYXZhID4vZGV2L251bGwgMj4mMSB8fCBkaWUgIkVSUk9SOiBKQVZBX0hPTUUgaXMgbm90IHNldCBhbmQgbm8gJ2phdmEnIGNvbW1hbmQgY291bGQgYmUgZm91bmQgaW4geW91ciBQQVRILgoKUGxlYXNlIHNldCB0aGUgSkFWQV9IT01FIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgdG8gbWF0Y2ggdGhlCmxvY2F0aW9uIG9mIHlvdXIgSmF2YSBpbnN0YWxsYXRpb24uIgpmaQoKIyBJbmNyZWFzZSB0aGUgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3JzIGlmIHdlIGNhbi4KaWYgWyAiJGN5Z3dpbiIgPSAiZmFsc2UiIC1hICIkZGFyd2luIiA9ICJmYWxzZSIgLWEgIiRub25zdG9wIiA9ICJmYWxzZSIgXSA7IHRoZW4KICAgIE1BWF9GRF9MSU1JVD1gdWxpbWl0IC1IIC1uYAogICAgaWYgWyAkPyAtZXEgMCBdIDsgdGhlbgogICAgICAgIGlmIFsgIiRNQVhfRkQiID0gIm1heGltdW0iIC1vICIkTUFYX0ZEIiA9ICJtYXgiIF0gOyB0aGVuCiAgICAgICAgICAgIE1BWF9GRD0iJE1BWF9GRF9MSU1JVCIKICAgICAgICBmaQogICAgICAgIHVsaW1pdCAtbiAkTUFYX0ZECiAgICAgICAgaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgogICAgICAgICAgICB3YXJuICJDb3VsZCBub3Qgc2V0IG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIGxpbWl0OiAkTUFYX0ZEIgogICAgICAgIGZpCiAgICBlbHNlCiAgICAgICAgd2FybiAiQ291bGQgbm90IHF1ZXJ5IG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIGxpbWl0OiAkTUFYX0ZEX0xJTUlUIgogICAgZmkKZmkKCiMgRm9yIERhcndpbiwgYWRkIG9wdGlvbnMgdG8gc3BlY2lmeSBob3cgdGhlIGFwcGxpY2F0aW9uIGFwcGVhcnMgaW4gdGhlIGRvY2sKaWYgJGRhcndpbjsgdGhlbgogICAgR1JBRExFX09QVFM9IiRHUkFETEVfT1BUUyBcIi1YZG9jazpuYW1lPSRBUFBfTkFNRVwiIFwiLVhkb2NrOmljb249JEFQUF9IT01FL21lZGlhL2dyYWRsZS5pY25zXCIiCmZpCgojIEZvciBDeWd3aW4gb3IgTVNZUywgc3dpdGNoIHBhdGhzIHRvIFdpbmRvd3MgZm9ybWF0IGJlZm9yZSBydW5uaW5nIGphdmEKaWYgWyAiJGN5Z3dpbiIgPSAidHJ1ZSIgLW8gIiRtc3lzIiA9ICJ0cnVlIiBdIDsgdGhlbgogICAgQVBQX0hPTUU9YGN5Z3BhdGggLS1wYXRoIC0tbWl4ZWQgIiRBUFBfSE9NRSJgCiAgICBDTEFTU1BBVEg9YGN5Z3BhdGggLS1wYXRoIC0tbWl4ZWQgIiRDTEFTU1BBVEgiYAogICAgCiAgICBKQVZBQ01EPWBjeWdwYXRoIC0tdW5peCAiJEpBVkFDTUQiYAoKICAgICMgV2UgYnVpbGQgdGhlIHBhdHRlcm4gZm9yIGFyZ3VtZW50cyB0byBiZSBjb252ZXJ0ZWQgdmlhIGN5Z3BhdGgKICAgIFJPT1RESVJTUkFXPWBmaW5kIC1MIC8gLW1heGRlcHRoIDEgLW1pbmRlcHRoIDEgLXR5cGUgZCAyPi9kZXYvbnVsbGAKICAgIFNFUD0iIgogICAgZm9yIGRpciBpbiAkUk9PVERJUlNSQVcgOyBkbwogICAgICAgIFJPT1RESVJTPSIkUk9PVERJUlMkU0VQJGRpciIKICAgICAgICBTRVA9InwiCiAgICBkb25lCiAgICBPVVJDWUdQQVRURVJOPSIoXigkUk9PVERJUlMpKSIKICAgICMgQWRkIGEgdXNlci1kZWZpbmVkIHBhdHRlcm4gdG8gdGhlIGN5Z3BhdGggYXJndW1lbnRzCiAgICBpZiBbICIkR1JBRExFX0NZR1BBVFRFUk4iICE9ICIiIF0gOyB0aGVuCiAgICAgICAgT1VSQ1lHUEFUVEVSTj0iJE9VUkNZR1BBVFRFUk58KCRHUkFETEVfQ1lHUEFUVEVSTikiCiAgICBmaQogICAgIyBOb3cgY29udmVydCB0aGUgYXJndW1lbnRzIC0ga2x1ZGdlIHRvIGxpbWl0IG91cnNlbHZlcyB0byAvYmluL3NoCiAgICBpPTAKICAgIGZvciBhcmcgaW4gIiRAIiA7IGRvCiAgICAgICAgQ0hFQ0s9YGVjaG8gIiRhcmcifGVncmVwIC1jICIkT1VSQ1lHUEFUVEVSTiIgLWAKICAgICAgICBDSEVDSzI9YGVjaG8gIiRhcmcifGVncmVwIC1jICJeLSJgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIERldGVybWluZSBpZiBhbiBvcHRpb24KCiAgICAgICAgaWYgWyAkQ0hFQ0sgLW5lIDAgXSAmJiBbICRDSEVDSzIgLWVxIDAgXSA7IHRoZW4gICAgICAgICAgICAgICAgICAgICMjIyBBZGRlZCBhIGNvbmRpdGlvbgogICAgICAgICAgICBldmFsIGBlY2hvIGFyZ3MkaWA9YGN5Z3BhdGggLS1wYXRoIC0taWdub3JlIC0tbWl4ZWQgIiRhcmciYAogICAgICAgIGVsc2UKICAgICAgICAgICAgZXZhbCBgZWNobyBhcmdzJGlgPSJcIiRhcmdcIiIKICAgICAgICBmaQogICAgICAgIGk9YGV4cHIgJGkgKyAxYAogICAgZG9uZQogICAgY2FzZSAkaSBpbgogICAgICAgIDApIHNldCAtLSA7OwogICAgICAgIDEpIHNldCAtLSAiJGFyZ3MwIiA7OwogICAgICAgIDIpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiA7OwogICAgICAgIDMpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiA7OwogICAgICAgIDQpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiA7OwogICAgICAgIDUpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiA7OwogICAgICAgIDYpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiAiJGFyZ3M1IiA7OwogICAgICAgIDcpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiAiJGFyZ3M1IiAiJGFyZ3M2IiA7OwogICAgICAgIDgpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiAiJGFyZ3M1IiAiJGFyZ3M2IiAiJGFyZ3M3IiA7OwogICAgICAgIDkpIHNldCAtLSAiJGFyZ3MwIiAiJGFyZ3MxIiAiJGFyZ3MyIiAiJGFyZ3MzIiAiJGFyZ3M0IiAiJGFyZ3M1IiAiJGFyZ3M2IiAiJGFyZ3M3IiAiJGFyZ3M4IiA7OwogICAgZXNhYwpmaQoKIyBFc2NhcGUgYXBwbGljYXRpb24gYXJncwpzYXZlICgpIHsKICAgIGZvciBpIGRvIHByaW50ZiAlc1xcbiAiJGkiIHwgc2VkICJzLycvJ1xcXFwnJy9nOzFzL14vJy87XCRzL1wkLycgXFxcXC8iIDsgZG9uZQogICAgZWNobyAiICIKfQpBUFBfQVJHUz1gc2F2ZSAiJEAiYAoKIyBDb2xsZWN0IGFsbCBhcmd1bWVudHMgZm9yIHRoZSBqYXZhIGNvbW1hbmQsIGZvbGxvd2luZyB0aGUgc2hlbGwgcXVvdGluZyBhbmQgc3Vic3RpdHV0aW9uIHJ1bGVzCmV2YWwgc2V0IC0tICRERUZBVUxUX0pWTV9PUFRTICRKQVZBX09QVFMgJEdSQURMRV9PUFRTICJcIi1Eb3JnLmdyYWRsZS5hcHBuYW1lPSRBUFBfQkFTRV9OQU1FXCIiIC1jbGFzc3BhdGggIlwiJENMQVNTUEFUSFwiIiBvcmcuZ3JhZGxlLndyYXBwZXIuR3JhZGxlV3JhcHBlck1haW4gIiRBUFBfQVJHUyIKCmV4ZWMgIiRKQVZBQ01EIiAiJEAiCg=="; -constexpr const char* settings_gradle_kts_file_name = R"(settings.gradle.kts)"; -constexpr const char* settings_gradle_kts_file_content = "DQpwbHVnaW5zIHsNCiAgICAvLyB0byBhdXRvbWF0aWNhbGx5IGRvd25sb2FkIHRoZSB0b29sY2hhaW4gamRrIGlmIG1pc3NpbmcNCiAgICBpZCgib3JnLmdyYWRsZS50b29sY2hhaW5zLmZvb2pheS1yZXNvbHZlci1jb252ZW50aW9uIikgdmVyc2lvbiAiMC45LjAiIC8vIGh0dHBzOi8vcGx1Z2lucy5ncmFkbGUub3JnL3BsdWdpbi9vcmcuZ3JhZGxlLnRvb2xjaGFpbnMuZm9vamF5LXJlc29sdmVyLWNvbnZlbnRpb24NCn0NCg0Kcm9vdFByb2plY3QubmFtZSA9ICJQUk9KRUNUX05BTUUiDQo="; +constexpr const char* _gitattributes_file_name = R"(.gitattributes)"; +constexpr const char* _gitattributes_file_content = "IwojIGh0dHBzOi8vaGVscC5naXRodWIuY29tL2FydGljbGVzL2RlYWxpbmctd2l0aC1saW5lLWVuZGluZ3MvCiMKIyBUaGVzZSBhcmUgZXhwbGljaXRseSB3aW5kb3dzIGZpbGVzIGFuZCBzaG91bGQgdXNlIGNybGYKKi5iYXQgICAgICAgICAgIHRleHQgZW9sPWNybGYKCg=="; constexpr const char* gradle_gdignore_file_name = R"(gradle/.gdignore)"; constexpr const char* gradle_gdignore_file_content = ""; @@ -33,15 +33,15 @@ constexpr const char* gradle_wrapper_gradle_wrapper_jar_file_name = R"(gradle/wr constexpr const char* gradle_wrapper_gradle_wrapper_jar_file_content = "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AAAAAAAADxMAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJEFmdGVyT3B0aW9ucy5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCL4zEXLAMAAF0HAAA8AAkAAAAAAAAAAAAAANMVAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRCZWZvcmVGaXJzdFN1YkNvbW1hbmQuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA6doPs98GAABiDgAAPQAJAAAAAAAAAAAAAAByGQAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkS25vd25PcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBDJ3yiTAIAAJcEAAA8AAkAAAAAAAAAAAAAAMUgAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRNaXNzaW5nT3B0aW9uQXJnU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAtJRbo9cCAABKBQAAPQAJAAAAAAAAAAAAAACEIwAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uQXdhcmVQYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQB1W3o/ogEAAH0CAAA4AAkAAAAAAAAAAAAAAM8mAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQAW1+kcDQIAAEMDAAAzAAkAAAAAAAAAAAAAAOAoAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25TdHJpbmcuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAkMnJiacBAADOAgAAMgAJAAAAAAAAAAAAAABXKwAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAS8+WoHMCAADHBAAAPwAJAAAAAAAAAAAAAABnLQAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkVW5rbm93bk9wdGlvblBhcnNlclN0YXRlLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAB2MmemvBAAAYwgAACYACQAAAAAAAAAAAAAAUDAAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAOsyd406BAAA4QcAACYACQAAAAAAAAAAAAAAXDUAAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAFrddm1UAQAArAEAACwACQAAAAAAAAAAAAAA8zkAAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lT3B0aW9uLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAPkkTxT/AgAAnAQAADMACQAAAAAAAAAAAAAAqjsAAG9yZy9ncmFkbGUvaW50ZXJuYWwvZmlsZS9QYXRoVHJhdmVyc2FsQ2hlY2tlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQB5tXfKhwEAAAMCAABBAAkAAAAAAAAAAAAAABM/AABvcmcvZ3JhZGxlL2ludGVybmFsL2ZpbGUvbG9ja2luZy9FeGNsdXNpdmVGaWxlQWNjZXNzTWFuYWdlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBipwaKwQEAAKMCAAA+AAkAAAAAAAAAAAAAABJBAABvcmcvZ3JhZGxlL3V0aWwvaW50ZXJuYWwvV3JhcHBlckRpc3RyaWJ1dGlvblVybENvbnZlcnRlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCcRdKajgEAAB4CAAAvAAkAAAAAAAAAAAAAAEhDAABvcmcvZ3JhZGxlL3dyYXBwZXIvQm9vdHN0cmFwTWFpblN0YXJ0ZXIkMS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCA0yUGKQMAAOQEAABBAAkAAAAAAAAAAAAAADxFAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkRGVmYXVsdERvd25sb2FkUHJvZ3Jlc3NMaXN0ZW5lci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQB3o7Ym5QIAABEFAAA0AAkAAAAAAAAAAAAAAN1IAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkUHJveHlBdXRoZW50aWNhdG9yLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhABgEsAxlCQAAKhIAACEACQAAAAAAAAAAAAAALUwAAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZC5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBBcxcJ2QEAALICAAAtAAkAAAAAAAAAAAAAAOpVAABvcmcvZ3JhZGxlL3dyYXBwZXIvR3JhZGxlVXNlckhvbWVMb29rdXAuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA3RS7hw0VAACpKQAAKgAJAAAAAAAAAAAAAAAnWAAAb3JnL2dyYWRsZS93cmFwcGVyL0dyYWRsZVdyYXBwZXJNYWluLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhACKYkR7DCwAAuhUAACIACQAAAAAAAAAAAAAAlW0AAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsJDEuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAqgSTSmoBAADnAQAALQAJAAAAAAAAAAAAAACxeQAAb3JnL2dyYWRsZS93cmFwcGVyL0luc3RhbGwkSW5zdGFsbENoZWNrLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAD8+qWeoDgAA2hsAACAACQAAAAAAAAAAAAAAf3sAAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAF32tW87AgAAHgQAAB8ACQAAAAAAAAAAAAAAfooAAG9yZy9ncmFk" "bGUvd3JhcHBlci9Mb2dnZXIuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA6imTPiQBAABqAQAAJgAJAAAAAAAAAAAAAAAPjQAAb3JnL2dyYWRsZS93cmFwcGVyL1BhdGhBc3NlbWJsZXIuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA1uMlrJoDAABOBgAAMAAJAAAAAAAAAAAAAACQjgAAb3JnL2dyYWRsZS93cmFwcGVyL1N5c3RlbVByb3BlcnRpZXNIYW5kbGVyLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAOYRBMnuAgAAUAYAAC0ACQAAAAAAAAAAAAAAkZIAAG9yZy9ncmFkbGUvd3JhcHBlci9XcmFwcGVyQ29uZmlndXJhdGlvbi5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQARWWHoUwYAAMUMAAAoAAkAAAAAAAAAAAAAAOOVAABvcmcvZ3JhZGxlL3dyYXBwZXIvV3JhcHBlckV4ZWN1dG9yLmNsYXNzVVQFAAEAAAAAUEsFBgAAAAAhACEAEg0AAJWcAAAAAA=="; constexpr const char* gradle_wrapper_gradle_wrapper_properties_file_name = R"(gradle/wrapper/gradle-wrapper.properties)"; -constexpr const char* gradle_wrapper_gradle_wrapper_properties_file_content = "ZGlzdHJpYnV0aW9uQmFzZT1HUkFETEVfVVNFUl9IT01FDQpkaXN0cmlidXRpb25QYXRoPXdyYXBwZXIvZGlzdHMNCmRpc3RyaWJ1dGlvblVybD1odHRwc1w6Ly9zZXJ2aWNlcy5ncmFkbGUub3JnL2Rpc3RyaWJ1dGlvbnMvZ3JhZGxlLTguMTAuMi1hbGwuemlwDQpuZXR3b3JrVGltZW91dD0xMDAwMA0KdmFsaWRhdGVEaXN0cmlidXRpb25Vcmw9dHJ1ZQ0KemlwU3RvcmVCYXNlPUdSQURMRV9VU0VSX0hPTUUNCnppcFN0b3JlUGF0aD13cmFwcGVyL2Rpc3RzDQo="; +constexpr const char* gradle_wrapper_gradle_wrapper_properties_file_content = "ZGlzdHJpYnV0aW9uQmFzZT1HUkFETEVfVVNFUl9IT01FCmRpc3RyaWJ1dGlvblBhdGg9d3JhcHBlci9kaXN0cwpkaXN0cmlidXRpb25Vcmw9aHR0cHNcOi8vc2VydmljZXMuZ3JhZGxlLm9yZy9kaXN0cmlidXRpb25zL2dyYWRsZS04LjEwLjItYWxsLnppcApuZXR3b3JrVGltZW91dD0xMDAwMAp2YWxpZGF0ZURpc3RyaWJ1dGlvblVybD10cnVlCnppcFN0b3JlQmFzZT1HUkFETEVfVVNFUl9IT01FCnppcFN0b3JlUGF0aD13cmFwcGVyL2Rpc3RzCg=="; constexpr const char* src_main_kotlin_godot_HelloGodot_kt_file_name = R"(src/main/kotlin/godot/HelloGodot.kt)"; -constexpr const char* src_main_kotlin_godot_HelloGodot_kt_file_content = "cGFja2FnZSBnb2RvdA0KDQppbXBvcnQgZ29kb3QuYW5ub3RhdGlvbi5FeHBvcnQNCmltcG9ydCBnb2RvdC5hbm5vdGF0aW9uLlJlZ2lzdGVyQ2xhc3MNCmltcG9ydCBnb2RvdC5hbm5vdGF0aW9uLlJlZ2lzdGVyRnVuY3Rpb24NCmltcG9ydCBnb2RvdC5hbm5vdGF0aW9uLlJlZ2lzdGVyUHJvcGVydHkNCmltcG9ydCBnb2RvdC5nbG9iYWwuR0QNCg0KQFJlZ2lzdGVyQ2xhc3MNCmNsYXNzIEhlbGxvV29ybGQgOiBOb2RlKCkgew0KDQogICAgQEV4cG9ydA0KICAgIEBSZWdpc3RlclByb3BlcnR5DQogICAgdmFyIGhlbGxvU3RyaW5nID0gICJHb2RvdCINCg0KICAgIEBSZWdpc3RlckZ1bmN0aW9uDQogICAgb3ZlcnJpZGUgZnVuIF9yZWFkeSgpIHsNCiAgICAgICAgR0QucHJpbnQoIkhlbGxvICRoZWxsb1N0cmluZyAhIikNCiAgICB9DQp9DQo="; +constexpr const char* src_main_kotlin_godot_HelloGodot_kt_file_content = "cGFja2FnZSBnb2RvdAoKaW1wb3J0IGdvZG90LmFubm90YXRpb24uRXhwb3J0CmltcG9ydCBnb2RvdC5hbm5vdGF0aW9uLlJlZ2lzdGVyQ2xhc3MKaW1wb3J0IGdvZG90LmFubm90YXRpb24uUmVnaXN0ZXJGdW5jdGlvbgppbXBvcnQgZ29kb3QuYW5ub3RhdGlvbi5SZWdpc3RlclByb3BlcnR5CmltcG9ydCBnb2RvdC5nbG9iYWwuR0QKCkBSZWdpc3RlckNsYXNzCmNsYXNzIEhlbGxvV29ybGQgOiBOb2RlKCkgewoKICAgIEBFeHBvcnQKICAgIEBSZWdpc3RlclByb3BlcnR5CiAgICB2YXIgaGVsbG9TdHJpbmcgPSAgIkdvZG90IgoKICAgIEBSZWdpc3RlckZ1bmN0aW9uCiAgICBvdmVycmlkZSBmdW4gX3JlYWR5KCkgewogICAgICAgIEdELnByaW50KCJIZWxsbyAkaGVsbG9TdHJpbmcgISIpCiAgICB9Cn0K"; constexpr const int number_of_files = 11; constexpr const bool file_is_binary[] = {false, false, false, false, false, false, false, false, true, false, false}; -constexpr const char* file_names[] = {_gitattributes_file_name, _gitignore_file_name, build_gradle_kts_file_name, gradle_properties_file_name, gradlew_bat_file_name, gradlew_file_name, settings_gradle_kts_file_name, gradle_gdignore_file_name, gradle_wrapper_gradle_wrapper_jar_file_name, gradle_wrapper_gradle_wrapper_properties_file_name, src_main_kotlin_godot_HelloGodot_kt_file_name}; -constexpr const char* file_contents[] = {_gitattributes_file_content, _gitignore_file_content, build_gradle_kts_file_content, gradle_properties_file_content, gradlew_bat_file_content, gradlew_file_content, settings_gradle_kts_file_content, gradle_gdignore_file_content, gradle_wrapper_gradle_wrapper_jar_file_content, gradle_wrapper_gradle_wrapper_properties_file_content, src_main_kotlin_godot_HelloGodot_kt_file_content}; +constexpr const char* file_names[] = {gradle_properties_file_name, _gitignore_file_name, build_gradle_kts_file_name, gradlew_bat_file_name, settings_gradle_kts_file_name, gradlew_file_name, _gitattributes_file_name, gradle_gdignore_file_name, gradle_wrapper_gradle_wrapper_jar_file_name, gradle_wrapper_gradle_wrapper_properties_file_name, src_main_kotlin_godot_HelloGodot_kt_file_name}; +constexpr const char* file_contents[] = {gradle_properties_file_content, _gitignore_file_content, build_gradle_kts_file_content, gradlew_bat_file_content, settings_gradle_kts_file_content, gradlew_file_content, _gitattributes_file_content, gradle_gdignore_file_content, gradle_wrapper_gradle_wrapper_jar_file_content, gradle_wrapper_gradle_wrapper_properties_file_content, src_main_kotlin_godot_HelloGodot_kt_file_content}; #endif // FILE_CONTENTS_H diff --git a/src/jvm_wrapper/registration/kt_class.cpp b/src/jvm_wrapper/registration/kt_class.cpp index baf155de47..2b22c660c0 100644 --- a/src/jvm_wrapper/registration/kt_class.cpp +++ b/src/jvm_wrapper/registration/kt_class.cpp @@ -5,11 +5,11 @@ KtClass::KtClass(jni::Env& p_env, jni::JObject p_wrapped) : JvmInstanceWrapper(p_env, p_wrapped), - constructors {}, + kt_constructor {nullptr}, _has_notification() { LOCAL_FRAME(4); registered_class_name = get_registered_name(p_env); - relative_source_path = get_relative_source_path(p_env); + fqdn = get_fqdn(p_env); compilation_time_relative_registration_file_path = get_compilation_time_relative_registration_file_path(p_env); base_godot_class = get_base_godot_class(p_env); _has_notification = get_has_notification(p_env); @@ -19,28 +19,19 @@ KtClass::~KtClass() { delete_members(methods); delete_members(properties); delete_members(signal_infos); - for (auto& constructor : constructors) { - delete constructor; - } + delete kt_constructor; } -KtObject* KtClass::create_instance(jni::Env& env, const Variant** p_args, int p_arg_count, Object* p_owner) { - JVM_DEV_ASSERT( - p_arg_count <= MAX_CONSTRUCTOR_SIZE, - "Cannot call constructor with %s, max arg count is %s", p_arg_count, MAX_CONSTRUCTOR_SIZE - ); - - KtConstructor* constructor {constructors[p_arg_count]}; - +KtObject* KtClass::create_instance(jni::Env& env, Object* p_owner) { #ifdef DEBUG_ENABLED JVM_ERR_FAIL_COND_V_MSG( - constructor == nullptr, + kt_constructor == nullptr, nullptr, - "Cannot find constructor with %s parameters for class %s", p_arg_count, registered_class_name + "Cannot find constructor for class %s", registered_class_name ); #endif - KtObject* jvm_instance {constructor->create_instance(env, p_args, p_owner)}; + KtObject* jvm_instance {kt_constructor->create_instance(env, p_owner)}; JVM_DEV_VERBOSE("Instantiated a Jvm script: %s", registered_class_name); return jvm_instance; @@ -66,8 +57,8 @@ String KtClass::get_registered_name(jni::Env& env) { return env.from_jstring(jni::JString((jstring) ret.obj)); } -String KtClass::get_relative_source_path(jni::Env& env) { - jni::JObject ret = wrapped.call_object_method(env, GET_RELATIVE_SOURCE_PATH); +String KtClass::get_fqdn(jni::Env& env) { + jni::JObject ret = wrapped.call_object_method(env, GET_FQDN); return env.from_jstring(jni::JString((jstring) ret.obj)); } @@ -126,18 +117,12 @@ void KtClass::fetch_signals(jni::Env& env) { signal_info_array.delete_local_ref(env); } -void KtClass::fetch_constructors(jni::Env& env) { - jni::JObjectArray constructors_array {wrapped.call_object_method(env, GET_CONSTRUCTORS)}; - for (int i = 0; i < constructors_array.length(env); i++) { - const jni::JObject& constructor {constructors_array.get(env, i)}; - KtConstructor* kt_constructor {nullptr}; - if (constructor.obj != nullptr) { - kt_constructor = new KtConstructor(env, constructor); - JVM_DEV_VERBOSE("Fetched constructor with %s parameters for class %s", i, registered_class_name); - } - constructors[i] = kt_constructor; +void KtClass::fetch_constructor(jni::Env& env) { + jni::JObject constructor {wrapped.call_object_method(env, GET_CONSTRUCTOR)}; + if (constructor.obj != nullptr) { + kt_constructor = new KtConstructor(env, constructor); + JVM_DEV_VERBOSE("Fetched constructor for class %s", registered_class_name); } - constructors_array.delete_local_ref(env); } void KtClass::get_method_list(List* p_list) { @@ -181,5 +166,5 @@ void KtClass::fetch_members(jni::Env& env) { fetch_methods(env); fetch_properties(env); fetch_signals(env); - fetch_constructors(env); + fetch_constructor(env); } diff --git a/src/jvm_wrapper/registration/kt_class.h b/src/jvm_wrapper/registration/kt_class.h index cb55f84073..5758b5b77e 100644 --- a/src/jvm_wrapper/registration/kt_class.h +++ b/src/jvm_wrapper/registration/kt_class.h @@ -10,34 +10,32 @@ #include "kt_object.h" #include "kt_signal_info.h" -const int MAX_CONSTRUCTOR_SIZE = MAX_CONSTRUCTOR_ARG_COUNT + 1; - JVM_INSTANCE_WRAPPER(KtClass, "godot.core.KtClass") { JVM_CLASS(KtClass) // clang-format off JNI_OBJECT_METHOD(GET_REGISTERED_NAME) - JNI_OBJECT_METHOD(GET_RELATIVE_SOURCE_PATH) + JNI_OBJECT_METHOD(GET_FQDN) JNI_OBJECT_METHOD(GET_COMPILATION_TIME_RELATIVE_REGISTRATION_FILE_PATH) JNI_OBJECT_METHOD(GET_REGISTERED_SUPERTYPES) JNI_OBJECT_METHOD(GET_BASE_GODOT_CLASS) JNI_OBJECT_METHOD(GET_FUNCTIONS) JNI_OBJECT_METHOD(GET_PROPERTIES) JNI_OBJECT_METHOD(GET_SIGNAL_INFOS) - JNI_OBJECT_METHOD(GET_CONSTRUCTORS) + JNI_OBJECT_METHOD(GET_CONSTRUCTOR) JNI_BOOLEAN_METHOD(GET_HAS_NOTIFICATION) JNI_VOID_METHOD(DO_NOTIFICATION) INIT_JNI_BINDINGS( INIT_JNI_METHOD(GET_REGISTERED_NAME, "getRegisteredName", "()Ljava/lang/String;") - INIT_JNI_METHOD(GET_RELATIVE_SOURCE_PATH, "getRelativeSourcePath", "()Ljava/lang/String;") + INIT_JNI_METHOD(GET_FQDN, "getFqdn", "()Ljava/lang/String;") INIT_JNI_METHOD(GET_COMPILATION_TIME_RELATIVE_REGISTRATION_FILE_PATH, "getCompilationTimeRelativeRegistrationFilePath", "()Ljava/lang/String;") INIT_JNI_METHOD(GET_REGISTERED_SUPERTYPES, "getRegisteredSupertypes", "()[Ljava/lang/String;") INIT_JNI_METHOD(GET_BASE_GODOT_CLASS, "getBaseGodotClass", "()Ljava/lang/String;") INIT_JNI_METHOD(GET_FUNCTIONS, "getFunctions", "()[Lgodot/core/KtFunction;") INIT_JNI_METHOD(GET_PROPERTIES, "getProperties", "()[Lgodot/core/KtProperty;") INIT_JNI_METHOD(GET_SIGNAL_INFOS, "getSignalInfos", "()[Lgodot/core/KtSignalInfo;") - INIT_JNI_METHOD(GET_CONSTRUCTORS, "getConstructors", "()[Lgodot/core/KtConstructor;") + INIT_JNI_METHOD(GET_CONSTRUCTOR, "getConstructor", "()Lgodot/core/KtConstructor;") INIT_JNI_METHOD(GET_HAS_NOTIFICATION, "getHasNotification", "()Z") INIT_JNI_METHOD(DO_NOTIFICATION, "doNotification", "(Lgodot/core/KtObject;)V") ) @@ -45,7 +43,7 @@ JVM_INSTANCE_WRAPPER(KtClass, "godot.core.KtClass") { // clang-format on public: StringName registered_class_name; - StringName relative_source_path; + StringName fqdn; StringName compilation_time_relative_registration_file_path; Vector registered_supertypes; StringName base_godot_class; @@ -54,7 +52,7 @@ JVM_INSTANCE_WRAPPER(KtClass, "godot.core.KtClass") { ~KtClass(); - KtObject* create_instance(jni::Env& env, const Variant** p_args, int p_arg_count, Object* p_owner); + KtObject* create_instance(jni::Env& env, Object* p_owner); KtFunction* get_method(const StringName& methodName); @@ -78,12 +76,12 @@ JVM_INSTANCE_WRAPPER(KtClass, "godot.core.KtClass") { HashMap methods; HashMap properties; HashMap signal_infos; - KtConstructor* constructors[MAX_CONSTRUCTOR_SIZE]; + KtConstructor* kt_constructor; bool _has_notification; String get_registered_name(jni::Env& env); - String get_relative_source_path(jni::Env& env); + String get_fqdn(jni::Env& env); String get_compilation_time_relative_registration_file_path(jni::Env& env); @@ -99,7 +97,7 @@ JVM_INSTANCE_WRAPPER(KtClass, "godot.core.KtClass") { void fetch_signals(jni::Env& env); - void fetch_constructors(jni::Env& env); + void fetch_constructor(jni::Env& env); template void get_member_list(List* p_list, HashMap& members) { diff --git a/src/jvm_wrapper/registration/kt_constructor.cpp b/src/jvm_wrapper/registration/kt_constructor.cpp index 599cc15444..28a01e51f9 100644 --- a/src/jvm_wrapper/registration/kt_constructor.cpp +++ b/src/jvm_wrapper/registration/kt_constructor.cpp @@ -2,14 +2,9 @@ #include "jvm_wrapper/memory/transfer_context.h" -KtConstructor::KtConstructor(jni::Env& p_env, jni::JObject p_wrapped) : JvmInstanceWrapper(p_env, p_wrapped), - parameter_count(0) { - parameter_count = static_cast(wrapped.call_int_method(p_env, GET_PARAMETER_COUNT)); -} - -KtObject* KtConstructor::create_instance(jni::Env& p_env, const Variant** p_args, Object* p_owner) { - TransferContext::get_instance().write_args(p_env, p_args, parameter_count); +KtConstructor::KtConstructor(jni::Env& p_env, jni::JObject p_wrapped) : JvmInstanceWrapper(p_env, p_wrapped) {} +KtObject* KtConstructor::create_instance(jni::Env& p_env, Object* p_owner) { uint64_t id = p_owner->get_instance_id(); jvalue args[2] = {jni::to_jni_arg(p_owner), jni::to_jni_arg(id)}; jni::JObject j_kt_object = wrapped.call_object_method(p_env, CONSTRUCT, args); diff --git a/src/jvm_wrapper/registration/kt_constructor.h b/src/jvm_wrapper/registration/kt_constructor.h index 1da523a824..575d5c4a94 100644 --- a/src/jvm_wrapper/registration/kt_constructor.h +++ b/src/jvm_wrapper/registration/kt_constructor.h @@ -8,11 +8,9 @@ JVM_INSTANCE_WRAPPER(KtConstructor, "godot.core.KtConstructor") { JVM_CLASS(KtConstructor) // clang-format off - JNI_INT_METHOD(GET_PARAMETER_COUNT) JNI_OBJECT_METHOD(CONSTRUCT) INIT_JNI_BINDINGS( - INIT_JNI_METHOD(GET_PARAMETER_COUNT, "getParameterCount", "()I") INIT_JNI_METHOD(CONSTRUCT, "construct", "(JJ)Lgodot/core/KtObject;") ) // clang-format on @@ -20,10 +18,7 @@ JVM_INSTANCE_WRAPPER(KtConstructor, "godot.core.KtConstructor") { public: explicit KtConstructor(jni::Env& p_env, jni::JObject p_wrapped); ~KtConstructor() = default; - KtObject* create_instance(jni::Env& env, const Variant** p_args, Object* p_owner); - -private: - int parameter_count; + KtObject* create_instance(jni::Env& env, Object* p_owner); }; #endif// GODOT_JVM_KT_CONSTRUCTOR_H diff --git a/src/kotlin_editor_export_plugin.cpp b/src/kotlin_editor_export_plugin.cpp index 489d4d6876..7a5edebd0a 100644 --- a/src/kotlin_editor_export_plugin.cpp +++ b/src/kotlin_editor_export_plugin.cpp @@ -6,6 +6,7 @@ #include "language/names.h" #include "lifecycle/jvm_user_configuration.h" #include "lifecycle/paths.h" +#include "script/jvm_script_manager.h" #include @@ -200,7 +201,25 @@ String KotlinEditorExportPlugin::get_name() const { void KotlinEditorExportPlugin::_export_file(const String& p_path, const String& p_type, const HashSet& p_features) { String ext = p_path.get_extension(); - if (ext == GODOT_JVM_REGISTRATION_FILE_EXTENSION || ext == GODOT_KOTLIN_SCRIPT_EXTENSION || ext == GODOT_JAVA_SCRIPT_EXTENSION) { + if (ext == GODOT_KOTLIN_SCRIPT_EXTENSION || ext == GODOT_JAVA_SCRIPT_EXTENSION || ext == GODOT_SCALA_SCRIPT_EXTENSION) { + // We replace the original script with another with the same path and name but with fqname content. + // The remap boolean ensures that the original file is not kept for the export. + + String source; + Error error; + String fq_name {SourceScript::parse_source_to_fqdn(p_path, source, &error) }; + + if (error != OK) { + JVM_LOG_WARNING(vformat("Failed to parse source %s", p_path)); + return; + } + + add_file(p_path, fq_name.to_utf8_buffer(), true); + + return; + } + + if (ext == GODOT_JVM_REGISTRATION_FILE_EXTENSION) { // We replace the original script with another with the same path and name but empty content. // The remap boolean ensures that the original file is not kept for the export. add_file(p_path, Vector(), true); diff --git a/src/language/names.h b/src/language/names.h index 89a02ae712..6b43a0237e 100644 --- a/src/language/names.h +++ b/src/language/names.h @@ -15,6 +15,10 @@ #define GODOT_JAVA_SCRIPT_NAME "JavaScript" #define GODOT_JAVA_LANGUAGE_NAME "Java" +#define GODOT_SCALA_SCRIPT_EXTENSION "scala" +#define GODOT_SCALA_SCRIPT_NAME "ScalaScript" +#define GODOT_SCALA_LANGUAGE_NAME "Scala" + #define GODOT_KOTLIN_PACKAGE "godot" #define PACKAGE_TEMPLATE "%PACKAGE%" diff --git a/src/language/scala_language.cpp b/src/language/scala_language.cpp new file mode 100644 index 0000000000..eca6125f3e --- /dev/null +++ b/src/language/scala_language.cpp @@ -0,0 +1,173 @@ +#include "scala_language.h" + +#include "names.h" +#include "script/language/scala_script.h" + +#include + +constexpr const char* SCALA_TEMPLATE = PACKAGE_TEMPLATE + "\n" + "\n" + "import " GODOT_KOTLIN_PACKAGE "." BASE_TEMPLATE "\n" + "import godot.annotation.{RegisterClass, RegisterFunction}\n" + "\n" + "@RegisterClass\n" + "class " CLASS_TEMPLATE " extends " BASE_TEMPLATE " {\n" + "\n" + " // Declare member variables here. Examples:\n" + " // val a: Int = 2;\n" + " // val b: String = \"text\";\n" + "\n" + " // Called when the node enters the scene tree for the first time.\n" + " @RegisterFunction\n" + " override def _ready(): Unit = {\n" + " \n" + " }\n" + "\n" + " // Called every frame. 'delta' is the elapsed time since the previous frame.\n" + " @RegisterFunction\n" + " override def _process(double delta): Unit = {\n" + " \n" + " }\n" + "}\n"; + +ScalaLanguage* ScalaLanguage::get_instance() { + static ScalaLanguage* instance {memnew(ScalaLanguage)}; + return instance; +} + +String ScalaLanguage::get_name() const { + return GODOT_SCALA_LANGUAGE_NAME; +} + +String ScalaLanguage::get_type() const { + return GODOT_SCALA_SCRIPT_NAME; +} + +String ScalaLanguage::get_extension() const { + return GODOT_SCALA_SCRIPT_EXTENSION; +} + +void ScalaLanguage::get_recognized_extensions(List* p_extensions) const { + p_extensions->push_back(GODOT_SCALA_SCRIPT_EXTENSION); +} + +void ScalaLanguage::get_reserved_words(List* p_words) const { + static const char* _reserved_words[] = { + "abstract", + "case", + "catch", + "class", + "def", + "do", + "else", + "extends", + "false", + "final", + "finally", + "for", + "forSome", + "if", + "implicit", + "import", + "lazy", + "match", + "new", + "null", + "object", + "override", + "package", + "private", + "protected", + "return", + "sealed", + "super", + "this", + "throw", + "trait", + "try", + "true", + "type", + "val", + "var", + "while", + "with", + "yield", + nullptr + }; + + const char** w = _reserved_words; + + while (*w) { + p_words->push_back(*w); + w++; + } +} + +bool ScalaLanguage::is_control_flow_keyword(const String& p_keyword) const { + return p_keyword == "break" || p_keyword == "catch" || p_keyword == "continue" || p_keyword == "do" + || p_keyword == "else" || p_keyword == "finally" || p_keyword == "for" || p_keyword == "if" || p_keyword == "return" + || p_keyword == "match" || p_keyword == "throw" || p_keyword == "try" || p_keyword == "while" || p_keyword == "yield"; +} + +void ScalaLanguage::get_comment_delimiters(List* p_delimiters) const { + p_delimiters->push_back("//"); + p_delimiters->push_back("/* */"); +} + +void ScalaLanguage::get_doc_comment_delimiters(List* p_delimiters) const { + p_delimiters->push_back("/** */"); +} + +void ScalaLanguage::get_string_delimiters(List* p_delimiters) const { + p_delimiters->push_back("' '"); + p_delimiters->push_back("\" \""); + p_delimiters->push_back("\"\"\" \"\"\""); +} + +Ref