IDEA-202914 mess after selection

This commit is contained in:
Dmitry Avdeev
2018-11-27 13:01:28 +03:00
parent e2eb7d5e84
commit 9750e0e580
2 changed files with 19 additions and 11 deletions
@@ -5,9 +5,10 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.codeInsight.template.*;
import com.intellij.psi.*;
import com.intellij.structuralsearch.impl.matcher.CompiledPattern;
import com.intellij.structuralsearch.impl.matcher.compiler.PatternCompiler;
import com.intellij.structuralsearch.impl.matcher.MatcherImplUtil;
import com.intellij.structuralsearch.impl.matcher.PatternTreeContext;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -60,16 +61,13 @@ public class StructuralSearchTemplateBuilder {
MatchOptions matchOptions = new MatchOptions();
String text = myPsiFile.getText();
matchOptions.setSearchPattern(text);
CompiledPattern pattern = PatternCompiler.compilePattern(myPsiFile.getProject(), matchOptions, false);
if (pattern == null)
return myBuilder;
PsiElement current = pattern.getNodes().current();
if (current != null) {
myShift = current.getTextRange().getStartOffset();
current.accept(visitor);
PsiElement[] elements =
MatcherImplUtil.createTreeFromText(text, PatternTreeContext.Block, myPsiFile.getFileType(), myPsiFile.getProject());
PsiElement psiElement = ContainerUtil.find(elements, element -> !(element instanceof PsiWhiteSpace));
if (psiElement != null) {
myShift = 2;
psiElement.accept(visitor);
}
return myBuilder;
}
@@ -24,6 +24,16 @@ public class SSTemplateBuilderTest extends LightCodeInsightFixtureTestCase {
assertEquals(1, template.getSegmentsCount());
}
public void testStartingWhitespace() {
doTest(" List<Integer> list = null;", " $Class1$<$Class2$> list = null;");
}
public void testInnerWhiteSpace() {
doTest("try {\n" +
" List<Integer> list = null;} finally {}", "try {\n" +
" $Class1$<$Class2$> list = null;} finally {}");
}
private Template doTest(String text, String expected) {
PsiFile psiFile = myFixture.configureByText(JavaFileType.INSTANCE, text);
TemplateBuilderImpl builder = (TemplateBuilderImpl)new StructuralSearchTemplateBuilder(getFile()).buildTemplate();