diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaLensSettings.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaLensSettings.java index a61c43bf8517..7c3b6b207307 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaLensSettings.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaLensSettings.java @@ -4,12 +4,12 @@ package com.intellij.codeInsight.daemon.impl.analysis; public class JavaLensSettings { private boolean showUsages; private boolean showImplementations; - private boolean showBrokenUsages = true; + private boolean showRelatedProblems = true; - public JavaLensSettings(boolean showUsages, boolean showImplementations, boolean showBrokenUsages) { + public JavaLensSettings(boolean showUsages, boolean showImplementations, boolean showRelatedProblems) { this.showUsages = showUsages; this.showImplementations = showImplementations; - this.showBrokenUsages = showBrokenUsages; + this.showRelatedProblems = showRelatedProblems; } public JavaLensSettings() { @@ -31,12 +31,12 @@ public class JavaLensSettings { this.showImplementations = showImplementations; } - public boolean isShowBrokenUsages() { - return showBrokenUsages; + public boolean isShowRelatedProblems() { + return showRelatedProblems; } - public void setShowBrokenUsages(boolean showBrokenUsages) { - this.showBrokenUsages = showBrokenUsages; + public void setShowRelatedProblems(boolean showRelatedProblems) { + this.showRelatedProblems = showRelatedProblems; } @Override @@ -46,7 +46,7 @@ public class JavaLensSettings { JavaLensSettings settings = (JavaLensSettings)o; - if (showUsages != settings.showUsages || showBrokenUsages != settings.showBrokenUsages) return false; + if (showUsages != settings.showUsages || showRelatedProblems != settings.showRelatedProblems) return false; return showImplementations == settings.showImplementations; } @@ -54,7 +54,7 @@ public class JavaLensSettings { public int hashCode() { int result = showUsages ? 1 : 0; result = 31 * result + (showImplementations ? 1 : 0); - result = 31 * result + (showBrokenUsages ? 1 : 0); + result = 31 * result + (showRelatedProblems ? 1 : 0); return result; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLensConfigurable.kt b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLensConfigurable.kt index a6693e97b1af..be96368608dd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLensConfigurable.kt +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLensConfigurable.kt @@ -15,7 +15,7 @@ class JavaLensConfigurable(val settings: JavaLensSettings) : ImmediateConfigurab get() = listOf( ImmediateConfigurable.Case(JavaBundle.message("settings.inlay.java.usages"), "usages", { settings.isShowUsages}, { settings.isShowUsages = it}), ImmediateConfigurable.Case(JavaBundle.message("settings.inlay.java.inheritors"), "inheritors", { settings.isShowImplementations}, { settings.isShowImplementations = it}), - ImmediateConfigurable.Case(JavaBundle.message("project.problems.title"), "broken.usages", { settings.isShowBrokenUsages}, { settings.isShowBrokenUsages = it}) + ImmediateConfigurable.Case(JavaBundle.message("project.problems.title"), "related.problems", { settings.isShowRelatedProblems }, { settings.isShowRelatedProblems = it}) ) override val mainCheckboxText: String diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPass.java b/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPass.java index f79610b55f3f..14bf69794b54 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPass.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPass.java @@ -63,9 +63,9 @@ public class ProjectProblemPass extends EditorBoundHighlightingPass { Map changes = new SmartHashMap<>(); problems.forEach((curMember, problem) -> { ScopedMember prevMember = problem.prevMember; - Set brokenUsages = problem.brokenUsages; + Set relatedProblems = problem.relatedProblems; changes.put(curMember, prevMember); - if (brokenUsages != null) addInfo(factory, curMember, brokenUsages, editorInfos); + if (relatedProblems != null) addInfo(factory, curMember, relatedProblems, editorInfos); }); updateInfos(myEditor, editorInfos); @@ -80,20 +80,20 @@ public class ProjectProblemPass extends EditorBoundHighlightingPass { private void addInfo(@NotNull PresentationFactory factory, @NotNull PsiMember psiMember, - @NotNull Set brokenUsages, + @NotNull Set relatedProblems, @NotNull Map editorInfos) { EditorInfo oldInfo = editorInfos.remove(psiMember); if (oldInfo != null) Disposer.dispose(oldInfo.myInlay); - if (brokenUsages.isEmpty() || hasOtherElementsOnSameLine(psiMember)) return; + if (relatedProblems.isEmpty() || hasOtherElementsOnSameLine(psiMember)) return; PsiElement identifier = getIdentifier(psiMember); if (identifier == null) return; int offset = getMemberOffset(psiMember); - InlayPresentation presentation = getPresentation(myProject, myEditor, myEditor.getDocument(), factory, offset, psiMember, brokenUsages); + InlayPresentation presentation = getPresentation(myProject, myEditor, myEditor.getDocument(), factory, offset, psiMember, relatedProblems); BlockInlayRenderer renderer = createBlockRenderer(presentation); Inlay newInlay = myEditor.getInlayModel().addBlockElement(offset, true, true, BlockInlayPriority.PROBLEMS, renderer); if (newInlay == null) return; addListener(renderer, newInlay); - HighlightInfo newHighlightInfo = createHighlightInfo(myEditor, identifier, brokenUsages); + HighlightInfo newHighlightInfo = createHighlightInfo(myEditor, identifier, relatedProblems); editorInfos.put(psiMember, new EditorInfo(newInlay, newHighlightInfo)); } @@ -121,11 +121,11 @@ public class ProjectProblemPass extends EditorBoundHighlightingPass { private static class Problem { private final ScopedMember prevMember; - private final Set brokenUsages; + private final Set relatedProblems; - private Problem(ScopedMember prevMember, Set brokenUsages) { + private Problem(ScopedMember prevMember, Set relatedProblems) { this.prevMember = prevMember; - this.brokenUsages = brokenUsages; + this.relatedProblems = relatedProblems; } } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPassUtils.java b/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPassUtils.java index 8c251eaec133..6fa5d5d52b57 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPassUtils.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/ProjectProblemPassUtils.java @@ -29,6 +29,7 @@ import com.intellij.psi.*; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.usageView.UsageInfo; +import com.intellij.usageView.UsageViewUtil; import com.intellij.usages.*; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; @@ -56,48 +57,48 @@ public class ProjectProblemPassUtils { @NotNull PresentationFactory factory, int offset, @NotNull PsiMember member, - @NotNull Set brokenUsages) { + @NotNull Set relatedProblems) { int column = offset - document.getLineStartOffset(document.getLineNumber(offset)); int columnWidth = EditorUtil.getPlainSpaceWidth(editor); - SpacePresentation usagesOffset = new SpacePresentation(column * columnWidth, 0); - InlayPresentation textPresentation = factory.smallText(JavaBundle.message("project.problems.broken.usages", brokenUsages.size())); + SpacePresentation problemsOffset = new SpacePresentation(column * columnWidth, 0); + InlayPresentation textPresentation = factory.smallText(JavaBundle.message("project.problems.hint.text", relatedProblems.size())); InlayPresentation errorTextPresentation = new AttributesTransformerPresentation(textPresentation, __ -> editor.getColorsScheme().getAttributes(CodeInsightColors.WRONG_REFERENCES_ATTRIBUTES)); - InlayPresentation usagesPresentation = factory.referenceOnHover(errorTextPresentation, (e, p) -> showUsages(member, brokenUsages)); + InlayPresentation problemsPresentation = factory.referenceOnHover(errorTextPresentation, (e, p) -> showProblems(member, relatedProblems)); JPopupMenu popupMenu = new JPopupMenu(); JMenuItem item = new JMenuItem(JavaBundle.message("project.problems.settings")); item.addActionListener(e -> JavaLensProvider.openSettings(JavaLanguage.INSTANCE, project)); popupMenu.add(item); - InlayPresentation withSettings = factory.onClick(usagesPresentation, MouseButton.Right, (e, __) -> { + InlayPresentation withSettings = factory.onClick(problemsPresentation, MouseButton.Right, (e, __) -> { popupMenu.show(e.getComponent(), e.getX(), e.getY()); return Unit.INSTANCE; }); - return factory.seq(usagesOffset, withSettings); + return factory.seq(problemsOffset, withSettings); } - private static void showUsages(@NotNull PsiMember member, @NotNull Set brokenUsages) { + private static void showProblems(@NotNull PsiMember member, @NotNull Set relatedProblems) { Project project = member.getProject(); - if (brokenUsages.size() == 1) { - PsiElement usage = brokenUsages.iterator().next(); - if (usage instanceof Navigatable) ((Navigatable)usage).navigate(true); + if (relatedProblems.size() == 1) { + PsiElement problem = relatedProblems.iterator().next(); + if (problem instanceof Navigatable) ((Navigatable)problem).navigate(true); } else { - String memberName = Objects.requireNonNull(member.getName()); + String memberName = UsageViewUtil.getLongName(member); UsageViewPresentation presentation = new UsageViewPresentation(); String title = JavaBundle.message("project.problems.window.title", memberName); - presentation.setCodeUsagesString(title); + presentation.setCodeUsagesString(JavaBundle.message("project.problems.title")); presentation.setTabName(title); presentation.setTabText(title); PsiElement[] primary = new PsiElement[]{member}; - Usage[] usages = ContainerUtil.map2Array(brokenUsages, new Usage[brokenUsages.size()], + Usage[] usages = ContainerUtil.map2Array(relatedProblems, new Usage[relatedProblems.size()], e -> UsageInfoToUsageConverter.convert(primary, new UsageInfo(e))); - UsageTarget[] usageTargets = new UsageTarget[]{new BrokenUsageTargetAdapter(member)}; + UsageTarget[] usageTargets = new UsageTarget[]{new RelatedProblemTargetAdapter(member)}; UsageViewManager usageViewManager = UsageViewManager.getInstance(project); usageViewManager.showUsages(usageTargets, usages, presentation); } @@ -125,14 +126,16 @@ public class ProjectProblemPassUtils { }); } - static @NotNull HighlightInfo createHighlightInfo(@NotNull Editor editor, @NotNull PsiElement identifier, @NotNull Set brokenUsages) { - ShowBrokenUsagesAction brokenUsagesAction = new ShowBrokenUsagesAction(brokenUsages); - return createHighlightInfo(editor, identifier, brokenUsagesAction); + static @NotNull HighlightInfo createHighlightInfo(@NotNull Editor editor, + @NotNull PsiElement identifier, + @NotNull Set relatedProblems) { + ShowRelatedProblemsAction relatedProblemsAction = new ShowRelatedProblemsAction(relatedProblems); + return createHighlightInfo(editor, identifier, relatedProblemsAction); } private static @NotNull HighlightInfo createHighlightInfo(@NotNull Editor editor, - @NotNull PsiElement identifier, - @NotNull IntentionAction action) { + @NotNull PsiElement identifier, + @NotNull IntentionAction action) { Color textColor = editor.getColorsScheme().getAttributes(CodeInsightColors.WEAK_WARNING_ATTRIBUTES).getEffectColor(); TextAttributes attributes = new TextAttributes(null, null, textColor, null, Font.PLAIN); @@ -163,7 +166,7 @@ public class ProjectProblemPassUtils { } static boolean hintsEnabled() { - return JavaLensProvider.getSettings().isShowBrokenUsages(); + return JavaLensProvider.getSettings().isShowRelatedProblems(); } public static @NotNull Map> getInlays(@NotNull Editor editor) { @@ -275,12 +278,12 @@ public class ProjectProblemPassUtils { } } - private static class ShowBrokenUsagesAction extends BaseElementAtCaretIntentionAction { + private static class ShowRelatedProblemsAction extends BaseElementAtCaretIntentionAction { - private final Set myBrokenUsages; + private final Set myRelatedProblems; - private ShowBrokenUsagesAction(Set usages) { - myBrokenUsages = usages; + private ShowRelatedProblemsAction(Set relatedProblems) { + myRelatedProblems = relatedProblems; } @Override @@ -292,7 +295,7 @@ public class ProjectProblemPassUtils { public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element) throws IncorrectOperationException { PsiMember member = PsiTreeUtil.getParentOfType(element, PsiMember.class); if (member == null) return; - showUsages(member, myBrokenUsages); + showProblems(member, myRelatedProblems); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/BrokenUsageTargetAdapter.java b/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/RelatedProblemTargetAdapter.java similarity index 95% rename from java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/BrokenUsageTargetAdapter.java rename to java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/RelatedProblemTargetAdapter.java index b3dcc47ba998..40595f34127b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/BrokenUsageTargetAdapter.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/problems/pass/RelatedProblemTargetAdapter.java @@ -16,11 +16,11 @@ import javax.swing.*; import static com.intellij.util.ObjectUtils.tryCast; -class BrokenUsageTargetAdapter implements PsiElementUsageTarget, ItemPresentation { +class RelatedProblemTargetAdapter implements PsiElementUsageTarget, ItemPresentation { private final SmartPsiElementPointer myPointer; - BrokenUsageTargetAdapter(@NotNull PsiElement element) { + RelatedProblemTargetAdapter(@NotNull PsiElement element) { myPointer = SmartPointerManager.createPointer(element); } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/problems/ProjectProblemsViewTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/problems/ProjectProblemsViewTest.kt index 167444728861..81d8ec464f8f 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/problems/ProjectProblemsViewTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/problems/ProjectProblemsViewTest.kt @@ -41,17 +41,17 @@ internal abstract class ProjectProblemsViewTest : LightJavaCodeInsightFixtureTes val rootPresentation = presentation.root val sequencePresentation = rootPresentation.content as SequencePresentation val settingsOnClickPresentation = sequencePresentation.presentations[1] as OnClickPresentation - val usagesOnHoverPresentation = settingsOnClickPresentation.presentation as OnHoverPresentation - usagesOnHoverPresentation.mouseMoved(clickEvent, point) - val usagesDelegatePresentation = usagesOnHoverPresentation.presentation as DynamicDelegatePresentation - val usagesOnClickPresentation = usagesDelegatePresentation.delegate as OnClickPresentation - usagesOnClickPresentation.mouseClicked(clickEvent, point) + val problemOnHoverPresentation = settingsOnClickPresentation.presentation as OnHoverPresentation + problemOnHoverPresentation.mouseMoved(clickEvent, point) + val problemsDelegatePresentation = problemOnHoverPresentation.presentation as DynamicDelegatePresentation + val problemsOnClickPresentation = problemsDelegatePresentation.delegate as OnClickPresentation + problemsOnClickPresentation.mouseClicked(clickEvent, point) val editor = editorManager.selectedTextEditor!! val openedFile = FileDocumentManager.getInstance().getFile(editor.document)!! if (openedFile != targetFile) { // one problem is reported in inlay, we navigated to this problem - val usagePsiFile = PsiManager.getInstance(project).findFile(openedFile)!! - val psiElement = usagePsiFile.findElementAt(editor.caretModel.offset)!! + val psiFileWithProblem = PsiManager.getInstance(project).findFile(openedFile)!! + val psiElement = psiFileWithProblem.findElementAt(editor.caretModel.offset)!! problems.add(psiElement) // restore file for the next iteration editorManager.openFile(targetFile, true) diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/ProjectProblemsViewPropertyTest.kt b/java/java-tests/testSrc/com/intellij/java/propertyBased/ProjectProblemsViewPropertyTest.kt index 890885cb2888..10c8d995577c 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/ProjectProblemsViewPropertyTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/ProjectProblemsViewPropertyTest.kt @@ -82,7 +82,7 @@ class ProjectProblemsViewPropertyTest : BaseUnivocityTest() { changedFiles.add(fileToChange.virtualFile) - val expected = findFilesWithBrokenUsages(relatedFiles, members) + val expected = findFilesWithProblems(relatedFiles, members) assertContainsElements(actual, expected) i++ @@ -231,7 +231,7 @@ class ProjectProblemsViewPropertyTest : BaseUnivocityTest() { return possibleOverride == JavaOverridingMethodsSearcher.findOverridingMethod(overrideClass, target, targetClass) } - private fun findFilesWithBrokenUsages(relatedFiles: Set, members: List): Set { + private fun findFilesWithProblems(relatedFiles: Set, members: List): Set { val psiManager = PsiManager.getInstance(myProject) val filesWithErrors = mutableSetOf() for (file in relatedFiles) { @@ -324,11 +324,11 @@ class ProjectProblemsViewPropertyTest : BaseUnivocityTest() { val presentation = constrainedPresentations[0] val rootPresentation = presentation.root val settingsOnClickPresentation = (rootPresentation.content as SequencePresentation).presentations[1] as OnClickPresentation - val usagesHoverPresentation = settingsOnClickPresentation.presentation as OnHoverPresentation - usagesHoverPresentation.mouseMoved(click, point) - val delegatePresentation = usagesHoverPresentation.presentation as DynamicDelegatePresentation - val usagesClickPresentation = delegatePresentation.delegate as OnClickPresentation - usagesClickPresentation.mouseClicked(click, point) + val problemsHoverPresentation = settingsOnClickPresentation.presentation as OnHoverPresentation + problemsHoverPresentation.mouseMoved(click, point) + val delegatePresentation = problemsHoverPresentation.presentation as DynamicDelegatePresentation + val problemsClickPresentation = delegatePresentation.delegate as OnClickPresentation + problemsClickPresentation.mouseClicked(click, point) } } diff --git a/java/openapi/resources/messages/JavaBundle.properties b/java/openapi/resources/messages/JavaBundle.properties index e824b36847f0..472a3b17bf08 100644 --- a/java/openapi/resources/messages/JavaBundle.properties +++ b/java/openapi/resources/messages/JavaBundle.properties @@ -1022,11 +1022,11 @@ postfix.template.language.level.title=Minimum language level: press.0.to.see.inheritors.of.1=Press {0} to see inheritors of {1} press.0.to.see.non.imported.classes=Press {0} to see non-imported classes pressing.0.twice.without.a.class.qualifier=Pressing {0} twice without a class qualifier would show all accessible static methods -project.problems.broken.usages={0} broken {0, choice, 0#usage|2#usages} -project.problems.window.title=Broken usages of {0} -project.problems.fix.text=Show broken usages -project.problems.fix.description=Found broken usages of ''{0}'' -project.problems.title=Broken usages +project.problems.hint.text={0} related {0, choice, 0#problem|2#problems} +project.problems.window.title=Problems Related to {0} +project.problems.fix.text=Show related problems +project.problems.fix.description=Found related problems +project.problems.title=Related problems project.problems.settings=Settings... progress.creating.class=Creating class {0} progress.title.check.applicability=Check Applicability...