mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] quickfix for module accessibility issues in functional expressions (IDEA-179293)
This commit is contained in:
+4
-3
@@ -1576,9 +1576,10 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
return accessProblemDescriptionAndFixes(ref, resolved, result).first;
|
||||
}
|
||||
|
||||
private static Pair<String, List<IntentionAction>> accessProblemDescriptionAndFixes(PsiElement ref,
|
||||
PsiElement resolved,
|
||||
JavaResolveResult result) {
|
||||
@NotNull
|
||||
static Pair<String, List<IntentionAction>> accessProblemDescriptionAndFixes(@NotNull PsiElement ref,
|
||||
@NotNull PsiElement resolved,
|
||||
@NotNull JavaResolveResult result) {
|
||||
assert resolved instanceof PsiModifierListOwner : resolved;
|
||||
PsiModifierListOwner refElement = (PsiModifierListOwner)resolved;
|
||||
String symbolName = HighlightMessageUtil.getSymbolName(refElement, result.getSubstitutor());
|
||||
|
||||
+8
-2
@@ -9,6 +9,7 @@ import com.intellij.codeInsight.daemon.impl.*;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil.Feature;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.AdjustFunctionContextFix;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.intention.QuickFixFactory;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -1467,8 +1468,13 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
PsiClass psiClass = resolveResult.getElement();
|
||||
if (psiClass != null) {
|
||||
if (!PsiUtil.isAccessible(myFile.getProject(), psiClass, expression, null)) {
|
||||
String text = HighlightUtil.accessProblemDescription(expression, psiClass, resolveResult);
|
||||
myHolder.add(HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(text).create());
|
||||
Pair<String, List<IntentionAction>> problem = HighlightUtil.accessProblemDescriptionAndFixes(expression, psiClass, resolveResult);
|
||||
HighlightInfo info =
|
||||
HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(problem.first).create();
|
||||
myHolder.add(info);
|
||||
if (problem.second != null) {
|
||||
problem.second.forEach(fix -> QuickFixAction.registerQuickFixAction(info, fix));
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (PsiType type : resolveResult.getSubstitutor().getSubstitutionMap().values()) {
|
||||
|
||||
@@ -201,6 +201,10 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
addFile("module-info.java", "module M2 { exports pkg.m2; }", M2)
|
||||
addFile("pkg/m2/C2.java", "package pkg.m2;\npublic class C2 { }", M2)
|
||||
addFile("pkg/m3/C3.java", "package pkg.m3;\npublic class C3 { }", M3)
|
||||
addFile("module-info.java", "module M6 { exports pkg.m6; }", M6)
|
||||
addFile("pkg/m6/C6.java", "package pkg.m6;\nimport pkg.m8.*;\nimport java.util.function.*;\npublic class C6 { public void m(Consumer<C8> c) { } }", M6)
|
||||
addFile("module-info.java", "module M8 { exports pkg.m8; }", M8)
|
||||
addFile("pkg/m8/C8.java", "package pkg.m8;\npublic class C8 { }", M8)
|
||||
|
||||
fixes("module M { requires <caret>M.missing; }")
|
||||
fixes("module M { requires <caret>M3; }", arrayOf("AddModuleDependencyFix"))
|
||||
@@ -212,6 +216,11 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
fixes("module M { uses <caret>pkg.m3.C3; }", arrayOf("AddModuleDependencyFix"))
|
||||
|
||||
fixes("pkg/main/C.java", "package pkg.main;\nimport <caret>pkg.m2.C2;", arrayOf("AddRequiredModuleFix"))
|
||||
|
||||
addFile("module-info.java", "module M { requires M6; }")
|
||||
addFile("pkg/main/Util.java", "package pkg.main;\nclass Util {\n static <T> void sink(T t) { }\n}")
|
||||
fixes("pkg/main/C.java", "package pkg.main;\nimport pkg.m6.*;class C {{ new C6().m(<caret>Util::sink); }}", arrayOf("AddRequiredModuleFix"))
|
||||
fixes("pkg/main/C.java", "package pkg.main;\nimport pkg.m6.*;class C {{ new C6().m(<caret>t -> Util.sink(t)); }}", arrayOf("AddRequiredModuleFix"))
|
||||
}
|
||||
|
||||
fun testPackageAccessibility() = doTestPackageAccessibility(moduleFileInTests = false, checkFileInTests = false)
|
||||
|
||||
Reference in New Issue
Block a user