JavaResolveResult () { final PsiExpression processor = getProcessor(); if (processor == null) return JavaResolveResult.EMPTY; final PsiType type = processor.getType(); if (type == null) return JavaResolveResult.EMPTY; PsiMethod method = findBaseProcessMethod(type); if (method == null) return JavaResolveResult.EMPTY; for (PsiClassType classType : PsiTypesUtil.getClassTypeComponents(type)) { if (!TypeConversionUtil.isAssignable(type, classType)) continue; final PsiClassType.ClassResolveResult resolveResult = classType.resolveGenerics(); final PsiClass aClass = resolveResult.getElement(); if (aClass == null) continue; PsiMethod foundMethod = aClass.findMethodBySignature(method, true); if (foundMethod == null) continue; PsiClass methodContainingClass = foundMethod.getContainingClass(); if (methodContainingClass == null) continue; final PsiSubstitutor substitutor = TypeConversionUtil.getClassSubstitutor(methodContainingClass, aClass, resolveResult.getSubstitutor()); if (substitutor == null) continue; return new MethodCandidateInfo(foundMethod, substitutor, false, false, this, null, null, null); } return JavaResolveResult.EMPTY; }