From 655bd98920f4e9fedb607da9635c4607f2523d68 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 16 Jun 2016 17:22:34 +0300 Subject: [PATCH] inspection toolwindow: offline inspection result: append node for descriptor but do not allow nothing --- .../OfflineInspectionRVContentProvider.java | 7 ++---- .../OfflineProblemDescriptorNode.java | 22 ++++++++++++++----- .../ui/ProblemDescriptionNode.java | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineInspectionRVContentProvider.java b/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineInspectionRVContentProvider.java index ccc1944b0cbf..ec9123a90dce 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineInspectionRVContentProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineInspectionRVContentProvider.java @@ -178,11 +178,8 @@ public class OfflineInspectionRVContentProvider extends InspectionRVContentProvi final boolean canPackageRepeat) { InspectionToolPresentation presentation = context.getPresentation(toolWrapper); final RefElementNode elemNode = addNodeToParent(container, presentation, packageNode); - if (toolWrapper instanceof LocalInspectionToolWrapper) { - for (OfflineProblemDescriptor descriptor : ((RefEntityContainer)container).getDescriptors()) { - final OfflineProblemDescriptorNode child = OfflineProblemDescriptorNode.create(descriptor, (LocalInspectionToolWrapper)toolWrapper, presentation); - elemNode.insertByOrder(child, true); - } + for (OfflineProblemDescriptor descriptor : ((RefEntityContainer)container).getDescriptors()) { + elemNode.insertByOrder(OfflineProblemDescriptorNode.create(descriptor, toolWrapper, presentation), true); } } } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineProblemDescriptorNode.java b/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineProblemDescriptorNode.java index dda60c0f5246..696bda963437 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineProblemDescriptorNode.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/offlineViewer/OfflineProblemDescriptorNode.java @@ -25,6 +25,7 @@ import com.intellij.codeInsight.daemon.impl.DaemonProgressIndicator; import com.intellij.codeInsight.daemon.impl.analysis.HighlightingLevelManager; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.*; +import com.intellij.codeInspection.ex.InspectionToolWrapper; import com.intellij.codeInspection.ex.LocalInspectionToolWrapper; import com.intellij.codeInspection.ex.QuickFixWrapper; import com.intellij.codeInspection.offline.OfflineProblemDescriptor; @@ -49,7 +50,7 @@ import java.util.Set; public class OfflineProblemDescriptorNode extends ProblemDescriptionNode { OfflineProblemDescriptorNode(RefEntity refEntity, CommonProblemDescriptor descriptor, - @NotNull LocalInspectionToolWrapper toolWrapper, + @NotNull InspectionToolWrapper toolWrapper, @NotNull InspectionToolPresentation presentation, @NotNull OfflineProblemDescriptor offlineDescriptor) { super(refEntity, descriptor, toolWrapper, presentation, false, offlineDescriptor::getLine); @@ -60,7 +61,7 @@ public class OfflineProblemDescriptorNode extends ProblemDescriptionNode { } static OfflineProblemDescriptorNode create(@NotNull OfflineProblemDescriptor offlineDescriptor, - @NotNull LocalInspectionToolWrapper toolWrapper, + @NotNull InspectionToolWrapper toolWrapper, @NotNull InspectionToolPresentation presentation) { final RefEntity refElement = createRefElement(offlineDescriptor, presentation); final CommonProblemDescriptor descriptor = createDescriptor(refElement, offlineDescriptor, toolWrapper, presentation); @@ -81,6 +82,17 @@ public class OfflineProblemDescriptorNode extends ProblemDescriptionNode { : presentableName; } + @Override + protected boolean calculateIsValid() { + boolean isValid = super.calculateIsValid(); + if (!isValid) { + if (getDescriptor() == null && !(myToolWrapper instanceof LocalInspectionToolWrapper)) { + isValid = myElement != null && myElement.isValid(); + } + } + return isValid; + } + private static PsiElement[] getElementsIntersectingRange(PsiFile file, final int startOffset, final int endOffset) { final FileViewProvider viewProvider = file.getViewProvider(); final Set result = new LinkedHashSet(); @@ -101,16 +113,16 @@ public class OfflineProblemDescriptorNode extends ProblemDescriptionNode { @Nullable private static CommonProblemDescriptor createDescriptor(@Nullable RefEntity element, @NotNull OfflineProblemDescriptor offlineDescriptor, - @NotNull LocalInspectionToolWrapper toolWrapper, + @NotNull InspectionToolWrapper toolWrapper, @NotNull InspectionToolPresentation presentation) { - + if (!(toolWrapper instanceof LocalInspectionToolWrapper)) return null; final InspectionManager inspectionManager = InspectionManager.getInstance(presentation.getContext().getProject()); final OfflineProblemDescriptor offlineProblemDescriptor = offlineDescriptor; if (element instanceof RefElement) { final PsiElement psiElement = ((RefElement)element).getElement(); if (psiElement != null) { ProblemDescriptor descriptor = ProgressManager.getInstance().runProcess( - () -> runLocalTool(psiElement, inspectionManager, offlineProblemDescriptor, toolWrapper), new DaemonProgressIndicator()); + () -> runLocalTool(psiElement, inspectionManager, offlineProblemDescriptor, (LocalInspectionToolWrapper)toolWrapper), new DaemonProgressIndicator()); if (descriptor != null) return descriptor; } return null; diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java index 951869147ffc..89246baab4fa 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java @@ -115,7 +115,7 @@ public class ProblemDescriptionNode extends SuppressableInspectionTreeNode { @Override protected boolean calculateIsValid() { if (myDescriptor == null) return false; - if (myElement == null || myElement instanceof RefElement && !myElement.isValid()) return false; + if (myElement instanceof RefElement && !myElement.isValid()) return false; if (myDescriptor instanceof ProblemDescriptor) { final PsiElement psiElement = ((ProblemDescriptor)myDescriptor).getPsiElement(); return psiElement != null && psiElement.isValid();