From de709e558fed1a7aab8e4d575d6930e11b0abc4f Mon Sep 17 00:00:00 2001 From: CedNaru Date: Wed, 23 Apr 2025 23:57:15 +0200 Subject: [PATCH 01/11] Initial conversion --- .gitmodules | 3 + CMakeLists.txt | 30 +++++-- SConstruct | 85 ++++++++++++++++++++ SCsub | 45 ----------- generate_templates.py | 3 - godot-cpp | 1 + register_types.h | 9 --- src/editor/dialog/about_dialog.cpp | 7 +- src/editor/dialog/about_dialog.h | 7 +- src/editor/dialog/build_dialog.cpp | 7 +- src/editor/dialog/build_dialog.h | 7 +- src/editor/godot_kotlin_jvm_editor.cpp | 4 - src/editor/godot_kotlin_jvm_editor.h | 4 - src/editor/project/project_generator.cpp | 6 +- src/editor/project/project_generator.h | 5 -- src/editor/strings.h | 4 - src/logging.h | 19 ++--- register_types.cpp => src/register_types.cpp | 10 +-- src/register_types.h | 11 +++ src/shared_buffer.h | 6 +- 20 files changed, 142 insertions(+), 131 deletions(-) create mode 100644 .gitmodules create mode 100644 SConstruct delete mode 100644 SCsub create mode 160000 godot-cpp delete mode 100644 register_types.h rename register_types.cpp => src/register_types.cpp (93%) create mode 100644 src/register_types.h diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..29bd727bd5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "godot-cpp"] + path = godot-cpp + url = https://github.com/godotengine/godot-cpp.git diff --git a/CMakeLists.txt b/CMakeLists.txt index c85cca4fca..514aaafd4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,6 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(GODOT_ROOT_DIR ../../) # Uncomment to pass auto completion in TOOLS mode #add_compile_definitions(MONO_GLUE_ENABLED) @@ -20,17 +19,34 @@ add_compile_definitions(X11_ENABLED) #add_compile_definitions(IOS_ENABLED) #add_compile_definitions(__ANDROID__) + + + +#Godot-cpp +file(GLOB_RECURSE GODOT-CPP godot-cpp/*.cpp) +add_library(godot STATIC ${GODOT-CPP}) + + # Get sources file(GLOB_RECURSE SOURCES src/*.c**) file(GLOB_RECURSE HEADERS src/*.h**) +add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) + +# Includes +target_include_directories(godot + PUBLIC + godot-cpp/include + godot-cpp/include/godot_cpp + godot-cpp/gen/include + godot-cpp/gen/include/godot_cpp + godot-cpp/gdextension +) # JNI find_package(JNI REQUIRED) - -# Includes -include_directories(./src) -include_directories(${GODOT_ROOT_DIR}) include_directories(${JNI_INCLUDE_DIRS}) -# Target -add_library(${PROJECT_NAME} SHARED register_types.h register_types.cpp ${SOURCES} ${HEADERS}) \ No newline at end of file +target_link_libraries(${PROJECT_NAME} + PRIVATE + godot +) \ No newline at end of file diff --git a/SConstruct b/SConstruct new file mode 100644 index 0000000000..6d64a782e3 --- /dev/null +++ b/SConstruct @@ -0,0 +1,85 @@ +import os +import generate_templates + +env = SConscript("godot-cpp/SConstruct") +java_home = os.environ["JAVA_HOME"] + +# Generate templates when building the engine. +generate_templates.generate_header_from_files("kt/plugins/godot-intellij-plugin/src/main/resources/template", "src/editor/project/templates.h") + +# Add those directory manually, so we can skip the godot_cpp directory when including headers in C++ files +source_path = [ + os.path.join("godot-cpp", "include","godot_cpp"), + os.path.join("godot-cpp", "gen", "include","godot_cpp") +] +env.Append(CPPPATH=[env.Dir(d) for d in source_path]) + + +# For the reference: +# - CCFLAGS are compilation flags shared between C and C++ +# - CFLAGS are for C-specific compilation flags +# - CXXFLAGS are for C++-specific compilation flags +# - CPPFLAGS are for pre-processor flags +# - CPPDEFINES are for pre-processor defines +# - LINKFLAGS are for linking flags + +# tweak this if you want to use different folders, or more folders, to store your source code in. +env.Append(CPPPATH=["src/"]) +sources = [ + Glob("register_types.cpp"), + Glob("src/*.cpp"), + Glob("src/jni/*.cpp"), + Glob("src/binding/*.cpp"), + Glob("src/resource_format/*.cpp"), + Glob("src/language/*.cpp"), + Glob("src/script/*.cpp"), + Glob("src/script/language/*.cpp"), + Glob("src/jvm_wrapper/*.cpp"), + Glob("src/jvm_wrapper/registration/*.cpp"), + Glob("src/jvm_wrapper/bridge/*.cpp"), + Glob("src/jvm_wrapper/memory/*.cpp"), + Glob("src/lifecycle/*.cpp"), + Glob("src/lifecycle/platforms/*.cpp"), + ] + +if env["target"] in ["editor", "template_debug"]: + sources.append(Glob("src/editor/*.cpp")) + sources.append(Glob("src/editor/project/*.cpp")) + sources.append(Glob("src/editor/build/*.cpp")) + sources.append(Glob("src/editor/dialog/*.cpp")) + sources.append(Glob("src/editor/panel/*.cpp")) + +# Android +if env["platform"] != "android": + java_include_dirs = [ + java_home + "/include", + java_home + "/include/linux", + java_home + "/include/win32", + java_home + "/include/darwin" + ] + env.Append(CPPPATH=[java_include_dirs]) + + +if env["platform"] == "macos": + library = env.SharedLibrary( + "bin/godot.jvm.{}.{}.framework/godot.jvm.{}.{}".format( + env["platform"], env["target"], env["platform"], env["target"] + ), + source=sources, + ) +elif env["platform"] == "ios": + if env["ios_simulator"]: + library = env.StaticLibrary( + "bin/godot.jvm.{}.{}.simulator.a".format(env["platform"], env["target"]), + source=sources, + ) + else: + library = env.StaticLibrary( + "bin/godot.jvm.{}.{}.a".format(env["platform"], env["target"]), + source=sources, + ) +else: + library = env.SharedLibrary( + "bin/godot.jvm.{}{}".format(env["suffix"], env["SHLIBSUFFIX"]), + source=sources, + ) \ No newline at end of file diff --git a/SCsub b/SCsub deleted file mode 100644 index cddd9602b3..0000000000 --- a/SCsub +++ /dev/null @@ -1,45 +0,0 @@ -import os -import generate_templates - -Import("env") - -java_home = os.environ["JAVA_HOME"] - -module_env = env.Clone() - -# Generate templates when building the engine. -generate_templates.generate_header_from_files("kt/plugins/godot-intellij-plugin/src/main/resources/template", "src/editor/project/templates.h") - -# For header includes -module_env.Append(CPPPATH=["src/"]) - -# Android -if env["platform"] != "android": - java_include_dirs = [ - java_home + "/include", - java_home + "/include/linux", - java_home + "/include/win32", - java_home + "/include/darwin" - ] - module_env.Append(CPPPATH=[java_include_dirs]) - -# Common -module_env.add_source_files(module_env.modules_sources, "register_types.cpp") -module_env.add_source_files(module_env.modules_sources, "src/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/editor/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/editor/project/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/editor/build/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/editor/dialog/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/editor/panel/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/jni/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/binding/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/resource_format/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/language/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/script/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/script/language/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/jvm_wrapper/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/jvm_wrapper/registration/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/jvm_wrapper/bridge/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/jvm_wrapper/memory/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/lifecycle/*.cpp") -module_env.add_source_files(module_env.modules_sources, "src/lifecycle/platforms/*.cpp") \ No newline at end of file diff --git a/generate_templates.py b/generate_templates.py index bc2b789cf2..8ea5bb6f87 100644 --- a/generate_templates.py +++ b/generate_templates.py @@ -23,7 +23,6 @@ def generate_header_from_files(directory, header_file): file_is_binary = [] with open(header_file, 'w') as header: - header.write(f'#ifdef TOOLS_ENABLED \n\n') header.write(f'// Auto-generated templates from {directory} directory \n\n') header.write("#ifndef FILE_CONTENTS_H\n") header.write("#define FILE_CONTENTS_H\n\n") @@ -79,8 +78,6 @@ def generate_header_from_files(directory, header_file): header.write("#endif // FILE_CONTENTS_H\n\n") - header.write("#endif// TOOLS_ENABLED\n") - print(f"{header_file} generated successfully.") if __name__ == "__main__": diff --git a/godot-cpp b/godot-cpp new file mode 160000 index 0000000000..e4b7c25e72 --- /dev/null +++ b/godot-cpp @@ -0,0 +1 @@ +Subproject commit e4b7c25e721ce3435a029087e3917a30aa73f06b diff --git a/register_types.h b/register_types.h deleted file mode 100644 index a76f4ebb74..0000000000 --- a/register_types.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GODOT_JVM_REGISTER_TYPES_H -#define GODOT_JVM_REGISTER_TYPES_H - -#include - -void initialize_kotlin_jvm_module(ModuleInitializationLevel p_level); -void uninitialize_kotlin_jvm_module(ModuleInitializationLevel p_level); - -#endif //GODOT_JVM_REGISTER_TYPES_H diff --git a/src/editor/dialog/about_dialog.cpp b/src/editor/dialog/about_dialog.cpp index 93ee28290d..af9354da93 100644 --- a/src/editor/dialog/about_dialog.cpp +++ b/src/editor/dialog/about_dialog.cpp @@ -1,6 +1,3 @@ - -#ifdef TOOLS_ENABLED - #include "about_dialog.h" #include "editor/godot_kotlin_jvm_editor.h" @@ -57,6 +54,4 @@ void AboutDialog::_notification(int notification) { popup_centered(); set_exclusive(false); } -} - -#endif // TOOLS_ENABLED \ No newline at end of file +} \ No newline at end of file diff --git a/src/editor/dialog/about_dialog.h b/src/editor/dialog/about_dialog.h index 854aa0540a..88ad4a6cfc 100644 --- a/src/editor/dialog/about_dialog.h +++ b/src/editor/dialog/about_dialog.h @@ -1,6 +1,3 @@ - -#ifdef TOOLS_ENABLED - #ifndef GODOT_JVM_ABOUT_DIALOG_H #define GODOT_JVM_ABOUT_DIALOG_H @@ -19,6 +16,4 @@ class AboutDialog : public AcceptDialog { void _notification(int notification); }; -#endif// GODOT_JVM_ABOUT_DIALOG_H - -#endif// TOOLS_ENABLED \ No newline at end of file +#endif// GODOT_JVM_ABOUT_DIALOG_H \ No newline at end of file diff --git a/src/editor/dialog/build_dialog.cpp b/src/editor/dialog/build_dialog.cpp index 9dccd50d57..ce766180d6 100644 --- a/src/editor/dialog/build_dialog.cpp +++ b/src/editor/dialog/build_dialog.cpp @@ -1,6 +1,3 @@ - -#ifdef TOOLS_ENABLED - #include "build_dialog.h" #include "editor/build/gradle_task_runner.h" @@ -58,6 +55,4 @@ void TaskDialog::_notification(int notification) { vertical_container->add_child(progress_bar); add_child(vertical_container); -} - -#endif // TOOLS_ENABLED \ No newline at end of file +} \ No newline at end of file diff --git a/src/editor/dialog/build_dialog.h b/src/editor/dialog/build_dialog.h index d9bc2aaaf2..1e0b8726c6 100644 --- a/src/editor/dialog/build_dialog.h +++ b/src/editor/dialog/build_dialog.h @@ -1,6 +1,3 @@ - -#ifdef TOOLS_ENABLED - #ifndef GODOT_JVM_BUILD_DIALOG_H #define GODOT_JVM_BUILD_DIALOG_H @@ -26,6 +23,4 @@ class TaskDialog : public AcceptDialog { void _notification(int notification); }; -#endif // GODOT_JVM_BUILD_DIALOG_H - -#endif // TOOLS_ENABLED \ No newline at end of file +#endif// GODOT_JVM_BUILD_DIALOG_H \ No newline at end of file diff --git a/src/editor/godot_kotlin_jvm_editor.cpp b/src/editor/godot_kotlin_jvm_editor.cpp index f057df25a7..bee50c69a1 100644 --- a/src/editor/godot_kotlin_jvm_editor.cpp +++ b/src/editor/godot_kotlin_jvm_editor.cpp @@ -1,5 +1,3 @@ -#ifdef TOOLS_ENABLED - #include "godot_kotlin_jvm_editor.h" #include "editor/build/gradle_task_runner.h" @@ -179,5 +177,3 @@ GodotKotlinJvmEditor::~GodotKotlinJvmEditor() { memdelete(tool_bar_gradle_task_choice); memdelete(separator); } - -#endif // TOOLS_ENABLED \ No newline at end of file diff --git a/src/editor/godot_kotlin_jvm_editor.h b/src/editor/godot_kotlin_jvm_editor.h index 226bbb2e0e..03f72ccb95 100644 --- a/src/editor/godot_kotlin_jvm_editor.h +++ b/src/editor/godot_kotlin_jvm_editor.h @@ -1,5 +1,3 @@ -#ifdef TOOLS_ENABLED - #ifndef GODOT_JVM_GODOT_KOTLIN_JVM_EDITOR_H #define GODOT_JVM_GODOT_KOTLIN_JVM_EDITOR_H @@ -48,5 +46,3 @@ class GodotKotlinJvmEditor : public EditorPlugin { }; #endif // GODOT_JVM_GODOT_KOTLIN_JVM_EDITOR_H - -#endif // TOOLS_ENABLED \ No newline at end of file diff --git a/src/editor/project/project_generator.cpp b/src/editor/project/project_generator.cpp index 7be79806c9..f995ae0f71 100644 --- a/src/editor/project/project_generator.cpp +++ b/src/editor/project/project_generator.cpp @@ -1,5 +1,3 @@ -#ifdef TOOLS_ENABLED - #include "project_generator.h" #include "editor/strings.h" @@ -51,6 +49,4 @@ void ProjectGenerator::generate_jvm_files(bool erase_existing) { } memdelete(marshall); JVM_LOG_INFO("JVM project files generated."); -} - -#endif// TOOLS_ENABLED \ No newline at end of file +} \ No newline at end of file diff --git a/src/editor/project/project_generator.h b/src/editor/project/project_generator.h index fff6c82469..07349f91b1 100644 --- a/src/editor/project/project_generator.h +++ b/src/editor/project/project_generator.h @@ -1,6 +1,3 @@ - -#ifdef TOOLS_ENABLED - #ifndef GODOT_JVM_PROJECTGENERATOR_H #define GODOT_JVM_PROJECTGENERATOR_H @@ -15,5 +12,3 @@ class ProjectGenerator { }; #endif// GODOT_JVM_PROJECTGENERATOR_H - -#endif// TOOLS_ENABLED diff --git a/src/editor/strings.h b/src/editor/strings.h index 377bf08581..d11d432825 100644 --- a/src/editor/strings.h +++ b/src/editor/strings.h @@ -1,5 +1,3 @@ -#ifdef TOOLS_ENABLED - #ifndef GODOT_JVM_STRINGS_H #define GODOT_JVM_STRINGS_H @@ -34,5 +32,3 @@ constexpr const char* about_text = #endif// GODOT_JVM_STRINGS_H -#endif// TOOLS_ENABLED - diff --git a/src/logging.h b/src/logging.h index f7fcd95449..8322fd797d 100644 --- a/src/logging.h +++ b/src/logging.h @@ -1,11 +1,11 @@ #ifndef GODOT_JVM_LOGGING_H #define GODOT_JVM_LOGGING_H -#include "core/os/os.h" +#include +#include +#include -#include - -inline String format_prefix{"Godot-JVM: "}; +inline godot::String format_prefix{"Godot-JVM: "}; #define JVM_STRING_FORMAT(message, ...) vformat(format_prefix + message, ##__VA_ARGS__) @@ -13,7 +13,7 @@ inline String format_prefix{"Godot-JVM: "}; #define JVM_LOG_VERBOSE(message, ...) print_verbose(JVM_STRING_FORMAT(message, ##__VA_ARGS__)) (void) 0 #define JVM_LOG_WARNING(message, ...) WARN_PRINT(JVM_STRING_FORMAT(message, ##__VA_ARGS__)) -#ifdef TOOLS_ENABLED + #define JVM_ERR_FAIL_MSG(message, ...) ERR_FAIL_EDMSG(JVM_STRING_FORMAT(message, ##__VA_ARGS__)) #define JVM_ERR_FAIL_V_MSG(ret_var, message, ...) \ ERR_FAIL_V_EDMSG(ret_var, JVM_STRING_FORMAT(message, ##__VA_ARGS__)) @@ -21,15 +21,6 @@ inline String format_prefix{"Godot-JVM: "}; ERR_FAIL_COND_EDMSG(condition, JVM_STRING_FORMAT(message, ##__VA_ARGS__)) #define JVM_ERR_FAIL_COND_V_MSG(condition, ret_var, message, ...) \ ERR_FAIL_COND_V_EDMSG(condition, ret_var, JVM_STRING_FORMAT(message, ##__VA_ARGS__)) -#else -#define JVM_ERR_FAIL_MSG(message, ...) ERR_FAIL_MSG(JVM_STRING_FORMAT(message, ##__VA_ARGS__)) -#define JVM_ERR_FAIL_V_MSG(ret_var, message, ...) \ - ERR_FAIL_V_MSG(ret_var, JVM_STRING_FORMAT(message, ##__VA_ARGS__)) -#define JVM_ERR_FAIL_COND_MSG(condition, message, ...) \ - ERR_FAIL_COND_MSG(condition, JVM_STRING_FORMAT(message, ##__VA_ARGS__)) -#define JVM_ERR_FAIL_COND_V_MSG(condition, ret_var, message, ...) \ - ERR_FAIL_COND_V_MSG(condition, ret_var, JVM_STRING_FORMAT(message, ##__VA_ARGS__)) -#endif #ifdef DEV_ENABLED #define JVM_DEV_LOG(message, ...) JVM_LOG_INFO(message, ##__VA_ARGS__) diff --git a/register_types.cpp b/src/register_types.cpp similarity index 93% rename from register_types.cpp rename to src/register_types.cpp index e52b6126d6..9fd0d7633c 100644 --- a/register_types.cpp +++ b/src/register_types.cpp @@ -1,9 +1,9 @@ #ifdef TOOLS_ENABLED #include "kotlin_editor_export_plugin.h" -#include "src/editor/godot_kotlin_jvm_editor.h" +#include "editor/godot_kotlin_jvm_editor.h" -#include -#include +#include "classes/editor_node.h" +#include "classes/export/editor_export.h" #endif #include "gd_kotlin.h" @@ -39,7 +39,7 @@ static EditorPlugin* godot_kotlin_jvm_editor_plugin_creator_func() { } #endif -void initialize_kotlin_jvm_module(ModuleInitializationLevel p_level) { +void initialize__godot_jvm_module(ModuleInitializationLevel p_level) { #ifdef TOOLS_ENABLED if (Engine::get_singleton()->is_project_manager_hint()) { return; } #endif @@ -73,7 +73,7 @@ void initialize_kotlin_jvm_module(ModuleInitializationLevel p_level) { #endif } -void uninitialize_kotlin_jvm_module(ModuleInitializationLevel p_level) { +void uninitialize_godot_jvm_module(ModuleInitializationLevel p_level) { #ifdef TOOLS_ENABLED if (Engine::get_singleton()->is_project_manager_hint()) { return; } #endif diff --git a/src/register_types.h b/src/register_types.h new file mode 100644 index 0000000000..634bce0b2e --- /dev/null +++ b/src/register_types.h @@ -0,0 +1,11 @@ +#ifndef GODOT_JVM_REGISTER_TYPES_H +#define GODOT_JVM_REGISTER_TYPES_H + +#include + +using namespace godot; + +void initialize_godot_jvm_module(ModuleInitializationLevel p_level); +void uninitialize_godot_jvm_module(ModuleInitializationLevel p_level); + +#endif //GODOT_JVM_REGISTER_TYPES_H diff --git a/src/shared_buffer.h b/src/shared_buffer.h index fe3187a283..92d7ca4f89 100644 --- a/src/shared_buffer.h +++ b/src/shared_buffer.h @@ -1,7 +1,9 @@ #ifndef GODOT_JVM_SHARED_BUFFER_H #define GODOT_JVM_SHARED_BUFFER_H -#include "core/variant/variant.h" +#include "core/defs.hpp" + +#include #ifdef DEBUG_ENABLED #include "logging.h" #endif @@ -47,4 +49,4 @@ class SharedBuffer { _FORCE_INLINE_ void rewind() { position = 0; } }; -#endif// GODOT_JVM_SHARED_BUFFER_H +#endif // GODOT_JVM_SHARED_BUFFER_H From 3f721d52650798005d5e71b0406038b5256dbf23 Mon Sep 17 00:00:00 2001 From: CedNaru Date: Thu, 24 Apr 2025 01:16:39 +0200 Subject: [PATCH 02/11] Modify cpp project layout --- CMakeLists.txt | 1 + godot-cpp | 2 +- src/{ => api}/language/gdj_language.cpp | 0 src/{ => api}/language/gdj_language.h | 0 src/{ => api}/language/java_language.cpp | 2 +- src/{ => api}/language/java_language.h | 0 src/{ => api}/language/jvm_language.cpp | 0 src/{ => api}/language/jvm_language.h | 0 src/{ => api}/language/kotlin_language.cpp | 2 +- src/{ => api}/language/kotlin_language.h | 0 src/{ => api}/language/names.h | 0 src/{ => api}/language/scala_language.cpp | 2 +- src/{ => api}/language/scala_language.h | 0 src/{ => api}/resource_format/hash.h | 0 src/{ => api}/resource_format/java_archive.h | 0 .../java_archive_resource_format_loader.cpp | 0 .../java_archive_resource_format_loader.h | 0 .../jvm_resource_format_loader.cpp | 0 .../jvm_resource_format_loader.h | 0 .../jvm_resource_format_saver.cpp | 0 .../jvm_resource_format_saver.h | 0 src/{ => api}/script/jvm_instance.cpp | 0 src/{ => api}/script/jvm_instance.h | 0 .../script/jvm_placeholder_instance.cpp | 0 .../script/jvm_placeholder_instance.h | 0 src/{ => api}/script/jvm_script.cpp | 9 +- src/api/script/jvm_script.h | 120 ++++++++++++++ src/{ => api}/script/jvm_script_manager.cpp | 2 +- src/{ => api}/script/jvm_script_manager.h | 0 src/{ => api}/script/language/gdj_script.cpp | 0 src/{ => api}/script/language/gdj_script.h | 0 src/{ => api}/script/language/java_script.cpp | 0 src/{ => api}/script/language/java_script.h | 0 .../script/language/kotlin_script.cpp | 0 src/{ => api}/script/language/kotlin_script.h | 0 .../script/language/scala_script.cpp | 0 src/{ => api}/script/language/scala_script.h | 0 src/{binding => core}/kotlin_binding.cpp | 0 src/{binding => core}/kotlin_binding.h | 0 .../kotlin_binding_manager.cpp | 16 +- .../kotlin_binding_manager.h | 10 +- src/{ => core}/kt_variant.h | 4 +- src/core/paged_allocator.h | 155 ++++++++++++++++++ src/{ => core}/shared_buffer.cpp | 0 src/{ => core}/shared_buffer.h | 0 src/{ => core}/variant_allocator.h | 38 ++--- src/editor/build/build_manager.cpp | 81 +++++++++ .../export}/kotlin_editor_export_plugin.cpp | 2 +- .../export}/kotlin_editor_export_plugin.h | 56 +++---- src/editor/godot_kotlin_jvm_editor.cpp | 10 +- src/editor/project/project_generator.cpp | 4 +- src/editor/{dialog => ui}/about_dialog.cpp | 3 +- src/editor/{dialog => ui}/about_dialog.h | 0 src/editor/{dialog => ui}/build_dialog.cpp | 2 +- src/editor/{dialog => ui}/build_dialog.h | 0 src/gd_kotlin.cpp | 11 +- src/gd_kotlin.h | 109 ++++++------ src/{ => jvm}/jni/env.cpp | 0 src/{ => jvm}/jni/env.h | 0 src/{ => jvm}/jni/jvm.cpp | 0 src/{ => jvm}/jni/jvm.h | 0 src/{ => jvm}/jni/local_frame.cpp | 0 src/{ => jvm}/jni/local_frame.h | 0 src/{ => jvm}/jni/methods.h | 0 src/{ => jvm}/jni/types.cpp | 0 src/{ => jvm}/jni/types.h | 0 src/{ => jvm}/jni/wrapper.h | 106 ++++++------ src/{ => jvm}/lifecycle/class_loader.cpp | 0 src/{ => jvm}/lifecycle/class_loader.h | 0 src/{ => jvm}/lifecycle/jvm_manager.cpp | 0 src/{ => jvm}/lifecycle/jvm_manager.h | 0 src/{ => jvm}/lifecycle/jvm_options.cpp | 0 src/{ => jvm}/lifecycle/jvm_options.h | 0 .../lifecycle/jvm_user_configuration.cpp | 0 .../lifecycle/jvm_user_configuration.h | 0 src/{ => jvm}/lifecycle/paths.h | 0 .../wrapper}/bootstrap.cpp | 2 +- src/{jvm_wrapper => jvm/wrapper}/bootstrap.h | 2 +- .../wrapper}/bridge/bridges_utils.h | 0 .../wrapper}/bridge/callable_bridge.cpp | 0 .../wrapper}/bridge/callable_bridge.h | 0 .../wrapper}/bridge/dictionary_bridge.cpp | 0 .../wrapper}/bridge/dictionary_bridge.h | 0 .../wrapper}/bridge/godot_print_bridge.cpp | 0 .../wrapper}/bridge/godot_print_bridge.h | 0 .../bridge/lambda_callable_bridge.cpp | 0 .../wrapper}/bridge/lambda_callable_bridge.h | 0 .../wrapper}/bridge/node_path_bridge.cpp | 0 .../wrapper}/bridge/node_path_bridge.h | 0 .../wrapper}/bridge/packed_array_bridge.h | 0 .../bridge/packed_byte_array_bridge.cpp | 0 .../bridge/packed_byte_array_bridge.h | 0 .../bridge/packed_color_array_bridge.cpp | 0 .../bridge/packed_color_array_bridge.h | 0 .../bridge/packed_float_32_array_bridge.cpp | 0 .../bridge/packed_float_32_array_bridge.h | 0 .../bridge/packed_float_64_array_bridge.cpp | 0 .../bridge/packed_float_64_array_bridge.h | 0 .../bridge/packed_int_32_array_bridge.cpp | 0 .../bridge/packed_int_32_array_bridge.h | 0 .../bridge/packed_int_64_array_bridge.cpp | 0 .../bridge/packed_int_64_array_bridge.h | 0 .../bridge/packed_string_array_bridge.cpp | 0 .../bridge/packed_string_array_bridge.h | 0 .../bridge/packed_vector2_array_bridge.cpp | 0 .../bridge/packed_vector2_array_bridge.h | 0 .../bridge/packed_vector3_array_bridge.cpp | 0 .../bridge/packed_vector3_array_bridge.h | 0 .../bridge/packed_vector4_array_bridge.cpp | 0 .../bridge/packed_vector4_array_bridge.h | 0 .../wrapper}/bridge/string_name_bridge.cpp | 0 .../wrapper}/bridge/string_name_bridge.h | 0 .../wrapper}/bridge/variant_array_bridge.cpp | 0 .../wrapper}/bridge/variant_array_bridge.h | 0 .../wrapper}/jvm_instance_wrapper.h | 2 +- .../wrapper}/jvm_singleton_wrapper.h | 0 .../wrapper}/kotlin_callable_custom.cpp | 0 .../wrapper}/kotlin_callable_custom.h | 0 .../wrapper}/memory/long_string_queue.cpp | 0 .../wrapper}/memory/long_string_queue.h | 0 .../wrapper}/memory/memory_manager.cpp | 0 .../wrapper}/memory/memory_manager.h | 0 .../wrapper}/memory/transfer_context.cpp | 0 .../wrapper}/memory/transfer_context.h | 0 .../wrapper}/memory/type_manager.cpp | 120 +++++++------- .../wrapper}/memory/type_manager.h | 72 ++++---- .../wrapper}/registration/kt_class.cpp | 0 .../wrapper}/registration/kt_class.h | 44 ++--- .../wrapper}/registration/kt_constructor.cpp | 0 .../wrapper}/registration/kt_constructor.h | 0 .../wrapper}/registration/kt_function.cpp | 0 .../wrapper}/registration/kt_function.h | 0 .../wrapper}/registration/kt_object.cpp | 0 .../wrapper}/registration/kt_object.h | 0 .../wrapper}/registration/kt_property.cpp | 0 .../wrapper}/registration/kt_property.h | 0 .../wrapper}/registration/kt_rpc_config.cpp | 0 .../wrapper}/registration/kt_rpc_config.h | 0 .../wrapper}/registration/kt_signal_info.cpp | 0 .../wrapper}/registration/kt_signal_info.h | 0 src/logging.h | 16 +- src/register_types.cpp | 17 +- src/script/jvm_script.h | 119 -------------- 143 files changed, 698 insertions(+), 443 deletions(-) rename src/{ => api}/language/gdj_language.cpp (100%) rename src/{ => api}/language/gdj_language.h (100%) rename src/{ => api}/language/java_language.cpp (99%) rename src/{ => api}/language/java_language.h (100%) rename src/{ => api}/language/jvm_language.cpp (100%) rename src/{ => api}/language/jvm_language.h (100%) rename src/{ => api}/language/kotlin_language.cpp (99%) rename src/{ => api}/language/kotlin_language.h (100%) rename src/{ => api}/language/names.h (100%) rename src/{ => api}/language/scala_language.cpp (99%) rename src/{ => api}/language/scala_language.h (100%) rename src/{ => api}/resource_format/hash.h (100%) rename src/{ => api}/resource_format/java_archive.h (100%) rename src/{ => api}/resource_format/java_archive_resource_format_loader.cpp (100%) rename src/{ => api}/resource_format/java_archive_resource_format_loader.h (100%) rename src/{ => api}/resource_format/jvm_resource_format_loader.cpp (100%) rename src/{ => api}/resource_format/jvm_resource_format_loader.h (100%) rename src/{ => api}/resource_format/jvm_resource_format_saver.cpp (100%) rename src/{ => api}/resource_format/jvm_resource_format_saver.h (100%) rename src/{ => api}/script/jvm_instance.cpp (100%) rename src/{ => api}/script/jvm_instance.h (100%) rename src/{ => api}/script/jvm_placeholder_instance.cpp (100%) rename src/{ => api}/script/jvm_placeholder_instance.h (100%) rename src/{ => api}/script/jvm_script.cpp (98%) create mode 100644 src/api/script/jvm_script.h rename src/{ => api}/script/jvm_script_manager.cpp (99%) rename src/{ => api}/script/jvm_script_manager.h (100%) rename src/{ => api}/script/language/gdj_script.cpp (100%) rename src/{ => api}/script/language/gdj_script.h (100%) rename src/{ => api}/script/language/java_script.cpp (100%) rename src/{ => api}/script/language/java_script.h (100%) rename src/{ => api}/script/language/kotlin_script.cpp (100%) rename src/{ => api}/script/language/kotlin_script.h (100%) rename src/{ => api}/script/language/scala_script.cpp (100%) rename src/{ => api}/script/language/scala_script.h (100%) rename src/{binding => core}/kotlin_binding.cpp (100%) rename src/{binding => core}/kotlin_binding.h (100%) rename src/{binding => core}/kotlin_binding_manager.cpp (78%) rename src/{binding => core}/kotlin_binding_manager.h (78%) rename src/{ => core}/kt_variant.h (99%) create mode 100644 src/core/paged_allocator.h rename src/{ => core}/shared_buffer.cpp (100%) rename src/{ => core}/shared_buffer.h (100%) rename src/{ => core}/variant_allocator.h (66%) create mode 100644 src/editor/build/build_manager.cpp rename src/{ => editor/export}/kotlin_editor_export_plugin.cpp (99%) rename src/{ => editor/export}/kotlin_editor_export_plugin.h (96%) rename src/editor/{dialog => ui}/about_dialog.cpp (96%) rename src/editor/{dialog => ui}/about_dialog.h (100%) rename src/editor/{dialog => ui}/build_dialog.cpp (97%) rename src/editor/{dialog => ui}/build_dialog.h (100%) rename src/{ => jvm}/jni/env.cpp (100%) rename src/{ => jvm}/jni/env.h (100%) rename src/{ => jvm}/jni/jvm.cpp (100%) rename src/{ => jvm}/jni/jvm.h (100%) rename src/{ => jvm}/jni/local_frame.cpp (100%) rename src/{ => jvm}/jni/local_frame.h (100%) rename src/{ => jvm}/jni/methods.h (100%) rename src/{ => jvm}/jni/types.cpp (100%) rename src/{ => jvm}/jni/types.h (100%) rename src/{ => jvm}/jni/wrapper.h (96%) rename src/{ => jvm}/lifecycle/class_loader.cpp (100%) rename src/{ => jvm}/lifecycle/class_loader.h (100%) rename src/{ => jvm}/lifecycle/jvm_manager.cpp (100%) rename src/{ => jvm}/lifecycle/jvm_manager.h (100%) rename src/{ => jvm}/lifecycle/jvm_options.cpp (100%) rename src/{ => jvm}/lifecycle/jvm_options.h (100%) rename src/{ => jvm}/lifecycle/jvm_user_configuration.cpp (100%) rename src/{ => jvm}/lifecycle/jvm_user_configuration.h (100%) rename src/{ => jvm}/lifecycle/paths.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bootstrap.cpp (98%) rename src/{jvm_wrapper => jvm/wrapper}/bootstrap.h (96%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/bridges_utils.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/callable_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/callable_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/dictionary_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/dictionary_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/godot_print_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/godot_print_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/lambda_callable_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/lambda_callable_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/node_path_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/node_path_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_byte_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_byte_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_color_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_color_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_float_32_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_float_32_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_float_64_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_float_64_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_int_32_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_int_32_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_int_64_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_int_64_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_string_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_string_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_vector2_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_vector2_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_vector3_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_vector3_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_vector4_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/packed_vector4_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/string_name_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/string_name_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/variant_array_bridge.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/bridge/variant_array_bridge.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/jvm_instance_wrapper.h (98%) rename src/{jvm_wrapper => jvm/wrapper}/jvm_singleton_wrapper.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/kotlin_callable_custom.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/kotlin_callable_custom.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/long_string_queue.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/long_string_queue.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/memory_manager.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/memory_manager.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/transfer_context.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/transfer_context.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/memory/type_manager.cpp (97%) rename src/{jvm_wrapper => jvm/wrapper}/memory/type_manager.h (97%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_class.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_class.h (74%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_constructor.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_constructor.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_function.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_function.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_object.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_object.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_property.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_property.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_rpc_config.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_rpc_config.h (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_signal_info.cpp (100%) rename src/{jvm_wrapper => jvm/wrapper}/registration/kt_signal_info.h (100%) delete mode 100644 src/script/jvm_script.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 514aaafd4b..a9dfa2d737 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) # Includes target_include_directories(godot PUBLIC + src godot-cpp/include godot-cpp/include/godot_cpp godot-cpp/gen/include diff --git a/godot-cpp b/godot-cpp index e4b7c25e72..c90812e8f8 160000 --- a/godot-cpp +++ b/godot-cpp @@ -1 +1 @@ -Subproject commit e4b7c25e721ce3435a029087e3917a30aa73f06b +Subproject commit c90812e8f8de539877f4a6a47a6f5df1aac05fcf diff --git a/src/language/gdj_language.cpp b/src/api/language/gdj_language.cpp similarity index 100% rename from src/language/gdj_language.cpp rename to src/api/language/gdj_language.cpp diff --git a/src/language/gdj_language.h b/src/api/language/gdj_language.h similarity index 100% rename from src/language/gdj_language.h rename to src/api/language/gdj_language.h diff --git a/src/language/java_language.cpp b/src/api/language/java_language.cpp similarity index 99% rename from src/language/java_language.cpp rename to src/api/language/java_language.cpp index 827970052d..caf693912c 100644 --- a/src/language/java_language.cpp +++ b/src/api/language/java_language.cpp @@ -3,7 +3,7 @@ #include "names.h" #include "script/language/java_script.h" -#include +#include constexpr const char* JAVA_TEMPLATE = PACKAGE_TEMPLATE "\n" diff --git a/src/language/java_language.h b/src/api/language/java_language.h similarity index 100% rename from src/language/java_language.h rename to src/api/language/java_language.h diff --git a/src/language/jvm_language.cpp b/src/api/language/jvm_language.cpp similarity index 100% rename from src/language/jvm_language.cpp rename to src/api/language/jvm_language.cpp diff --git a/src/language/jvm_language.h b/src/api/language/jvm_language.h similarity index 100% rename from src/language/jvm_language.h rename to src/api/language/jvm_language.h diff --git a/src/language/kotlin_language.cpp b/src/api/language/kotlin_language.cpp similarity index 99% rename from src/language/kotlin_language.cpp rename to src/api/language/kotlin_language.cpp index 1e884a03de..287062f9d6 100644 --- a/src/language/kotlin_language.cpp +++ b/src/api/language/kotlin_language.cpp @@ -3,7 +3,7 @@ #include "names.h" #include "script/language/kotlin_script.h" -#include +#include constexpr const char* KOTLIN_TEMPLATE = PACKAGE_TEMPLATE "\n" diff --git a/src/language/kotlin_language.h b/src/api/language/kotlin_language.h similarity index 100% rename from src/language/kotlin_language.h rename to src/api/language/kotlin_language.h diff --git a/src/language/names.h b/src/api/language/names.h similarity index 100% rename from src/language/names.h rename to src/api/language/names.h diff --git a/src/language/scala_language.cpp b/src/api/language/scala_language.cpp similarity index 99% rename from src/language/scala_language.cpp rename to src/api/language/scala_language.cpp index 2de89b7f07..0612e81cd9 100644 --- a/src/language/scala_language.cpp +++ b/src/api/language/scala_language.cpp @@ -3,7 +3,7 @@ #include "names.h" #include "script/language/scala_script.h" -#include +#include constexpr const char* SCALA_TEMPLATE = PACKAGE_TEMPLATE "\n" diff --git a/src/language/scala_language.h b/src/api/language/scala_language.h similarity index 100% rename from src/language/scala_language.h rename to src/api/language/scala_language.h diff --git a/src/resource_format/hash.h b/src/api/resource_format/hash.h similarity index 100% rename from src/resource_format/hash.h rename to src/api/resource_format/hash.h diff --git a/src/resource_format/java_archive.h b/src/api/resource_format/java_archive.h similarity index 100% rename from src/resource_format/java_archive.h rename to src/api/resource_format/java_archive.h diff --git a/src/resource_format/java_archive_resource_format_loader.cpp b/src/api/resource_format/java_archive_resource_format_loader.cpp similarity index 100% rename from src/resource_format/java_archive_resource_format_loader.cpp rename to src/api/resource_format/java_archive_resource_format_loader.cpp diff --git a/src/resource_format/java_archive_resource_format_loader.h b/src/api/resource_format/java_archive_resource_format_loader.h similarity index 100% rename from src/resource_format/java_archive_resource_format_loader.h rename to src/api/resource_format/java_archive_resource_format_loader.h diff --git a/src/resource_format/jvm_resource_format_loader.cpp b/src/api/resource_format/jvm_resource_format_loader.cpp similarity index 100% rename from src/resource_format/jvm_resource_format_loader.cpp rename to src/api/resource_format/jvm_resource_format_loader.cpp diff --git a/src/resource_format/jvm_resource_format_loader.h b/src/api/resource_format/jvm_resource_format_loader.h similarity index 100% rename from src/resource_format/jvm_resource_format_loader.h rename to src/api/resource_format/jvm_resource_format_loader.h diff --git a/src/resource_format/jvm_resource_format_saver.cpp b/src/api/resource_format/jvm_resource_format_saver.cpp similarity index 100% rename from src/resource_format/jvm_resource_format_saver.cpp rename to src/api/resource_format/jvm_resource_format_saver.cpp diff --git a/src/resource_format/jvm_resource_format_saver.h b/src/api/resource_format/jvm_resource_format_saver.h similarity index 100% rename from src/resource_format/jvm_resource_format_saver.h rename to src/api/resource_format/jvm_resource_format_saver.h diff --git a/src/script/jvm_instance.cpp b/src/api/script/jvm_instance.cpp similarity index 100% rename from src/script/jvm_instance.cpp rename to src/api/script/jvm_instance.cpp diff --git a/src/script/jvm_instance.h b/src/api/script/jvm_instance.h similarity index 100% rename from src/script/jvm_instance.h rename to src/api/script/jvm_instance.h diff --git a/src/script/jvm_placeholder_instance.cpp b/src/api/script/jvm_placeholder_instance.cpp similarity index 100% rename from src/script/jvm_placeholder_instance.cpp rename to src/api/script/jvm_placeholder_instance.cpp diff --git a/src/script/jvm_placeholder_instance.h b/src/api/script/jvm_placeholder_instance.h similarity index 100% rename from src/script/jvm_placeholder_instance.h rename to src/api/script/jvm_placeholder_instance.h diff --git a/src/script/jvm_script.cpp b/src/api/script/jvm_script.cpp similarity index 98% rename from src/script/jvm_script.cpp rename to src/api/script/jvm_script.cpp index 6a43e8c428..d321476355 100644 --- a/src/script/jvm_script.cpp +++ b/src/api/script/jvm_script.cpp @@ -1,15 +1,16 @@ #include "jvm_script.h" #include "binding/kotlin_binding_manager.h" -#include +#include #include "jvm_instance.h" #include "jvm_placeholder_instance.h" #include "language/gdj_language.h" #include "script/jvm_script_manager.h" -#include -#include -#include +#include +#include +#include +using namespace godot; Variant JvmScript::_new() { Object* obj = _object_create(); diff --git a/src/api/script/jvm_script.h b/src/api/script/jvm_script.h new file mode 100644 index 0000000000..cf4029de3c --- /dev/null +++ b/src/api/script/jvm_script.h @@ -0,0 +1,120 @@ +#ifndef GODOT_JVM_JVM_SCRIPT_H +#define GODOT_JVM_JVM_SCRIPT_H + +#include "jvm_wrapper/registration/kt_class.h" +#include "resource_format/hash.h" + +#include +#include + +namespace godot { + + class JvmInstance; + + class JvmScript : public ScriptExtension { + GDCLASS(JvmScript, ScriptExtension); + + friend class JvmInstance; + friend class JvmScriptManager; + + protected: + KtClass* kotlin_class; + String source; + + template + ScriptInstance* _instance_create(Object* p_this); + Object* _object_create(); + + public: + JvmScript(); + ~JvmScript() override; + + Variant _new(); + bool can_instantiate() const override; + bool inherits_script(const Ref