diff --git a/jedi/inference/compiled/value.py b/jedi/inference/compiled/value.py index f1b74e84..bc716922 100644 --- a/jedi/inference/compiled/value.py +++ b/jedi/inference/compiled/value.py @@ -452,21 +452,18 @@ class CompiledValueFilter(AbstractFilter): if (is_descriptor or not has_attribute) \ and not self._inference_state.allow_descriptor_getattr: - return [self._get_name(name, is_empty=True)] + return [self._get_cached_name(name, is_empty=True)] if self.is_instance and not in_dir_callback(name): return [] - return [self._get_name(name)] + return [self._get_cached_name(name)] - def _get_name(self, name, is_empty=False): + @memoize_method + def _get_cached_name(self, name, is_empty=False): if is_empty: return EmptyCompiledName(self._inference_state, name) else: - return CompiledName( - self._inference_state, - self.compiled_value, - name - ) + return self._create_name(name) def values(self): from jedi.inference.compiled import builtin_from_name @@ -490,6 +487,13 @@ class CompiledValueFilter(AbstractFilter): names += filter.values() return names + def _create_name(self, name): + return CompiledName( + self._inference_state, + self.compiled_value, + name + ) + def __repr__(self): return "<%s: %s>" % (self.__class__.__name__, self.compiled_value)