From db13b7b767b312df6058c9c7b2372baee40d90e4 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 11 Jun 2019 13:36:23 +0200 Subject: [PATCH] SSR: improve "should show problem" api GitOrigin-RevId: 790be8f55944bbf5db274c762fa8c22dc97b6b2b --- .../structuralsearch/JavaStructuralSearchProfile.java | 6 ++---- .../StructuralSearchHighlightInfoFilter.java | 11 +++++++---- .../structuralsearch/StructuralSearchProfile.java | 2 +- .../plugin/ui/StructuralSearchDialog.java | 9 +++++---- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java index 1e8fee8e4cf9..2bd9555ccdcc 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java @@ -18,8 +18,6 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.impl.source.JavaDummyHolder; -import com.intellij.psi.impl.source.PsiCodeFragmentImpl; -import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.javadoc.PsiDocToken; import com.intellij.psi.util.PsiTreeUtil; @@ -484,7 +482,7 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile { } @Override - public boolean shouldShowProblem(HighlightInfo highlightInfo, PsiFile file) { + public boolean shouldShowProblem(HighlightInfo highlightInfo, PsiFile file, PatternContext context) { if (!Registry.is("ssr.in.editor.problem.highlighting")) { return false; } @@ -514,7 +512,7 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile { return false; } final List children = PsiTreeUtil.getChildrenOfTypeAsList(file, PsiStatement.class); - if (children.size() == 1 && ((PsiCodeFragmentImpl)file).getContentElementType() == JavaElementType.STATEMENTS) { + if (children.size() == 1 && context == DEFAULT_CONTEXT) { final PsiStatement child = children.get(0); if (child == parent && (child instanceof PsiExpressionStatement || child instanceof PsiDeclarationStatement)) { // search for expression, type, annotation or symbol diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchHighlightInfoFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchHighlightInfoFilter.java index 073578166b21..beb2d336e3a0 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchHighlightInfoFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchHighlightInfoFilter.java @@ -3,9 +3,7 @@ package com.intellij.structuralsearch; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.HighlightInfoFilter; -import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.structuralsearch.plugin.ui.StructuralSearchDialog; import org.jetbrains.annotations.NotNull; @@ -22,13 +20,18 @@ public class StructuralSearchHighlightInfoFilter implements HighlightInfoFilter return true; } final Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file); - if (document == null || document.getUserData(StructuralSearchDialog.STRUCTURAL_SEARCH) == null) { + if (document == null) { + return true; + } + final String contextId = document.getUserData(StructuralSearchDialog.STRUCTURAL_SEARCH_PATTERN_CONTEXT_ID); + if (contextId == null) { return true; } final StructuralSearchProfile profile = StructuralSearchUtil.getProfileByPsiElement(file); if (profile == null) { return true; } - return profile.shouldShowProblem(highlightInfo, file); + final PatternContext context = StructuralSearchUtil.findPatternContextByID(contextId, profile); + return profile.shouldShowProblem(highlightInfo, file, context); } } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java b/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java index 42370499b1dd..cea6e84879c5 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java @@ -184,7 +184,7 @@ public abstract class StructuralSearchProfile { myProblemCallback = new SoftReference<>(callback); } - public boolean shouldShowProblem(HighlightInfo highlightInfo, PsiFile file) { + public boolean shouldShowProblem(HighlightInfo highlightInfo, PsiFile file, PatternContext context) { return true; } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java index 7e8b4ab4f1c2..2ce4a677aea3 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java @@ -111,7 +111,7 @@ public class StructuralSearchDialog extends DialogWrapper { @NonNls private static final String FILTERS_VISIBLE_STATE = "structural.search.filters.visible"; public static final Key STRUCTURAL_SEARCH_DIALOG = Key.create("STRUCTURAL_SEARCH_DIALOG"); - public static final Key STRUCTURAL_SEARCH = Key.create("STRUCTURAL_SEARCH"); + public static final Key STRUCTURAL_SEARCH_PATTERN_CONTEXT_ID = Key.create("STRUCTURAL_SEARCH_PATTERN_CONTEXT_ID"); public static final String USER_DEFINED = SSRBundle.message("new.template.defaultname"); private final SearchContext mySearchContext; @@ -196,7 +196,7 @@ public class StructuralSearchDialog extends DialogWrapper { final StructuralSearchProfile profile = StructuralSearchUtil.getProfileByFileType(myFileType); assert profile != null; final Document document = UIUtil.createDocument(getProject(), myFileType, myDialect, myPatternContext, "", profile); - document.putUserData(STRUCTURAL_SEARCH, Boolean.TRUE); + document.putUserData(STRUCTURAL_SEARCH_PATTERN_CONTEXT_ID, (myPatternContext == null) ? "" : myPatternContext.getId()); final EditorTextField textField = new EditorTextField(document, getProject(), myFileType, false, false) { @Override @@ -542,11 +542,12 @@ public class StructuralSearchDialog extends DialogWrapper { final Document searchDocument = UIUtil.createDocument(getProject(), myFileType, myDialect, myPatternContext, mySearchCriteriaEdit.getText(), profile); mySearchCriteriaEdit.setNewDocumentAndFileType(myFileType, searchDocument); - searchDocument.putUserData(STRUCTURAL_SEARCH, Boolean.TRUE); + final String contextId = (myPatternContext == null) ? "" : myPatternContext.getId(); + searchDocument.putUserData(STRUCTURAL_SEARCH_PATTERN_CONTEXT_ID, contextId); final Document replaceDocument = UIUtil.createDocument(getProject(), myFileType, myDialect, myPatternContext, myReplaceCriteriaEdit.getText(), profile); myReplaceCriteriaEdit.setNewDocumentAndFileType(myFileType, replaceDocument); - replaceDocument.putUserData(STRUCTURAL_SEARCH, Boolean.TRUE); + replaceDocument.putUserData(STRUCTURAL_SEARCH_PATTERN_CONTEXT_ID, contextId); myFilterPanel.setProfile(profile); initiateValidation(); }