1 // Copyright (c) Facebook, Inc. and its affiliates.
3 // This source code is licensed under the MIT license found in the
4 // LICENSE file in the "hack" directory of this source tree.
6 use crate::cache::Cache;
7 use crate::folded_decl_provider::FoldedDeclProvider;
8 use crate::reason::Reason;
9 use crate::typing_decl_provider::Class;
14 pub struct TypingDeclProvider<R: Reason> {
15 cache: Arc<dyn Cache<TypeName, Arc<Class<R>>>>,
16 folded_decl_provider: Arc<FoldedDeclProvider<R>>,
19 impl<R: Reason> TypingDeclProvider<R> {
21 cache: Arc<dyn Cache<TypeName, Arc<Class<R>>>>,
22 folded_decl_provider: Arc<FoldedDeclProvider<R>>,
30 pub fn get_folded_decl_provider(&self) -> &Arc<FoldedDeclProvider<R>> {
31 &self.folded_decl_provider
34 pub fn get_class(&self, name: TypeName) -> Option<Arc<Class<R>>> {
35 match self.cache.get(name) {
38 let folded_decl = self.folded_decl_provider.get_folded_class(name)?;
39 let cls = Arc::new(Class::new(
40 Arc::clone(&self.folded_decl_provider),
43 self.cache.insert(name, Arc::clone(&cls));
49 pub fn get_class_or_typedef(&self, name: TypeName) -> Option<Arc<Class<R>>> {