@Nullable private static PsiType getLeastUpperBoundByVar(final GrVariable resolved) { CachedValue<PsiType> data = resolved.getUserData(LEAST_UPPER_BOUND_TYPE); if (data == null) { data = CachedValuesManager.getManager(resolved.getProject()) .createCachedValue( new CachedValueProvider<PsiType>() { @Override public Result<PsiType> compute() { return Result.create( getLeastUpperBoundByVarImpl(resolved), PsiModificationTracker.MODIFICATION_COUNT, ProjectRootManager.getInstance(resolved.getProject())); } }, false); } return data.getValue(); }