From fbe1d78d5d7c0f996a74994137ac71970a1cc857 Mon Sep 17 00:00:00 2001 From: Alexey Gopachenko Date: Mon, 9 Nov 2009 18:11:53 +0300 Subject: [PATCH] Inspections #ref ancor should honor range if present. --- .../codeInsight/daemon/impl/LocalInspectionsPass.java | 5 +++-- .../intellij/codeInspection/ex/DescriptorComposer.java | 3 ++- .../codeInspection/ui/ProblemDescriptionNode.java | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index 620f03a0f3..a943ec93fe 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -24,6 +24,7 @@ import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; import com.intellij.codeInsight.intention.EmptyIntentionAction; import com.intellij.codeInspection.*; import com.intellij.codeInspection.ex.*; +import com.intellij.codeInspection.ui.ProblemDescriptionNode; import com.intellij.concurrency.JobUtil; import com.intellij.injected.editor.DocumentWindow; import com.intellij.lang.Language; @@ -444,9 +445,9 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass message = StringUtil.replace(message, "", "'"); message = StringUtil.replace(message, "", "'"); //message = message.replaceAll("<[^>]*>", ""); - String text = psiElement == null ? "" : psiElement.getText(); + String ref = ProblemDescriptionNode.extractHighlightedText(descriptor, psiElement); message = StringUtil.replace(message, "#loc", ""); - message = StringUtil.replace(message, "#ref", text); + message = StringUtil.replace(message, "#ref", ref); message = StringUtil.unescapeXml(message).trim(); return message; diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorComposer.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorComposer.java index b7b0e87ed5..217fe19278 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorComposer.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorComposer.java @@ -22,6 +22,7 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.QuickFix; import com.intellij.codeInspection.reference.RefElement; import com.intellij.codeInspection.reference.RefEntity; +import com.intellij.codeInspection.ui.ProblemDescriptionNode; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; @@ -149,7 +150,7 @@ public class DescriptorComposer extends HTMLComposerImpl { } anchor.append("\">"); - anchor.append(expression.getText().replaceAll("\\$", "\\\\\\$")); + anchor.append(ProblemDescriptionNode.extractHighlightedText(description, expression).replaceAll("\\$", "\\\\\\$")); //noinspection HardCodedStringLiteral anchor.append(""); } 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 c63a6ad069..5a9dc80eed 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/ProblemDescriptionNode.java @@ -24,6 +24,7 @@ import com.intellij.codeInspection.ex.ProblemDescriptorImpl; import com.intellij.codeInspection.reference.RefElement; import com.intellij.codeInspection.reference.RefEntity; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.FileStatus; import com.intellij.psi.PsiElement; @@ -114,7 +115,7 @@ public class ProblemDescriptionNode extends InspectionTreeNode { PsiElement psiElement = descriptor instanceof ProblemDescriptor ? ((ProblemDescriptor)descriptor).getPsiElement() : null; @NonNls String message = descriptor != null ? descriptor.getDescriptionTemplate().replaceAll("<[^>]*>", "") : ""; message = StringUtil.replace(message, "#loc", ""); - message = StringUtil.replace(message, "#ref", psiElement != null && psiElement.isValid() ? psiElement.getText() : ""); + message = StringUtil.replace(message, "#ref", extractHighlightedText(descriptor, psiElement)); final int endIndex = message.indexOf("#end"); if (endIndex > 0) { message = message.substring(0, endIndex); @@ -122,4 +123,18 @@ public class ProblemDescriptionNode extends InspectionTreeNode { message = StringUtil.unescapeXml(message); return message; } + + public static String extractHighlightedText(CommonProblemDescriptor descriptor, PsiElement psiElement) { + if (psiElement == null || !psiElement.isValid()) return ""; + String ref = psiElement.getText(); + if(descriptor instanceof ProblemDescriptorImpl) { + TextRange textRange = ((ProblemDescriptorImpl)descriptor).getTextRange(); + final TextRange elementRange = psiElement.getTextRange(); + if (textRange!=null && elementRange!=null) { + textRange = textRange.shiftRight(-elementRange.getStartOffset()); + ref = textRange.substring(ref); + } + } + return ref; + } } -- 2.11.4.GIT