void (@NotNull PsiMethodCallExpression callExpression, boolean isDeclared, @NotNull ProblemsHolder holder) { final PsiExpression[] arguments = callExpression.getArgumentList().getExpressions(); if (arguments.length != 0) { final PsiExpression nameExpression = arguments[0]; final String methodName = getMemberName(nameExpression); if (methodName != null) { final ReflectiveClass ownerClass = getOwnerClass(callExpression); if (ownerClass != null && ownerClass.isExact()) { final PsiMethod[] methods = ownerClass.getPsiClass().findMethodsByName(methodName, true); if (methods.length == 0) { if (reportUnresolvedMembersOf(ownerClass)) { holder.registerProblem(nameExpression, JavaBundle.message( "inspection.reflection.member.access.cannot.resolve.method", methodName)); } return; } final PsiMethod matchingMethod = matchMethod(callExpression, methods, arguments, 1); if (matchingMethod == null) { if (reportUnresolvedMembersOf(ownerClass)) { holder.registerProblem(nameExpression, JavaBundle.message( "inspection.reflection.member.access.cannot.resolve.method.arguments", methodName)); } return; } if (isDeclared && matchingMethod.getContainingClass() != ownerClass.getPsiClass()) { LocalQuickFix[] fix = matchingMethod.hasModifierProperty(PsiModifier.PUBLIC) ? new LocalQuickFix[] {new UseAppropriateMethodFix("getMethod")} : LocalQuickFix.EMPTY_ARRAY; holder.registerProblem(nameExpression, JavaBundle.message( "inspection.reflection.member.access.method.not.in.class", methodName, ownerClass.getPsiClass().getQualifiedName()), fix); return; } if (!isDeclared && !matchingMethod.hasModifierProperty(PsiModifier.PUBLIC)) { holder.registerProblem(nameExpression, JavaBundle.message( "inspection.reflection.member.access.method.not.public", methodName), new UseAppropriateMethodFix("getDeclaredMethod")); } } } } }