Browse Source

Update connection info on script validation rather then saved copy

Paulb23 5 years ago
parent
commit
362d38ea67

+ 16 - 5
editor/plugins/script_text_editor.cpp

@@ -571,6 +571,7 @@ void ScriptTextEditor::_validate_script() {
 		String error_text = "error(" + itos(line) + "," + itos(col) + "): " + errortxt;
 		String error_text = "error(" + itos(line) + "," + itos(col) + "): " + errortxt;
 		code_editor->set_error(error_text);
 		code_editor->set_error(error_text);
 		code_editor->set_error_pos(line - 1, col - 1);
 		code_editor->set_error_pos(line - 1, col - 1);
+		script_is_valid = false;
 	} else {
 	} else {
 		code_editor->set_error("");
 		code_editor->set_error("");
 		line = -1;
 		line = -1;
@@ -585,6 +586,7 @@ void ScriptTextEditor::_validate_script() {
 
 
 			functions.push_back(E->get());
 			functions.push_back(E->get());
 		}
 		}
+		script_is_valid = true;
 	}
 	}
 	_update_connected_methods();
 	_update_connected_methods();
 
 
@@ -967,7 +969,7 @@ void ScriptTextEditor::_update_connected_methods() {
 	text_edit->clear_info_icons();
 	text_edit->clear_info_icons();
 	missing_connections.clear();
 	missing_connections.clear();
 
 
-	if (!script->is_valid()) {
+	if (!script_is_valid) {
 		return;
 		return;
 	}
 	}
 
 
@@ -1000,10 +1002,18 @@ void ScriptTextEditor::_update_connected_methods() {
 
 
 			if (!ClassDB::has_method(script->get_instance_base_type(), connection.method)) {
 			if (!ClassDB::has_method(script->get_instance_base_type(), connection.method)) {
 				int line = -1;
 				int line = -1;
-				if (script->has_method(connection.method)) {
-					line = script->get_member_line(connection.method);
-					text_edit->set_line_info_icon(line - 1, get_parent_control()->get_icon("Slot", "EditorIcons"), connection.method);
-					methods_found.insert(connection.method);
+
+				for (int j = 0; j < functions.size(); j++) {
+					String name = functions[j].get_slice(":", 0);
+					if (name == connection.method) {
+						line = functions[j].get_slice(":", 1).to_int();
+						text_edit->set_line_info_icon(line - 1, get_parent_control()->get_icon("Slot", "EditorIcons"), connection.method);
+						methods_found.insert(connection.method);
+						break;
+					}
+				}
+
+				if (line >= 0) {
 					continue;
 					continue;
 				}
 				}
 
 
@@ -1728,6 +1738,7 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p
 ScriptTextEditor::ScriptTextEditor() {
 ScriptTextEditor::ScriptTextEditor() {
 
 
 	theme_loaded = false;
 	theme_loaded = false;
+	script_is_valid = false;
 
 
 	VSplitContainer *editor_box = memnew(VSplitContainer);
 	VSplitContainer *editor_box = memnew(VSplitContainer);
 	add_child(editor_box);
 	add_child(editor_box);

+ 1 - 0
editor/plugins/script_text_editor.h

@@ -59,6 +59,7 @@ class ScriptTextEditor : public ScriptEditorBase {
 	RichTextLabel *warnings_panel;
 	RichTextLabel *warnings_panel;
 
 
 	Ref<Script> script;
 	Ref<Script> script;
+	bool script_is_valid;
 
 
 	Vector<String> functions;
 	Vector<String> functions;
 
 

+ 3 - 1
scene/gui/text_edit.cpp

@@ -3928,7 +3928,9 @@ void TextEdit::_base_insert_text(int p_line, int p_char, const String &p_text, i
 	if (shift_first_line) {
 	if (shift_first_line) {
 		text.set_breakpoint(p_line + 1, text.is_breakpoint(p_line));
 		text.set_breakpoint(p_line + 1, text.is_breakpoint(p_line));
 		text.set_hidden(p_line + 1, text.is_hidden(p_line));
 		text.set_hidden(p_line + 1, text.is_hidden(p_line));
-		text.set_info_icon(p_line + 1, text.get_info_icon(p_line), text.get_info(p_line));
+		if (text.has_info_icon(p_line)) {
+			text.set_info_icon(p_line + 1, text.get_info_icon(p_line), text.get_info(p_line));
+		}
 
 
 		text.set_breakpoint(p_line, false);
 		text.set_breakpoint(p_line, false);
 		text.set_hidden(p_line, false);
 		text.set_hidden(p_line, false);