mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-core] Split JavaServiceUtil
JavaServiceProviderUtil -> codeserver.core JavaServiceLineMarkerUtil -> java-impl GitOrigin-RevId: 65c42cdce19ab257ffd18143cc32ff4bd4aeacf7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d083806610
commit
6fc7a8b6e5
+42
@@ -0,0 +1,42 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.codeserver.core;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Utility for working with Java services (jigsaw)
|
||||
*/
|
||||
public final class JavaServiceProviderUtil {
|
||||
public static final String PROVIDER = "provider";
|
||||
public static final Set<String> JAVA_UTIL_SERVICE_LOADER_METHODS = Set.of("load", "loadInstalled");
|
||||
|
||||
/**
|
||||
* Checks if the given method is a service provider method.
|
||||
*
|
||||
* @param method for checking
|
||||
* @return true if the method is a service provider method, false otherwise
|
||||
*/
|
||||
public static boolean isServiceProviderMethod(@NotNull PsiMethod method) {
|
||||
return PROVIDER.equals(method.getName()) &&
|
||||
method.getParameterList().isEmpty() &&
|
||||
method.hasModifierProperty(PsiModifier.PUBLIC) &&
|
||||
method.hasModifierProperty(PsiModifier.STATIC);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a service provider method within a given PsiClass.
|
||||
*
|
||||
* @param psiClass to search for the service provider method
|
||||
* @return service provider method, or null if not found
|
||||
*/
|
||||
public static @Nullable PsiMethod findServiceProviderMethod(@NotNull PsiClass psiClass) {
|
||||
return ContainerUtil.find(psiClass.findMethodsByName("provider", false), JavaServiceProviderUtil::isServiceProviderMethod);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -6,12 +6,12 @@ import com.intellij.codeInsight.daemon.JavaErrorBundle;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
|
||||
import com.intellij.codeInsight.daemon.impl.JavaServiceUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.AddExportsDirectiveFix;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.AddUsesDirectiveFix;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.intention.QuickFixFactory;
|
||||
import com.intellij.java.codeserver.core.JavaServiceProviderUtil;
|
||||
import com.intellij.modcommand.ModCommandAction;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -272,7 +272,7 @@ final class ModuleHighlightUtil {
|
||||
errorSink.accept(info);
|
||||
}
|
||||
|
||||
PsiMethod provider = JavaServiceUtil.findServiceProviderMethod(implClass);
|
||||
PsiMethod provider = JavaServiceProviderUtil.findServiceProviderMethod(implClass);
|
||||
if (provider != null) {
|
||||
PsiType type = provider.getReturnType();
|
||||
PsiClass typeClass = type instanceof PsiClassType classType ? classType.resolve() : null;
|
||||
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInspection.java19modules;
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.JavaServiceUtil;
|
||||
import com.intellij.codeInspection.reference.*;
|
||||
import com.intellij.codeInspection.visibility.EntryPointWithVisibilityLevel;
|
||||
import com.intellij.java.analysis.JavaAnalysisBundle;
|
||||
import com.intellij.java.codeserver.core.JavaPsiModuleUtil;
|
||||
import com.intellij.java.codeserver.core.JavaServiceProviderUtil;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
@@ -53,7 +53,7 @@ public final class Java9ModuleEntryPoint extends EntryPointWithVisibilityLevel {
|
||||
return isServiceOrExported(psiClass);
|
||||
}
|
||||
return psiElement instanceof PsiMethod method &&
|
||||
(isDefaultConstructor(method) || JavaServiceUtil.isServiceProviderMethod(method)) &&
|
||||
(isDefaultConstructor(method) || JavaServiceProviderUtil.isServiceProviderMethod(method)) &&
|
||||
isServiceOrExported(method.getContainingClass());
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInspection.reference;
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.JavaServiceUtil;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.java.codeserver.core.JavaServiceProviderUtil;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -136,7 +136,7 @@ public final class RefJavaModuleImpl extends RefElementImpl implements RefJavaMo
|
||||
final PsiElement implementationClass = implementationReference.resolve();
|
||||
if (implementationClass instanceof PsiClass psiClass) {
|
||||
RefElement refTargetElement = null;
|
||||
PsiElement targetElement = JavaServiceUtil.findServiceProviderMethod(psiClass);
|
||||
PsiElement targetElement = JavaServiceProviderUtil.findServiceProviderMethod(psiClass);
|
||||
|
||||
if (targetElement == null) {
|
||||
final RefElement refElement = getRefManager().getReference(psiClass);
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import static com.intellij.codeInsight.daemon.impl.JavaServiceUtil.JAVA_UTIL_SERVICE_LOADER_METHODS;
|
||||
import static com.intellij.java.codeserver.core.JavaServiceProviderUtil.JAVA_UTIL_SERVICE_LOADER_METHODS;
|
||||
import static com.intellij.psi.CommonClassNames.JAVA_UTIL_SERVICE_LOADER;
|
||||
import static com.intellij.psi.impl.source.resolve.reference.impl.JavaReflectionReferenceUtil.ReflectiveType;
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.intellij.codeInsight.daemon.*;
|
||||
import com.intellij.concurrency.JobLauncher;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.java.codeserver.core.JavaServiceProviderUtil;
|
||||
import com.intellij.openapi.actionSystem.IdeActions;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
@@ -211,18 +212,18 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor impleme
|
||||
if (mySiblingsOption.isEnabled() && FindSuperElementsHelper.canHaveSiblingSuper(method, containingClass)) {
|
||||
canHaveSiblings.putValue(containingClass, method);
|
||||
}
|
||||
if (JavaServiceUtil.isServiceProviderMethod(method)) {
|
||||
tasks.add(() -> JavaServiceUtil.collectServiceProviderMethod(method));
|
||||
if (JavaServiceProviderUtil.isServiceProviderMethod(method)) {
|
||||
tasks.add(() -> JavaServiceLineMarkerUtil.collectServiceProviderMethod(method));
|
||||
}
|
||||
}
|
||||
else if (parent instanceof PsiClass && !(parent instanceof PsiTypeParameter)) {
|
||||
tasks.add(() -> collectInheritingClasses((PsiClass)parent));
|
||||
tasks.add(() -> JavaServiceUtil.collectServiceImplementationClass((PsiClass)parent));
|
||||
tasks.add(() -> JavaServiceLineMarkerUtil.collectServiceImplementationClass((PsiClass)parent));
|
||||
}
|
||||
else if (parent instanceof PsiReferenceExpression &&
|
||||
parent.getParent() instanceof PsiMethodCallExpression parentCall &&
|
||||
JavaServiceUtil.SERVICE_LOADER_LOAD.test(parentCall)) {
|
||||
tasks.add(() -> JavaServiceUtil.collectServiceLoaderLoadCall((PsiIdentifier)element, parentCall));
|
||||
JavaServiceLineMarkerUtil.SERVICE_LOADER_LOAD.test(parentCall)) {
|
||||
tasks.add(() -> JavaServiceLineMarkerUtil.collectServiceLoaderLoadCall((PsiIdentifier)element, parentCall));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+11
-31
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.daemon.impl;
|
||||
|
||||
import com.intellij.codeInsight.daemon.GutterIconNavigationHandler;
|
||||
@@ -6,6 +6,7 @@ import com.intellij.codeInsight.daemon.LineMarkerInfo;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.java.analysis.JavaAnalysisBundle;
|
||||
import com.intellij.java.codeserver.core.JavaPsiModuleUtil;
|
||||
import com.intellij.java.codeserver.core.JavaServiceProviderUtil;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
||||
import com.intellij.openapi.util.NlsSafe;
|
||||
@@ -24,42 +25,21 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.intellij.psi.CommonClassNames.JAVA_UTIL_SERVICE_LOADER;
|
||||
|
||||
/**
|
||||
* Utility for working with Java services (jigsaw)
|
||||
* Utility for generating JPMS service provider line markers
|
||||
*/
|
||||
public final class JavaServiceUtil {
|
||||
public static final String PROVIDER = "provider";
|
||||
public static final Set<String> JAVA_UTIL_SERVICE_LOADER_METHODS = Set.of("load", "loadInstalled");
|
||||
final class JavaServiceLineMarkerUtil {
|
||||
|
||||
static final CallMatcher SERVICE_LOADER_LOAD = CallMatcher.staticCall(JAVA_UTIL_SERVICE_LOADER,
|
||||
ArrayUtil.toStringArray(JAVA_UTIL_SERVICE_LOADER_METHODS));
|
||||
|
||||
/**
|
||||
* Checks if the given method is a service provider method.
|
||||
*
|
||||
* @param method for checking
|
||||
* @return true if the method is a service provider method, false otherwise
|
||||
*/
|
||||
public static boolean isServiceProviderMethod(@NotNull PsiMethod method) {
|
||||
return PROVIDER.equals(method.getName()) &&
|
||||
method.getParameterList().isEmpty() &&
|
||||
method.hasModifierProperty(PsiModifier.PUBLIC) &&
|
||||
method.hasModifierProperty(PsiModifier.STATIC);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a service provider method within a given PsiClass.
|
||||
*
|
||||
* @param psiClass to search for the service provider method
|
||||
* @return service provider method, or null if not found
|
||||
*/
|
||||
public static @Nullable PsiMethod findServiceProviderMethod(@NotNull PsiClass psiClass) {
|
||||
return ContainerUtil.find(psiClass.findMethodsByName("provider", false), JavaServiceUtil::isServiceProviderMethod);
|
||||
}
|
||||
ArrayUtil.toStringArray(
|
||||
JavaServiceProviderUtil.JAVA_UTIL_SERVICE_LOADER_METHODS));
|
||||
|
||||
static @NotNull List<LineMarkerInfo<PsiElement>> collectServiceProviderMethod(@NotNull PsiMethod method) {
|
||||
PsiClass containingClass = method.getContainingClass();
|
||||
@@ -68,7 +48,7 @@ public final class JavaServiceUtil {
|
||||
}
|
||||
|
||||
static @NotNull List<LineMarkerInfo<PsiElement>> collectServiceImplementationClass(@NotNull PsiClass psiClass) {
|
||||
if (findServiceProviderMethod(psiClass) != null) return Collections.emptyList();
|
||||
if (JavaServiceProviderUtil.findServiceProviderMethod(psiClass) != null) return Collections.emptyList();
|
||||
for (PsiMethod constructor : psiClass.getConstructors()) {
|
||||
if (!constructor.hasParameters()) return createJavaServiceLineMarkerInfo(constructor.getNameIdentifier(), psiClass, psiClass);
|
||||
}
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
package com.intellij.codeInsight.daemon.impl
|
||||
|
||||
import com.intellij.codeInsight.daemon.LineMarkerInfo
|
||||
import com.intellij.codeInsight.daemon.impl.JavaServiceUtil.ServiceNavigationHandler
|
||||
import com.intellij.codeInsight.daemon.impl.JavaServiceLineMarkerUtil.ServiceNavigationHandler
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
|
||||
Reference in New Issue
Block a user