From 83a67cdaa938b0934f28b0803404f4bef2ae7304 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 20 Nov 2019 14:24:01 +0100 Subject: [PATCH] SSR: keep formatting when complete modifier list is reused in replacement GitOrigin-RevId: 27cc6d2e2054d8b5914fff4f90e987128ec40a37 --- .../structuralsearch/JavaReplaceHandler.java | 4 ++++ .../structuralsearch/StructuralReplaceTest.java | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaReplaceHandler.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaReplaceHandler.java index a664a0f02010..f56949bbb8c4 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaReplaceHandler.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaReplaceHandler.java @@ -353,6 +353,10 @@ public class JavaReplaceHandler extends StructuralReplaceHandler { if (originalModifierList == null || queryModifierList == null || replacementModifierList == null) { return; } + if (queryModifierList.getTextLength() == 0 && replacementModifierList.getTextLength() == 0) { + replacementModifierList.replace(originalModifierList); + return; + } final List unmatchedAnnotations = originalModifierList.getUserData(GlobalMatchingVisitor.UNMATCHED_ELEMENTS_KEY); final PsiElement anchor = replacementModifierList.getFirstChild(); boolean append = (anchor == null); diff --git a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralReplaceTest.java b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralReplaceTest.java index 370a6c747e08..6b09d8546da0 100644 --- a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralReplaceTest.java +++ b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralReplaceTest.java @@ -2767,4 +2767,17 @@ public class StructuralReplaceTest extends StructuralReplaceTestCase { "}", replace(in, "'_Instance?.'_MethodCall('_arguments*)", "$Instance$.$MethodCall$($arguments$)", true)); } + + public void testKeepModifierFormatting() { + String in = "@Deprecated\n" + + "public class X {}"; + final String what = "class '_X {}"; + final String replacement = "/** comment */\n" + + "class $X$ {}"; + final String expected = "/** comment */\n" + + "@Deprecated\n" + + "public class X {}"; + assertEquals("keep newline in modifier list", + expected, replace(in, what, replacement, true)); + } } \ No newline at end of file