Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/item_tree.rs')
-rw-r--r--crates/hir-def/src/item_tree.rs33
1 files changed, 5 insertions, 28 deletions
diff --git a/crates/hir-def/src/item_tree.rs b/crates/hir-def/src/item_tree.rs
index 9825dbfe1c..e7ab2b390f 100644
--- a/crates/hir-def/src/item_tree.rs
+++ b/crates/hir-def/src/item_tree.rs
@@ -192,45 +192,22 @@ pub(crate) fn file_item_tree_query(
}
}
-#[salsa_macros::tracked(returns(deref))]
+#[salsa_macros::tracked(returns(ref))]
pub(crate) fn block_item_tree_query(
db: &dyn DefDatabase,
block: BlockId,
krate: Crate,
-) -> Arc<ItemTree> {
+) -> ItemTree {
let _p = tracing::info_span!("block_item_tree_query", ?block).entered();
- static EMPTY: OnceLock<Arc<ItemTree>> = OnceLock::new();
-
let loc = block.lookup(db);
let block = loc.ast_id.to_node(db);
let ctx = lower::Ctx::new(db, loc.ast_id.file_id, krate);
let mut item_tree = ctx.lower_block(&block);
- let ItemTree { top_level, top_attrs, attrs, vis, big_data, small_data } = &item_tree;
- if small_data.is_empty()
- && big_data.is_empty()
- && top_level.is_empty()
- && attrs.is_empty()
- && top_attrs.is_empty()
- && vis.arena.is_empty()
- {
- EMPTY
- .get_or_init(|| {
- Arc::new(ItemTree {
- top_level: Box::new([]),
- attrs: FxHashMap::default(),
- small_data: FxHashMap::default(),
- big_data: FxHashMap::default(),
- top_attrs: AttrsOrCfg::empty(),
- vis: ItemVisibilities { arena: ThinVec::new() },
- })
- })
- .clone()
- } else {
- item_tree.shrink_to_fit();
- Arc::new(item_tree)
- }
+ item_tree.shrink_to_fit();
+ item_tree
}
+
/// The item tree of a source file.
#[derive(Debug, Default, Eq, PartialEq)]
pub struct ItemTree {