[java, quickfix] Refactor module access checking method and improve module naming. IJ-CR-125003

GitOrigin-RevId: 078deb60a0fbf497020fe73bd99e170171a30381
This commit is contained in:
Aleksey Dobrynin
2024-02-16 11:17:55 +01:00
committed by intellij-monorepo-bot
parent 3d77d84399
commit 1b565a13b9
7 changed files with 36 additions and 25 deletions

View File

@@ -34,11 +34,11 @@ public interface JavaModuleSystemEx extends JavaModuleSystem {
}
@Nullable
default ErrorWithFixes getProblem(@NotNull PsiClass target, @NotNull PsiElement place) {
default ErrorWithFixes checkAccess(@NotNull PsiClass target, @NotNull PsiElement place) {
String packageName = PsiUtil.getPackageName(target);
return packageName != null ? getProblem(packageName, target.getContainingFile(), place) : null;
return packageName != null ? checkAccess(packageName, target.getContainingFile(), place) : null;
}
@Nullable
ErrorWithFixes getProblem(@NotNull String targetPackageName, @Nullable PsiFile targetFile, @NotNull PsiElement place);
ErrorWithFixes checkAccess(@NotNull String targetPackageName, @Nullable PsiFile targetFile, @NotNull PsiElement place);
}

View File

