private static void checkVarHandleAccessSignature(@NotNull PsiMethodCallExpression accessCall,
                                                    @Nullable ReflectiveType valueType,
                                                    int coordinateArguments,
                                                    @NotNull ProblemsHolder holder) {
    if (valueType == null) return;

    if (isWithReturnValue(accessCall)) {
      checkReturnType(accessCall, valueType, false, holder);
    }

    final PsiExpressionList accessArgumentList = accessCall.getArgumentList();
    final PsiExpression[] accessArguments = accessArgumentList.getExpressions();

    final int requiredArgumentCount = getVarHandleArgumentCount(accessCall, coordinateArguments);
    if (!checkArgumentCount(accessArguments, requiredArgumentCount, 0, accessArgumentList, holder)) return;

    LOG.assertTrue(accessArguments.length == requiredArgumentCount);
    for (int i = coordinateArguments; i < requiredArgumentCount; i++) {
      checkArgumentType(accessArguments[i], valueType, accessArgumentList, false, false, holder);
    }
  }
private static void checkVarHandleAccessSignature(@NotNull PsiMethodCallExpression accessCall,
                                                    @Nullable ReflectiveType valueType,
                                                    int coordinateArguments,
                                                    @NotNull ProblemsHolder holder)