CachedValue<List<PsiType>> () { synchronized (myTypesCacheLock) { if (myTypesCache == null) { final CachedValuesManager cacheManager = CachedValuesManager.getManager(getProject()); myTypesCache = cacheManager.createCachedValue(() -> { final List<PsiType> types = computePreciseCatchTypes(getParameter()); return CachedValueProvider.Result.create(types, PsiModificationTracker.MODIFICATION_COUNT); }, false); } return myTypesCache; } }