Simplify compositor.find

imgbot
Blaž Hrastnik 3 years ago
parent 90fd09f2cc
commit fa4c59df46

@ -270,12 +270,8 @@ impl Application {
} }
let editor_view = self let editor_view = self
.compositor .compositor
.find(std::any::type_name::<ui::EditorView>()) .find::<ui::EditorView>()
.expect("expected at least one EditorView"); .expect("expected at least one EditorView");
let editor_view = editor_view
.as_any_mut()
.downcast_mut::<ui::EditorView>()
.unwrap();
if editor_view.completion.is_some() { if editor_view.completion.is_some() {
return; return;
@ -440,12 +436,8 @@ impl Application {
{ {
let editor_view = self let editor_view = self
.compositor .compositor
.find(std::any::type_name::<ui::EditorView>()) .find::<ui::EditorView>()
.expect("expected at least one EditorView"); .expect("expected at least one EditorView");
let editor_view = editor_view
.as_any_mut()
.downcast_mut::<ui::EditorView>()
.unwrap();
let lsp::ProgressParams { token, value } = params; let lsp::ProgressParams { token, value } = params;
let lsp::ProgressParamsValue::WorkDone(work) = value; let lsp::ProgressParamsValue::WorkDone(work) = value;
@ -559,12 +551,8 @@ impl Application {
let editor_view = self let editor_view = self
.compositor .compositor
.find(std::any::type_name::<ui::EditorView>()) .find::<ui::EditorView>()
.expect("expected at least one EditorView"); .expect("expected at least one EditorView");
let editor_view = editor_view
.as_any_mut()
.downcast_mut::<ui::EditorView>()
.unwrap();
let spinner = editor_view.spinners_mut().get_or_create(server_id); let spinner = editor_view.spinners_mut().get_or_create(server_id);
if spinner.is_stopped() { if spinner.is_stopped() {
spinner.start(); spinner.start();

@ -4735,10 +4735,7 @@ pub fn completion(cx: &mut Context) {
return; return;
} }
let size = compositor.size(); let size = compositor.size();
let ui = compositor let ui = compositor.find::<ui::EditorView>().unwrap();
.find(std::any::type_name::<ui::EditorView>())
.unwrap();
if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
ui.set_completion( ui.set_completion(
editor, editor,
items, items,
@ -4747,7 +4744,6 @@ pub fn completion(cx: &mut Context) {
trigger_offset, trigger_offset,
size, size,
); );
};
}, },
); );
} }

@ -177,11 +177,12 @@ impl Compositor {
.any(|component| component.type_name() == type_name) .any(|component| component.type_name() == type_name)
} }
pub fn find(&mut self, type_name: &str) -> Option<&mut dyn Component> { pub fn find<T: 'static>(&mut self) -> Option<&mut T> {
let type_name = std::any::type_name::<T>();
self.layers self.layers
.iter_mut() .iter_mut()
.find(|component| component.type_name() == type_name) .find(|component| component.type_name() == type_name)
.map(|component| component.as_mut()) .and_then(|component| component.as_any_mut().downcast_mut())
} }
} }

Loading…
Cancel
Save