Skip to content

Commit 555e7ad

Browse files
committed
Core: Handle disabled class detection in ClassDB
1 parent 21fbf03 commit 555e7ad

File tree

13 files changed

+62
-52
lines changed

13 files changed

+62
-52
lines changed

core/core_builders.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def disabled_class_builder(target, source, env):
1111
with methods.generated_wrapper(str(target[0])) as file:
1212
for c in source[0].read():
1313
if cs := c.strip():
14-
file.write(f"#define ClassDB_Disable_{cs} 1\n")
14+
file.write(f"class {cs}; template <> struct is_class_enabled<{cs}> : std::false_type {{}};\n")
1515

1616

1717
# Generate version info

core/object/class_db.h

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,24 @@
4141

4242
#include <type_traits>
4343

44+
template <typename T, typename = void>
45+
struct is_class_enabled;
46+
47+
template <>
48+
struct is_class_enabled<Object> : std::true_type {};
49+
50+
template <typename T>
51+
struct is_class_enabled<T, std::enable_if_t<std::is_base_of_v<Object, T>>> {
52+
static constexpr bool value = is_class_enabled<typename T::super_type>::value;
53+
};
54+
55+
template <typename T>
56+
inline constexpr bool is_class_enabled_v = is_class_enabled<T>::value;
57+
58+
#define GD_IS_CLASS_ENABLED(m_class) is_class_enabled_v<m_class>
59+
60+
#include "core/disabled_classes.gen.h"
61+
4462
#define DEFVAL(m_defval) (m_defval)
4563
#define DEFVAL_ARRAY DEFVAL(ClassDB::default_array_arg)
4664

