mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
[java, highlighting] modules: show only 1 service provider gutter IDEA-185484
GitOrigin-RevId: e628be149707e4725b901b92d61ea7cbde28d0e0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
29f30fd713
commit
d7659ef157
@@ -15,6 +15,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.JavaReflectionReferenceUtil;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.siyeh.ig.callMatcher.CallMatcher;
|
||||
import one.util.streamex.StreamEx;
|
||||
@@ -25,17 +26,29 @@ import java.awt.event.MouseEvent;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
final class JavaServiceUtil {
|
||||
static final CallMatcher SERVICE_LOADER_LOAD = CallMatcher.staticCall("java.util.ServiceLoader", "load", "loadInstalled");
|
||||
import static com.intellij.psi.CommonClassNames.JAVA_UTIL_SERVICE_LOADER;
|
||||
|
||||
static boolean isServiceProviderMethod(@NotNull PsiMethod method) {
|
||||
return "provider".equals(method.getName()) &&
|
||||
final public class JavaServiceUtil {
|
||||
public static final String PROVIDER = "provider";
|
||||
public static final Set<String> JAVA_UTIL_SERVICE_LOADER_METHODS = Set.of("load", "loadInstalled");
|
||||
|
||||
static final CallMatcher SERVICE_LOADER_LOAD = CallMatcher.staticCall(JAVA_UTIL_SERVICE_LOADER,
|
||||
ArrayUtil.toStringArray(JAVA_UTIL_SERVICE_LOADER_METHODS));
|
||||
|
||||
public static boolean isServiceProviderMethod(@NotNull PsiMethod method) {
|
||||
return PROVIDER.equals(method.getName()) &&
|
||||
method.getParameterList().isEmpty() &&
|
||||
method.hasModifierProperty(PsiModifier.PUBLIC) &&
|
||||
method.hasModifierProperty(PsiModifier.STATIC);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod findProvider(@NotNull PsiClass psiClass) {
|
||||
return ContainerUtil.find(psiClass.findMethodsByName("provider", false), JavaServiceUtil::isServiceProviderMethod);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static List<LineMarkerInfo<PsiElement>> collectServiceProviderMethod(@NotNull PsiMethod method) {
|
||||
PsiClass containingClass = method.getContainingClass();
|
||||
@@ -45,6 +58,10 @@ final class JavaServiceUtil {
|
||||
|
||||
@NotNull
|
||||
static List<LineMarkerInfo<PsiElement>> collectServiceImplementationClass(@NotNull PsiClass psiClass) {
|
||||
if (findProvider(psiClass) != null) return Collections.emptyList();
|
||||
for (PsiMethod constructor : psiClass.getConstructors()) {
|
||||
if (!constructor.hasParameters()) return createJavaServiceLineMarkerInfo(constructor.getNameIdentifier(), psiClass, psiClass);
|
||||
}
|
||||
return createJavaServiceLineMarkerInfo(psiClass.getNameIdentifier(), psiClass, psiClass);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user