boolean (@NotNull final PsiMethodCallExpression methodCallExpr, @NotNull final Processor<? super SliceUsage> processor, @NotNull final JavaSliceBuilder builder) { // if the call looks like 'otherClassObject.methodFromInterface()' // we can narrow down the overridden methods scan to inheritors of OtherClass only PsiClass qualifierClass = resolveQualifier(methodCallExpr); JavaResolveResult resolved = methodCallExpr.resolveMethodGenerics(); PsiElement r = resolved.getElement(); if (r instanceof PsiCompiledElement) { r = r.getNavigationElement(); } if (!(r instanceof PsiMethod methodCalled)) return true; PsiType returnType = methodCalled.getReturnType(); if (returnType == null) return true; final PsiType parentType = builder.substitute(methodCallExpr.getType()); final PsiSubstitutor substitutor = resolved.getSubstitutor().putAll(builder.getSubstitutor()); return processMethodReturnValue(processor, builder.getSubstitutor(), qualifierClass, methodCalled, parentType, builder.withSubstitutor(substitutor).dropSyntheticField().withFilter(JavaValueFilter::pushFrame)); }