Browse Source

Merge pull request #90703 from ZerxZ/core/classdb_get_api_type

Expose `ClassDB.class_get_api_type()` method
Rémi Verschelde 11 months ago
parent
commit
57c868483a
3 changed files with 49 additions and 1 deletions
  1. 14 1
      core/core_bind.cpp
  2. 11 0
      core/core_bind.h
  3. 24 0
      doc/classes/ClassDB.xml

+ 14 - 1
core/core_bind.cpp

@@ -1419,6 +1419,11 @@ Variant ClassDB::instantiate(const StringName &p_class) const {
 	}
 	}
 }
 }
 
 
+ClassDB::APIType ClassDB::class_get_api_type(const StringName &p_class) const {
+	::ClassDB::APIType api_type = ::ClassDB::get_api_type(p_class);
+	return (APIType)api_type;
+}
+
 bool ClassDB::class_has_signal(const StringName &p_class, const StringName &p_signal) const {
 bool ClassDB::class_has_signal(const StringName &p_class, const StringName &p_signal) const {
 	return ::ClassDB::has_signal(p_class, p_signal);
 	return ::ClassDB::has_signal(p_class, p_signal);
 }
 }
@@ -1615,7 +1620,7 @@ void ClassDB::get_argument_options(const StringName &p_function, int p_idx, List
 				pf == "class_has_method" || pf == "class_get_method_list" ||
 				pf == "class_has_method" || pf == "class_get_method_list" ||
 				pf == "class_get_integer_constant_list" || pf == "class_has_integer_constant" || pf == "class_get_integer_constant" ||
 				pf == "class_get_integer_constant_list" || pf == "class_has_integer_constant" || pf == "class_get_integer_constant" ||
 				pf == "class_has_enum" || pf == "class_get_enum_list" || pf == "class_get_enum_constants" || pf == "class_get_integer_constant_enum" ||
 				pf == "class_has_enum" || pf == "class_get_enum_list" || pf == "class_get_enum_constants" || pf == "class_get_integer_constant_enum" ||
-				pf == "is_class_enabled" || pf == "is_class_enum_bitfield");
+				pf == "is_class_enabled" || pf == "is_class_enum_bitfield" || pf == "class_get_api_type");
 	}
 	}
 	if (first_argument_is_class || pf == "is_parent_class") {
 	if (first_argument_is_class || pf == "is_parent_class") {
 		for (const String &E : get_class_list()) {
 		for (const String &E : get_class_list()) {
@@ -1636,6 +1641,8 @@ void ClassDB::_bind_methods() {
 	::ClassDB::bind_method(D_METHOD("can_instantiate", "class"), &ClassDB::can_instantiate);
 	::ClassDB::bind_method(D_METHOD("can_instantiate", "class"), &ClassDB::can_instantiate);
 	::ClassDB::bind_method(D_METHOD("instantiate", "class"), &ClassDB::instantiate);
 	::ClassDB::bind_method(D_METHOD("instantiate", "class"), &ClassDB::instantiate);
 
 
+	::ClassDB::bind_method(D_METHOD("class_get_api_type", "class"), &ClassDB::class_get_api_type);
+
 	::ClassDB::bind_method(D_METHOD("class_has_signal", "class", "signal"), &ClassDB::class_has_signal);
 	::ClassDB::bind_method(D_METHOD("class_has_signal", "class", "signal"), &ClassDB::class_has_signal);
 	::ClassDB::bind_method(D_METHOD("class_get_signal", "class", "signal"), &ClassDB::class_get_signal);
 	::ClassDB::bind_method(D_METHOD("class_get_signal", "class", "signal"), &ClassDB::class_get_signal);
 	::ClassDB::bind_method(D_METHOD("class_get_signal_list", "class", "no_inheritance"), &ClassDB::class_get_signal_list, DEFVAL(false));
 	::ClassDB::bind_method(D_METHOD("class_get_signal_list", "class", "no_inheritance"), &ClassDB::class_get_signal_list, DEFVAL(false));
@@ -1669,6 +1676,12 @@ void ClassDB::_bind_methods() {
 	::ClassDB::bind_method(D_METHOD("is_class_enum_bitfield", "class", "enum", "no_inheritance"), &ClassDB::is_class_enum_bitfield, DEFVAL(false));
 	::ClassDB::bind_method(D_METHOD("is_class_enum_bitfield", "class", "enum", "no_inheritance"), &ClassDB::is_class_enum_bitfield, DEFVAL(false));
 
 
 	::ClassDB::bind_method(D_METHOD("is_class_enabled", "class"), &ClassDB::is_class_enabled);
 	::ClassDB::bind_method(D_METHOD("is_class_enabled", "class"), &ClassDB::is_class_enabled);
+
+	BIND_ENUM_CONSTANT(API_CORE);
+	BIND_ENUM_CONSTANT(API_EDITOR);
+	BIND_ENUM_CONSTANT(API_EXTENSION);
+	BIND_ENUM_CONSTANT(API_EDITOR_EXTENSION);
+	BIND_ENUM_CONSTANT(API_NONE);
 }
 }
 
 
 } // namespace special
 } // namespace special

+ 11 - 0
core/core_bind.h

@@ -447,6 +447,14 @@ protected:
 	static void _bind_methods();
 	static void _bind_methods();
 
 
 public:
 public:
+	enum APIType {
+		API_CORE,
+		API_EDITOR,
+		API_EXTENSION,
+		API_EDITOR_EXTENSION,
+		API_NONE,
+	};
+
 	PackedStringArray get_class_list() const;
 	PackedStringArray get_class_list() const;
 	PackedStringArray get_inheriters_from_class(const StringName &p_class) const;
 	PackedStringArray get_inheriters_from_class(const StringName &p_class) const;
 	StringName get_parent_class(const StringName &p_class) const;
 	StringName get_parent_class(const StringName &p_class) const;
@@ -455,6 +463,7 @@ public:
 	bool can_instantiate(const StringName &p_class) const;
 	bool can_instantiate(const StringName &p_class) const;
 	Variant instantiate(const StringName &p_class) const;
 	Variant instantiate(const StringName &p_class) const;
 
 
+	APIType class_get_api_type(const StringName &p_class) const;
 	bool class_has_signal(const StringName &p_class, const StringName &p_signal) const;
 	bool class_has_signal(const StringName &p_class, const StringName &p_signal) const;
 	Dictionary class_get_signal(const StringName &p_class, const StringName &p_signal) const;
 	Dictionary class_get_signal(const StringName &p_class, const StringName &p_signal) const;
 	TypedArray<Dictionary> class_get_signal_list(const StringName &p_class, bool p_no_inheritance = false) const;
 	TypedArray<Dictionary> class_get_signal_list(const StringName &p_class, bool p_no_inheritance = false) const;
@@ -634,4 +643,6 @@ VARIANT_ENUM_CAST(core_bind::Geometry2D::PolyEndType);
 
 
 VARIANT_ENUM_CAST(core_bind::Thread::Priority);
 VARIANT_ENUM_CAST(core_bind::Thread::Priority);
 
 
+VARIANT_ENUM_CAST(core_bind::special::ClassDB::APIType);
+
 #endif // CORE_BIND_H
 #endif // CORE_BIND_H

+ 24 - 0
doc/classes/ClassDB.xml

@@ -31,6 +31,13 @@
 				Returns whether the specified [param class] is available or not.
 				Returns whether the specified [param class] is available or not.
 			</description>
 			</description>
 		</method>
 		</method>
+		<method name="class_get_api_type" qualifiers="const">
+			<return type="int" enum="ClassDB.APIType" />
+			<param index="0" name="class" type="StringName" />
+			<description>
+				Returns the API type of [param class]. See [enum APIType].
+			</description>
+		</method>
 		<method name="class_get_enum_constants" qualifiers="const">
 		<method name="class_get_enum_constants" qualifiers="const">
 			<return type="PackedStringArray" />
 			<return type="PackedStringArray" />
 			<param index="0" name="class" type="StringName" />
 			<param index="0" name="class" type="StringName" />
@@ -242,4 +249,21 @@
 			</description>
 			</description>
 		</method>
 		</method>
 	</methods>
 	</methods>
+	<constants>
+		<constant name="API_CORE" value="0" enum="APIType">
+			Native Core class type.
+		</constant>
+		<constant name="API_EDITOR" value="1" enum="APIType">
+			Native Editor class type.
+		</constant>
+		<constant name="API_EXTENSION" value="2" enum="APIType">
+			GDExtension class type.
+		</constant>
+		<constant name="API_EDITOR_EXTENSION" value="3" enum="APIType">
+			GDExtension Editor class type.
+		</constant>
+		<constant name="API_NONE" value="4" enum="APIType">
+			Unknown class type.
+		</constant>
+	</constants>
 </class>
 </class>