List<PsiVariable> (@NotNull PsiMethodCallExpression methodCallElement, @NotNull SearchMode mode) { String methodName = methodCallElement.getMethodExpression().getReferenceName(); if (methodName == null) { return Collections.emptyList(); } List<PsiVariable> candidates = new ArrayList<>(); for (PsiVariable var : CreateFromUsageUtils.guessMatchingVariables(methodCallElement)) { if (var.getName() == null) { continue; } PsiType type = var.getType(); if (!(type instanceof PsiClassType)) { continue; } PsiClass resolvedClass = ((PsiClassType)type).resolve(); if (resolvedClass == null) { continue; } if (resolvedClass.findMethodsByName(methodName, true).length > 0) { candidates.add(var); if (mode == SearchMode.MAX_2_CANDIDATES && candidates.size() >= 2) { break; } } } return List.copyOf(candidates); }