From de144ef6a0978e8771be6cfef7f9185ed51be295 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 14 Jun 2019 20:40:28 +0200 Subject: [PATCH] WordCompletionContributor: don't fail when invoked before literal value start (EA-144730) and don't allocate huge strings GitOrigin-RevId: f09241ba70c15877a7aa3e15267ebbe8baa99eae --- .../codeInsight/completion/WordCompletionContributor.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java index 580e4932cdd0..164ac1551d49 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java @@ -100,9 +100,12 @@ public class WordCompletionContributor extends CompletionContributor implements if (manipulator == null) { return; } - int offset = manipulator.getRangeInElement(localString).getStartOffset(); + int valueStart = manipulator.getRangeInElement(localString).getStartOffset() + localString.getTextRange().getStartOffset(); + if (valueStart > parameters.getOffset()) { + return; + } PsiFile file = position.getContainingFile(); - String prefix = file.getText().substring(offset + localString.getTextRange().getStartOffset(), parameters.getOffset()); + String prefix = file.getViewProvider().getContents().subSequence(valueStart, parameters.getOffset()).toString(); CompletionResultSet fullStringResult = result.withPrefixMatcher(new PlainPrefixMatcher(prefix)); file.accept(new PsiRecursiveElementWalkingVisitor() { @Override