Browse Source

Fix GDNative API generator after changes to MethodBind

Ruslan Mustakov 8 years ago
parent
commit
415f7da025
3 changed files with 25 additions and 20 deletions
  1. 1 1
      modules/gdnative/config.py
  2. 23 18
      modules/nativescript/api_generator.cpp
  3. 1 1
      modules/nativescript/config.py

+ 1 - 1
modules/gdnative/config.py

@@ -1,7 +1,7 @@
 
 
 def can_build(platform):
-    return False
+    return True
 
 
 def configure(env):

+ 23 - 18
modules/nativescript/api_generator.cpp

@@ -118,6 +118,25 @@ struct ClassAPI {
 	List<EnumAPI> enums;
 };
 
+static String get_type_name(const PropertyInfo &info) {
+	if (info.type == Variant::INT && (info.usage & PROPERTY_USAGE_CLASS_IS_ENUM)) {
+		return String("enum.") + String(info.class_name).replace(".", "::");
+	}
+	if (info.class_name != StringName()) {
+		return info.class_name;
+	}
+	if (info.hint == PROPERTY_HINT_RESOURCE_TYPE) {
+		return info.hint_string;
+	}
+	if (info.type == Variant::NIL && (info.usage & PROPERTY_USAGE_NIL_IS_VARIANT)) {
+		return "Variant";
+	}
+	if (info.type == Variant::NIL) {
+		return "void";
+	}
+	return Variant::get_type_name(info.type);
+}
+
 /*
  * Reads the entire Godot API to a list
  */
@@ -201,12 +220,8 @@ List<ClassAPI> generate_c_api_classes() {
 					if (argument.name.find(":") != -1) {
 						type = argument.name.get_slice(":", 1);
 						name = argument.name.get_slice(":", 0);
-					} else if (argument.hint == PROPERTY_HINT_RESOURCE_TYPE) {
-						type = argument.hint_string;
-					} else if (argument.type == Variant::NIL) {
-						type = "Variant";
 					} else {
-						type = Variant::get_type_name(argument.type);
+						type = get_type_name(argument);
 					}
 
 					signal.argument_names.push_back(name);
@@ -240,12 +255,8 @@ List<ClassAPI> generate_c_api_classes() {
 				if (p->get().name.find(":") != -1) {
 					property_api.type = p->get().name.get_slice(":", 1);
 					property_api.name = p->get().name.get_slice(":", 0);
-				} else if (p->get().hint == PROPERTY_HINT_RESOURCE_TYPE) {
-					property_api.type = p->get().hint_string;
-				} else if (p->get().type == Variant::NIL) {
-					property_api.type = "Variant";
 				} else {
-					property_api.type = Variant::get_type_name(p->get().type);
+					property_api.type = get_type_name(p->get());
 				}
 
 				if (!property_api.setter.empty() || !property_api.getter.empty()) {
@@ -267,17 +278,11 @@ List<ClassAPI> generate_c_api_classes() {
 				//method name
 				method_api.method_name = m->get().name;
 				//method return type
-				if (method_bind && method_bind->get_return_type() != StringName()) {
-					method_api.return_type = method_bind->get_return_type();
-				} else if (method_api.method_name.find(":") != -1) {
+				if (method_api.method_name.find(":") != -1) {
 					method_api.return_type = method_api.method_name.get_slice(":", 1);
 					method_api.method_name = method_api.method_name.get_slice(":", 0);
-				} else if (m->get().return_val.type != Variant::NIL) {
-					method_api.return_type = m->get().return_val.hint == PROPERTY_HINT_RESOURCE_TYPE ? m->get().return_val.hint_string : Variant::get_type_name(m->get().return_val.type);
-				} else if (m->get().return_val.name != "") {
-					method_api.return_type = m->get().return_val.name;
 				} else {
-					method_api.return_type = "void";
+					method_api.return_type = get_type_name(m->get().return_val);
 				}
 
 				method_api.argument_count = method_info.arguments.size();

+ 1 - 1
modules/nativescript/config.py

@@ -1,7 +1,7 @@
 
 
 def can_build(platform):
-    return False
+    return True
 
 
 def configure(env):