@@ -551,25 +569,24 @@ class ClassDB {
551569

552570
#endif // DEBUG_ENABLED
553571

554-
#define GDREGISTER_CLASS(m_class) \
555-
if (m_class::_class_is_enabled) { \
556-
::ClassDB::register_class<m_class>(); \
572+
#define GDREGISTER_CLASS(m_class) \
573+
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
574+
::ClassDB::register_class<m_class>(); \
557575
}
558576
#define GDREGISTER_VIRTUAL_CLASS(m_class) \
559-
if (m_class::_class_is_enabled) { \
577+
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
560578
::ClassDB::register_class<m_class>(true); \
561579
}
562580
#define GDREGISTER_ABSTRACT_CLASS(m_class) \
563-
if (m_class::_class_is_enabled) { \
581+
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
564582
::ClassDB::register_abstract_class<m_class>(); \
565583
}
566584
#define GDREGISTER_INTERNAL_CLASS(m_class) \
567-
if (m_class::_class_is_enabled) { \
585+
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
568586
::ClassDB::register_internal_class<m_class>(); \
569587
}
570-
571588
#define GDREGISTER_RUNTIME_CLASS(m_class) \
572-
if (m_class::_class_is_enabled) { \
589+
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
573590
::ClassDB::register_runtime_class<m_class>(); \
574591
}
575592

core/object/object.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
#pragma once
3232

33-
#include "core/disabled_classes.gen.h"
3433
#include "core/extension/gdextension_interface.h"
3534
#include "core/object/message_queue.h"
3635
#include "core/object/object_id.h"
@@ -135,9 +134,6 @@ enum PropertyUsageFlags {
135134
PROPERTY_USAGE_NO_EDITOR = PROPERTY_USAGE_STORAGE,
136135
};
137136

138-
// Respective values are defined by disabled_classes.gen.h
139-
#define GD_IS_CLASS_ENABLED(m_class) m_class::_class_is_enabled
140-
141137
#define ADD_SIGNAL(m_signal) ::ClassDB::add_signal(get_class_static(), m_signal)
142138
#define ADD_PROPERTY(m_property, m_setter, m_getter) ::ClassDB::add_property(get_class_static(), m_property, StringName(m_setter), StringName(m_getter))
143139
#define ADD_PROPERTYI(m_property, m_setter, m_getter, m_index) ::ClassDB::add_property(get_class_static(), m_property, StringName(m_setter), StringName(m_getter), m_index)
@@ -498,7 +494,6 @@ private:
498494
friend class ::ClassDB; \
499495
\
500496
public: \
501-
static constexpr bool _class_is_enabled = !bool(GD_IS_DEFINED(ClassDB_Disable_##m_class)) && m_inherits::_class_is_enabled; \
502497
virtual const StringName *_get_class_namev() const override { \
503498
return &get_class_static(); \
504499
} \
@@ -786,8 +781,6 @@ class Object {
786781
_FORCE_INLINE_ static void register_custom_data_to_otdb() {}
787782

788783
public:
789-
static constexpr bool _class_is_enabled = true;
790-
791784
void notify_property_list_changed();
792785

793786
static void *get_class_ptr_static() {

core/register_core_types.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ void register_core_types() {
140140

141141
CoreStringNames::create();
142142

143-
if (GD_IS_CLASS_ENABLED(Translation)) {
143+
if constexpr (GD_IS_CLASS_ENABLED(Translation)) {
144144
resource_format_po.instantiate();
145145
ResourceLoader::add_resource_format_loader(resource_format_po);
146146
}
@@ -156,7 +156,7 @@ void register_core_types() {
156156
resource_format_importer_saver.instantiate();
157157
ResourceSaver::add_resource_format_saver(resource_format_importer_saver);
158158

159-
if (GD_IS_CLASS_ENABLED(Image)) {
159+
if constexpr (GD_IS_CLASS_ENABLED(Image)) {
160160
resource_format_image.instantiate();
161161
ResourceLoader::add_resource_format_loader(resource_format_image);
162162
}
@@ -226,15 +226,15 @@ void register_core_types() {
226226
ClassDB::register_custom_instance_class<PacketPeerDTLS>();
227227
ClassDB::register_custom_instance_class<DTLSServer>();
228228

229-
if (GD_IS_CLASS_ENABLED(Crypto)) {
229+
if constexpr (GD_IS_CLASS_ENABLED(Crypto)) {
230230
resource_format_saver_crypto.instantiate();
231231
ResourceSaver::add_resource_format_saver(resource_format_saver_crypto);
232232

233233
resource_format_loader_crypto.instantiate();
234234
ResourceLoader::add_resource_format_loader(resource_format_loader_crypto);
235235
}
236236

237-
if (GD_IS_CLASS_ENABLED(JSON)) {
237+
if constexpr (GD_IS_CLASS_ENABLED(JSON)) {
238238
resource_saver_json.instantiate();
239239
ResourceSaver::add_resource_format_saver(resource_saver_json);
240240

@@ -292,7 +292,7 @@ void register_core_types() {
292292

293293
gdextension_manager = memnew(GDExtensionManager);
294294

295-
if (GD_IS_CLASS_ENABLED(GDExtension)) {
295+
if constexpr (GD_IS_CLASS_ENABLED(GDExtension)) {
296296
resource_loader_gdextension.instantiate();
297297
ResourceLoader::add_resource_format_loader(resource_loader_gdextension);
298298
}
@@ -426,7 +426,7 @@ void unregister_core_types() {
426426
memdelete(ip);
427427
}
428428

429-
if (GD_IS_CLASS_ENABLED(Image)) {
429+
if constexpr (GD_IS_CLASS_ENABLED(Image)) {
430430
ResourceLoader::remove_resource_format_loader(resource_format_image);
431431
resource_format_image.unref();
432432
}
@@ -443,28 +443,28 @@ void unregister_core_types() {
443443
ResourceSaver::remove_resource_format_saver(resource_format_importer_saver);
444444
resource_format_importer_saver.unref();
445445

446-
if (GD_IS_CLASS_ENABLED(Translation)) {
446+
if constexpr (GD_IS_CLASS_ENABLED(Translation)) {
447447
ResourceLoader::remove_resource_format_loader(resource_format_po);
448448
resource_format_po.unref();
449449
}
450450

451-
if (GD_IS_CLASS_ENABLED(Crypto)) {
451+
if constexpr (GD_IS_CLASS_ENABLED(Crypto)) {
452452
ResourceSaver::remove_resource_format_saver(resource_format_saver_crypto);
453453
resource_format_saver_crypto.unref();
454454

455455
ResourceLoader::remove_resource_format_loader(resource_format_loader_crypto);
456456
resource_format_loader_crypto.unref();
457457
}
458458

459-
if (GD_IS_CLASS_ENABLED(JSON)) {
459+
if constexpr (GD_IS_CLASS_ENABLED(JSON)) {
460460
ResourceSaver::remove_resource_format_saver(resource_saver_json);
461461
resource_saver_json.unref();
462462

463463
ResourceLoader::remove_resource_format_loader(resource_loader_json);
464464
resource_loader_json.unref();
465465
}
466466

467-
if (GD_IS_CLASS_ENABLED(GDExtension)) {
467+
if constexpr (GD_IS_CLASS_ENABLED(GDExtension)) {
468468
ResourceLoader::remove_resource_format_loader(resource_loader_gdextension);
469469
resource_loader_gdextension.unref();
470470
}

modules/dds/register_types.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void initialize_dds_module(ModuleInitializationLevel p_level) {
4545
Image::save_dds_func = save_dds;
4646
Image::save_dds_buffer_func = save_dds_buffer;
4747

48-
if (GD_IS_CLASS_ENABLED(Texture)) {
48+
if constexpr (GD_IS_CLASS_ENABLED(Texture)) {
4949
resource_loader_dds.instantiate();
5050
ResourceLoader::add_resource_format_loader(resource_loader_dds);
5151
}
@@ -56,7 +56,7 @@ void uninitialize_dds_module(ModuleInitializationLevel p_level) {
5656
return;
5757
}
5858

59-
if (GD_IS_CLASS_ENABLED(Texture)) {
59+
if constexpr (GD_IS_CLASS_ENABLED(Texture)) {
6060
ResourceLoader::remove_resource_format_loader(resource_loader_dds);
6161
resource_loader_dds.unref();
6262
}

modules/gltf/tests/test_gltf.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static Node *gltf_import(const String &p_file) {
7070

7171
// Once editor import convert pngs to ctex, we will need to load it as ctex resource.
7272
Ref<ResourceFormatLoaderCompressedTexture2D> resource_loader_stream_texture;
73-
if (GD_IS_CLASS_ENABLED(CompressedTexture2D)) {
73+
if constexpr (GD_IS_CLASS_ENABLED(CompressedTexture2D)) {
7474
resource_loader_stream_texture.instantiate();
7575
ResourceLoader::add_resource_format_loader(resource_loader_stream_texture);
7676
}
@@ -108,7 +108,7 @@ static Node *gltf_import(const String &p_file) {
108108

109109
ResourceImporterScene::remove_scene_importer(import_gltf);
110110
ResourceFormatImporter::get_singleton()->remove_importer(import_texture);
111-
if (GD_IS_CLASS_ENABLED(CompressedTexture2D)) {
111+
if constexpr (GD_IS_CLASS_ENABLED(CompressedTexture2D)) {
112112
ResourceLoader::remove_resource_format_loader(resource_loader_stream_texture);
113113
resource_loader_stream_texture.unref();
114114
}

modules/jpg/register_types.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static MovieWriterMJPEG *writer_mjpeg = nullptr;
3939
void initialize_jpg_module(ModuleInitializationLevel p_level) {
4040
switch (p_level) {
4141
case MODULE_INITIALIZATION_LEVEL_SERVERS: {
42-
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
42+
if constexpr (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
4343
writer_mjpeg = memnew(MovieWriterMJPEG);
4444
MovieWriter::add_writer(writer_mjpeg);
4545
}
@@ -63,7 +63,7 @@ void uninitialize_jpg_module(ModuleInitializationLevel p_level) {
6363
} break;
6464

6565
case MODULE_INITIALIZATION_LEVEL_SERVERS: {
66-
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
66+
if constexpr (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
6767
memdelete(writer_mjpeg);
6868
}
6969
} break;

modules/ktx/register_types.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void initialize_ktx_module(ModuleInitializationLevel p_level) {
4141
return;
4242
}
4343

44-
if (GD_IS_CLASS_ENABLED(ImageTexture)) {
44+
if constexpr (GD_IS_CLASS_ENABLED(ImageTexture)) {
4545
resource_loader_ktx.instantiate();
4646
ResourceLoader::add_resource_format_loader(resource_loader_ktx);
4747
}
@@ -52,7 +52,7 @@ void uninitialize_ktx_module(ModuleInitializationLevel p_level) {
5252
return;
5353
}
5454

55-
if (GD_IS_CLASS_ENABLED(ImageTexture)) {
55+
if constexpr (GD_IS_CLASS_ENABLED(ImageTexture)) {
5656
ResourceLoader::remove_resource_format_loader(resource_loader_ktx);
5757
resource_loader_ktx.unref();
5858
}

modules/mono/register_types.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ void initialize_mono_module(ModuleInitializationLevel p_level) {
5353
script_language_cs->set_language_index(ScriptServer::get_language_count());
5454
ScriptServer::register_language(script_language_cs);
5555

56-
if (GD_IS_CLASS_ENABLED(CSharpScript)) {
56+
if constexpr (GD_IS_CLASS_ENABLED(CSharpScript)) {
5757
resource_loader_cs.instantiate();
5858
ResourceLoader::add_resource_format_loader(resource_loader_cs);
5959
resource_saver_cs.instantiate();
@@ -72,7 +72,7 @@ void uninitialize_mono_module(ModuleInitializationLevel p_level) {
7272
memdelete(script_language_cs);
7373
}
7474

75-
if (GD_IS_CLASS_ENABLED(CSharpScript)) {
75+
if constexpr (GD_IS_CLASS_ENABLED(CSharpScript)) {
7676
ResourceLoader::remove_resource_format_loader(resource_loader_cs);
7777
resource_loader_cs.unref();
7878
ResourceSaver::remove_resource_format_saver(resource_saver_cs);

modules/multiplayer/register_types.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void initialize_multiplayer_module(ModuleInitializationLevel p_level) {
4848
GDREGISTER_CLASS(MultiplayerSynchronizer);
4949
GDREGISTER_CLASS(OfflineMultiplayerPeer);
5050
GDREGISTER_CLASS(SceneMultiplayer);
51-
if (GD_IS_CLASS_ENABLED(MultiplayerAPI)) {
51+
if constexpr (GD_IS_CLASS_ENABLED(MultiplayerAPI)) {
5252
MultiplayerAPI::set_default_interface("SceneMultiplayer");
5353
MultiplayerDebugger::initialize();
5454
}
@@ -61,7 +61,7 @@ void initialize_multiplayer_module(ModuleInitializationLevel p_level) {
6161
}
6262

6363
void uninitialize_multiplayer_module(ModuleInitializationLevel p_level) {
64-
if (GD_IS_CLASS_ENABLED(MultiplayerAPI)) {
64+
if constexpr (GD_IS_CLASS_ENABLED(MultiplayerAPI)) {
6565
MultiplayerDebugger::deinitialize();
6666
}
6767
}

0 commit comments

Comments
 (0)