### Godot version

4.0.1(flatpak)

### System information

Linux openSUSE

### Issue description

Cyclic Dependencies in shader result in infinite loop

### Steps to reproduce

Create 'main' shader that includes other shader, let's say `inc_me1` and `inc_me2` if 'inc_me1' that includes 'main' shader and 'inc_me2' includes 'inc_me1'. It results in a freeze.

### Minimal reproduction project

[Shader dependency.zip](https://github.com/godotengine/godot/files/11547654/Shader.dependency.zip)
uncomment include, and the editor will freeze and crash
} else {
		mode = MODE_SPATIAL;
	}
	code = p_code;
	String pp_code = p_code;
	HashSet<Ref<ShaderInclude>> new_include_dependencies;
	{
		String path = get_path();
		if (path.is_empty()) {
			path = include_path;
		}
		
		
		
		ShaderPreprocessor preprocessor;
		preprocessor.preprocess(p_code, path, pp_code, nullptr, nullptr, nullptr, &new_include_dependencies);
	}
	
	include_dependencies = new_include_dependencies;
	for (Ref<ShaderInclude> E : include_dependencies) {
		E->connect(SNAME("changed"), callable_mp(this, &Shader::_dependency_changed));
	}
	RenderingServer::get_singleton()->shader_set_code(shader, pp_code);
	emit_changed();
}
String Shader::get_code() const {
	_update_shader();
	return code;
}
void Shader::get_shader_uniform_list(List<PropertyInfo> *p_params, bool p_get_groups) const {