mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Problems view: rename 'broken usages' to 'related problems'
GitOrigin-RevId: b1cfcd7a9d1c79697a4b17d05525f54c5c0d4b29
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d95632bb99
commit
83cb591257
+9
-9
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
+9
-9
@@ -63,9 +63,9 @@ public class ProjectProblemPass extends EditorBoundHighlightingPass {
|
||||
Map<PsiMember, ScopedMember> changes = new SmartHashMap<>();
|
||||
problems.forEach((curMember, problem) -> {
|
||||
ScopedMember prevMember = problem.prevMember;
|
||||
Set<PsiElement> brokenUsages = problem.brokenUsages;
|
||||
Set<PsiElement> 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<PsiElement> brokenUsages,
|
||||
@NotNull Set<PsiElement> relatedProblems,
|
||||
@NotNull Map<PsiMember, EditorInfo> 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<PsiElement> brokenUsages;
|
||||
private final Set<PsiElement> relatedProblems;
|
||||
|
||||
private Problem(ScopedMember prevMember, Set<PsiElement> brokenUsages) {
|
||||
private Problem(ScopedMember prevMember, Set<PsiElement> relatedProblems) {
|
||||
this.prevMember = prevMember;
|
||||
this.brokenUsages = brokenUsages;
|
||||
this.relatedProblems = relatedProblems;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+28
-25
@@ -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<PsiElement> brokenUsages) {
|
||||
@NotNull Set<PsiElement> 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<PsiElement> brokenUsages) {
|
||||
private static void showProblems(@NotNull PsiMember member, @NotNull Set<PsiElement> 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<PsiElement> brokenUsages) {
|
||||
ShowBrokenUsagesAction brokenUsagesAction = new ShowBrokenUsagesAction(brokenUsages);
|
||||
return createHighlightInfo(editor, identifier, brokenUsagesAction);
|
||||
static @NotNull HighlightInfo createHighlightInfo(@NotNull Editor editor,
|
||||
@NotNull PsiElement identifier,
|
||||
@NotNull Set<PsiElement> 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<PsiMember, Inlay<?>> 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<PsiElement> myBrokenUsages;
|
||||
private final Set<PsiElement> myRelatedProblems;
|
||||
|
||||
private ShowBrokenUsagesAction(Set<PsiElement> usages) {
|
||||
myBrokenUsages = usages;
|
||||
private ShowRelatedProblemsAction(Set<PsiElement> 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
|
||||
|
||||
+2
-2
@@ -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<PsiElement> myPointer;
|
||||
|
||||
BrokenUsageTargetAdapter(@NotNull PsiElement element) {
|
||||
RelatedProblemTargetAdapter(@NotNull PsiElement element) {
|
||||
myPointer = SmartPointerManager.createPointer(element);
|
||||
}
|
||||
|
||||
+7
-7
@@ -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)
|
||||
|
||||
+7
-7
@@ -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<VirtualFile>, members: List<ScopedMember>): Set<VirtualFile> {
|
||||
private fun findFilesWithProblems(relatedFiles: Set<VirtualFile>, members: List<ScopedMember>): Set<VirtualFile> {
|
||||
val psiManager = PsiManager.getInstance(myProject)
|
||||
val filesWithErrors = mutableSetOf<VirtualFile>()
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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...
|
||||
|
||||
Reference in New Issue
Block a user