static List<LineMarkerInfo<PsiElement>> collectServiceLoaderLoadCall(@NotNull PsiIdentifier identifier,
                                                                       @NotNull PsiMethodCallExpression methodCall) {
    if (!PsiUtil.isAvailable(JavaFeature.MODULES, methodCall)) return Collections.emptyList();
    PsiExpression[] arguments = methodCall.getArgumentList().getExpressions();

    JavaReflectionReferenceUtil.ReflectiveType serviceType = findServiceTypeInArguments(arguments);
    if (serviceType == null || !serviceType.isExact()) return Collections.emptyList();

    PsiClass psiClass = serviceType.getPsiClass();
    if (psiClass == null) return Collections.emptyList();

    String qualifiedName = psiClass.getQualifiedName();
    if (qualifiedName == null) return Collections.emptyList();

    PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByElement(methodCall);
    if (javaModule == null) return Collections.emptyList();

    for (PsiUsesStatement statement : javaModule.getUses()) {
      PsiClassType usedClass = statement.getClassType();
      if (usedClass == null || !Objects.equals(psiClass, usedClass.resolve())) continue;
      return Collections.singletonList(new LineMarkerInfo<>(identifier, identifier.getTextRange(), AllIcons.Gutter.Java9Service,
                                                            e -> calculateTooltip("service.uses", qualifiedName),
                                                            new ServiceUsesNavigationHandler(qualifiedName),
                                                            GutterIconRenderer.Alignment.LEFT,
                                                            () -> JavaAnalysisBundle.message("service.uses")));
    }
    return Collections.emptyList();
  }
static List<LineMarkerInfo<PsiElement>> collectServiceLoaderLoadCall(@NotNull PsiIdentifier identifier,
                                                                       @NotNull PsiMethodCallExpression methodCall)