@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();
 }