@@ -2204,14 +2204,14 @@ public final class HighlightUtil {
}
String containerName = getContainerName(refElement, result.getSubstitutor());
ErrorWithFixes problem = getModuleProblem(resolved, ref, symbolName, containerName);
ErrorWithFixes problem = checkModuleAccess(resolved, ref, symbolName, containerName);
if (problem != null) return Pair.pair(problem.message, problem.fixes);
return Pair.pair(JavaErrorBundle.message("visibility.access.problem", symbolName, containerName), null);
}
@Nullable
@Nls
static ErrorWithFixes getModuleProblem(@NotNull PsiElement resolved, @NotNull PsiElement ref, @NotNull JavaResolveResult result) {
static ErrorWithFixes checkModuleAccess(@NotNull PsiElement resolved, @NotNull PsiElement ref, @NotNull JavaResolveResult result) {
PsiElement refElement = resolved;
PsiClass packageLocalClass = HighlightFixUtil.getPackageLocalClassInTheMiddle(ref);
if (packageLocalClass != null) {
@@ -2222,23 +2222,23 @@ public final class HighlightUtil {
String containerName = (resolved instanceof PsiModifierListOwner modifierListOwner)
? getContainerName(modifierListOwner, result.getSubstitutor())
: null;
return getModuleProblem(resolved, ref, symbolName, containerName);
return checkModuleAccess(resolved, ref, symbolName, containerName);
}
@Nullable
@Nls
private static ErrorWithFixes getModuleProblem(@NotNull PsiElement target,
@NotNull PsiElement place,
@Nullable String symbolName,
@Nullable String containerName) {
private static ErrorWithFixes checkModuleAccess(@NotNull PsiElement target,
@NotNull PsiElement place,
@Nullable String symbolName,
@Nullable String containerName) {
for (JavaModuleSystem moduleSystem : JavaModuleSystem.EP_NAME.getExtensionList()) {
if (moduleSystem instanceof JavaModuleSystemEx system) {
if (target instanceof PsiClass targetClass) {
final ErrorWithFixes problem = system.getProblem(targetClass, place);
final ErrorWithFixes problem = system.checkAccess(targetClass, place);
if (problem != null) return problem;
}
if (target instanceof PsiPackage targetPackage) {
final ErrorWithFixes problem = system.getProblem(targetPackage.getQualifiedName(), null, place);
final ErrorWithFixes problem = system.checkAccess(targetPackage.getQualifiedName(), null, place);
if (problem != null) return problem;
}
}
@@ -3499,7 +3499,7 @@ public final class HighlightUtil {
PsiTreeUtil.getParentOfType(ref, PsiPackageStatement.class, true) != null ||
resolved instanceof PsiPackage && ref.getParent() instanceof PsiJavaCodeReferenceElement;
final ErrorWithFixes moduleProblem = getModuleProblem(resolved, ref, result);
final ErrorWithFixes moduleProblem = checkModuleAccess(resolved, ref, result);
if (!skipValidityChecks && !(result.isValidResult() && moduleProblem == null)) {
if (moduleProblem != null) {
HighlightInfo.Builder info = HighlightInfo.newHighlightInfo(HighlightInfoType.WRONG_REF).range(findPackagePrefix(ref))

View File

@@ -223,7 +223,7 @@ public final class LambdaHighlightingUtil {
return info;
}
final ErrorWithFixes moduleProblem = HighlightUtil.getModuleProblem(psiClass, expression, resolveResult);
final ErrorWithFixes moduleProblem = HighlightUtil.checkModuleAccess(psiClass, expression, resolveResult);
if (moduleProblem != null) {
HighlightInfo.Builder info =
HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(moduleProblem.message);

View File

@@ -19,11 +19,12 @@ import com.intellij.openapi.roots.impl.libraries.LibraryEx;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaModule;
import com.intellij.psi.PsiNameHelper;
import com.intellij.psi.PsiReference;
import com.intellij.ui.SimpleListCellRenderer;
import com.intellij.util.concurrency.AppExecutorUtil;
@@ -140,9 +141,13 @@ class AddLibraryDependencyFix extends OrderEntryFix {
return new IntentionPreviewInfo.Html(HtmlChunk.text(message));
}
@NlsContexts.Label
@NlsSafe
private String getLibraryName(@NotNull Library library) {
final PsiJavaModule javaModule = ReadAction.compute(() -> JavaModuleGraphUtil.findDescriptorByLibrary(library, myCurrentModule.getProject()));
return javaModule != null ? javaModule.getName() : library.getPresentableName();
final PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByLibrary(library, myCurrentModule.getProject());
if (javaModule != null && PsiNameHelper.isValidModuleName(javaModule.getName(), javaModule)) {
return javaModule.getName();
} else {
return library.getPresentableName();
}
}
}

View File

@@ -8,7 +8,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil;
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo;
import com.intellij.ide.nls.NlsMessages;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
@@ -186,7 +185,11 @@ class AddModuleDependencyFix extends OrderEntryFix {
@NotNull
private String getModuleName(@NotNull Module module) {
final PsiJavaModule javaModule = ReadAction.compute(() -> JavaModuleGraphUtil.findDescriptorByModule(module, myScope == TEST));
return javaModule != null ? javaModule.getName() : module.getName();
final PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByModule(module, myScope == TEST);
if (javaModule != null && PsiNameHelper.isValidModuleName(javaModule.getName(), javaModule)) {
return javaModule.getName();
} else {
return module.getName();
}
}
}

View File

@@ -46,7 +46,7 @@ internal class JavaPlatformModuleSystem : JavaModuleSystemEx {
return getProblem(targetPackageName, targetFile, place, true, this::isExported) == null
}
override fun getProblem(targetPackageName: String, targetFile: PsiFile?, place: PsiElement): ErrorWithFixes? {
override fun checkAccess(targetPackageName: String, targetFile: PsiFile?, place: PsiElement): ErrorWithFixes? {
return getProblem(targetPackageName, targetFile, place, false) { use, _, target, _, _ -> JavaModuleGraphUtil.reads(use, target) }
}

View File

@@ -8,7 +8,6 @@ import com.intellij.codeInsight.daemon.quickFix.ActionHint;
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.command.WriteCommandAction;
@@ -168,8 +167,12 @@ public class OrderEntryTest extends DaemonAnalyzerTestCase {
@NotNull
private static String getModuleName(@NotNull Module module) {
final PsiJavaModule javaModule = ReadAction.compute(() -> JavaModuleGraphUtil.findDescriptorByModule(module, false));
return javaModule != null ? javaModule.getName() : module.getName();
final PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByModule(module, false);
if (javaModule != null && PsiNameHelper.isValidModuleName(javaModule.getName(), javaModule)) {
return javaModule.getName();
} else {
return module.getName();
}
}
public void testAddJunit() {