Skip to content

Commit 45d83a4

Browse files
committed
perf(codex): remove potential_declaring_method_ids
Signed-off-by: azjezz <[email protected]>
1 parent 0d00675 commit 45d83a4

File tree

2 files changed

+20
-58
lines changed

2 files changed

+20
-58
lines changed

crates/codex/src/metadata/class_like.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ pub struct ClassLikeMetadata {
6464
pub appearing_method_ids: AtomMap<MethodIdentifier>,
6565
pub inheritable_method_ids: AtomMap<MethodIdentifier>,
6666
pub overridden_method_ids: AtomMap<HashMap<Atom, MethodIdentifier>>,
67-
pub potential_declaring_method_ids: AtomMap<HashMap<String, bool>>,
6867
pub properties: AtomMap<PropertyMetadata>,
6968
pub appearing_property_ids: AtomMap<Atom>,
7069
pub declaring_property_ids: AtomMap<Atom>,
@@ -125,7 +124,6 @@ impl ClassLikeMetadata {
125124
static_pseudo_methods: AtomSet::default(),
126125
overridden_method_ids: AtomMap::default(),
127126
overridden_property_ids: AtomMap::default(),
128-
potential_declaring_method_ids: AtomMap::default(),
129127
properties: AtomMap::default(),
130128
template_variance: HashMap::default(),
131129
template_type_extends_count: AtomMap::default(),
@@ -209,12 +207,6 @@ impl ClassLikeMetadata {
209207
self.appearing_method_ids.contains_key(method)
210208
}
211209

212-
/// Returns a reference to a specific method's potential declaring method id strings.
213-
#[inline]
214-
pub fn get_potential_declaring_method_id(&self, method: &Atom) -> Option<&HashMap<String, bool>> {
215-
self.potential_declaring_method_ids.get(method)
216-
}
217-
218210
/// Returns a vector of property names.
219211
#[inline]
220212
pub fn get_property_names(&self) -> AtomSet {
@@ -360,12 +352,6 @@ impl ClassLikeMetadata {
360352
.insert(*parent_method_id.get_class_name(), parent_method_id)
361353
}
362354

363-
/// Adds a potential declaring method id string to the map for a method. Initializes map if needed.
364-
#[inline]
365-
pub fn add_potential_declaring_method(&mut self, method: Atom, potential_method_id_str: String) {
366-
self.potential_declaring_method_ids.entry(method).or_default().insert(potential_method_id_str, true);
367-
}
368-
369355
/// Adds or updates a property's metadata. Returns the previous metadata if the property existed.
370356
#[inline]
371357
pub fn add_property(&mut self, name: Atom, property_metadata: PropertyMetadata) -> Option<PropertyMetadata> {
@@ -472,7 +458,6 @@ impl ClassLikeMetadata {
472458
self.declaring_method_ids.shrink_to_fit();
473459
self.inheritable_method_ids.shrink_to_fit();
474460
self.overridden_method_ids.shrink_to_fit();
475-
self.potential_declaring_method_ids.shrink_to_fit();
476461
self.attributes.shrink_to_fit();
477462
self.constants.shrink_to_fit();
478463
self.enum_cases.shrink_to_fit();

crates/codex/src/populator/methods.rs

Lines changed: 20 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use ahash::HashMap;
2+
use mago_atom::Atom;
23
use mago_atom::atom;
34

45
use crate::identifier::method::MethodIdentifier;
@@ -15,21 +16,24 @@ pub fn inherit_methods_from_parent(
1516
let class_like_name = metadata.name;
1617
let parent_is_trait = parent_metadata.kind.is_trait();
1718

18-
// Register where methods appear (can never be in a trait in the final appearing_method_ids)
19+
let reverse_alias_map: Option<HashMap<Atom, Vec<Atom>>> = if parent_is_trait && !metadata.trait_alias_map.is_empty()
20+
{
21+
let mut map: HashMap<Atom, Vec<Atom>> = HashMap::default();
22+
for (original, alias) in metadata.get_trait_alias_map().iter() {
23+
map.entry(*original).or_default().push(*alias);
24+
}
25+
Some(map)
26+
} else {
27+
None
28+
};
29+
1930
for (method_name_lc, appearing_method_id) in &parent_metadata.appearing_method_ids {
20-
// Build a list of aliased method names
2131
let mut aliased_method_names = vec![*method_name_lc];
2232

23-
if parent_is_trait && !metadata.trait_alias_map.is_empty() {
24-
// Find all aliases for this method
25-
// trait_alias_map is: original_method_name -> alias_name
26-
aliased_method_names.extend(
27-
metadata
28-
.get_trait_alias_map()
29-
.iter()
30-
.filter(|(original, _)| *original == method_name_lc)
31-
.map(|(_, alias)| *alias),
32-
);
33+
if let Some(ref reverse_map) = reverse_alias_map
34+
&& let Some(aliases) = reverse_map.get(method_name_lc)
35+
{
36+
aliased_method_names.extend(aliases.iter().copied());
3337
}
3438

3539
for aliased_method_name in aliased_method_names {
@@ -42,31 +46,9 @@ pub fn inherit_methods_from_parent(
4246
let final_appearing_id = if parent_is_trait { implemented_method_id } else { *appearing_method_id };
4347

4448
metadata.appearing_method_ids.insert(aliased_method_name, final_appearing_id);
45-
46-
let this_method_id_str = format!("{}::{}", class_like_name, method_name_lc);
47-
48-
if codebase.function_likes.contains_key(&(class_like_name, aliased_method_name)) {
49-
let mut potential_ids = HashMap::default();
50-
potential_ids.insert(this_method_id_str, true);
51-
metadata.potential_declaring_method_ids.insert(aliased_method_name, potential_ids);
52-
} else {
53-
if let Some(parent_potential_method_ids) =
54-
parent_metadata.get_potential_declaring_method_id(&aliased_method_name)
55-
{
56-
metadata
57-
.potential_declaring_method_ids
58-
.insert(aliased_method_name, parent_potential_method_ids.clone());
59-
}
60-
61-
metadata.add_potential_declaring_method(aliased_method_name, this_method_id_str);
62-
63-
let parent_method_id_str = format!("{}::{}", parent_metadata.name, method_name_lc);
64-
metadata.add_potential_declaring_method(aliased_method_name, parent_method_id_str);
65-
}
6649
}
6750
}
6851

69-
// Register where methods are declared
7052
for (method_name_lc, declaring_method_id) in &parent_metadata.inheritable_method_ids {
7153
if !method_name_lc.eq(&atom("__construct")) || parent_metadata.flags.has_consistent_constructor() {
7254
if parent_is_trait {
@@ -93,15 +75,10 @@ pub fn inherit_methods_from_parent(
9375

9476
let mut aliased_method_names = vec![*method_name_lc];
9577

96-
if parent_is_trait && !metadata.trait_alias_map.is_empty() {
97-
// trait_alias_map is: original_method_name -> alias_name
98-
aliased_method_names.extend(
99-
metadata
100-
.get_trait_alias_map()
101-
.iter()
102-
.filter(|(original, _)| *original == method_name_lc)
103-
.map(|(_, alias)| *alias),
104-
);
78+
if let Some(ref reverse_map) = reverse_alias_map
79+
&& let Some(aliases) = reverse_map.get(method_name_lc)
80+
{
81+
aliased_method_names.extend(aliases.iter().copied());
10582
}
10683

10784
for aliased_method_name in aliased_method_names {

0 commit comments

Comments
 (0)