Merge pull request #22705 from DualMatrix/debugging_the_debugger_grand_finale

Cleaned up/Fixed some bugs in the remote inspector code.
This commit is contained in:
Rémi Verschelde 2018-10-07 11:42:37 +02:00 committed by GitHub
commit d4108573bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 19 deletions

View File

@ -578,8 +578,14 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) {
for (ScriptConstantsMap::Element *sc = constants.front(); sc; sc = sc->next()) {
for (Map<StringName, Variant>::Element *E = sc->get().front(); E; E = E->next()) {
String script_path = sc->key() == si->get_script().ptr() ? "" : sc->key()->get_path().get_file() + "/";
PropertyInfo pi(E->value().get_type(), "Constants/" + script_path + E->key());
properties.push_back(PropertyDesc(pi, E->value()));
if (E->value().get_type() == Variant::OBJECT) {
Variant id = ((Object *)E->value())->get_instance_id();
PropertyInfo pi(id.get_type(), "Constants/" + E->key(), PROPERTY_HINT_OBJECT_ID, "Object");
properties.push_back(PropertyDesc(pi, id));
} else {
PropertyInfo pi(E->value().get_type(), "Constants/" + script_path + E->key());
properties.push_back(PropertyDesc(pi, E->value()));
}
}
}
}
@ -592,8 +598,14 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) {
Map<StringName, Variant> constants;
s->get_constants(&constants);
for (Map<StringName, Variant>::Element *E = constants.front(); E; E = E->next()) {
PropertyInfo pi(E->value().get_type(), String("Constants/") + E->key());
properties.push_front(PropertyDesc(pi, E->value()));
if (E->value().get_type() == Variant::OBJECT) {
Variant id = ((Object *)E->value())->get_instance_id();
PropertyInfo pi(id.get_type(), "Constants/" + E->key(), PROPERTY_HINT_OBJECT_ID, "Object");
properties.push_front(PropertyDesc(pi, E->value()));
} else {
PropertyInfo pi(E->value().get_type(), String("Constants/") + E->key());
properties.push_front(PropertyDesc(pi, E->value()));
}
}
}
}
@ -634,10 +646,9 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) {
prop.push_back(pi.hint);
prop.push_back(pi.hint_string);
prop.push_back(pi.usage);
if (!res.is_null()) {
var = String("PATH") + res->get_path();
} else if (var.get_type() == Variant::STRING) {
var = String("DATA") + var;
var = res->get_path();
}
prop.push_back(var);

View File

@ -493,23 +493,29 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
pinfo.usage = PropertyUsageFlags(int(prop[4]));
Variant var = prop[5];
if (pinfo.type == Variant::OBJECT) {
if (var.is_zero()) {
var = RES();
} else if (var.get_type() == Variant::STRING) {
var = ResourceLoader::load(var);
if (pinfo.hint_string == "Script")
debugObj->set_script(var);
} else if (var.get_type() == Variant::OBJECT) {
if (((Object *)var)->is_class("EncodedObjectAsID")) {
var = Object::cast_to<EncodedObjectAsID>(var)->get_object_id();
pinfo.type = var.get_type();
pinfo.hint = PROPERTY_HINT_OBJECT_ID;
pinfo.hint_string = "Object";
}
}
}
if (is_new_object) {
//don't update.. it's the same, instead refresh
debugObj->prop_list.push_back(pinfo);
}
if (var.get_type() == Variant::STRING) {
String str = var;
var = str.substr(4, str.length());
if (str.begins_with("PATH")) {
if (String(var).empty())
var = RES();
else
var = ResourceLoader::load(var);
}
}
debugObj->prop_values[pinfo.name] = var;
}