From 7a06f6d100b1d1e620e9e491535b4f375f42e2de Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 29 Apr 2014 14:19:24 +0400 Subject: [PATCH] EA-56182 --- .../codeInsight/template/impl/ListTemplatesHandler.java | 6 ++++++ .../template/impl/LiveTemplateCompletionContributor.java | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java index 798e82ca4ed8..4236d5894bc2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java @@ -27,9 +27,11 @@ import com.intellij.codeInsight.template.CustomLiveTemplate; import com.intellij.codeInsight.template.CustomLiveTemplateBase; import com.intellij.codeInsight.template.CustomTemplateCallback; import com.intellij.codeInsight.template.TemplateManager; +import com.intellij.diagnostic.AttachmentFactory; import com.intellij.featureStatistics.FeatureUsageTracker; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ex.util.EditorUtil; @@ -79,6 +81,10 @@ public class ListTemplatesHandler implements CodeInsightActionHandler { public static Map filterTemplatesByPrefix(@NotNull Collection templates, @NotNull Editor editor, int offset, boolean fullMatch, boolean searchInDescription) { + if (offset >= editor.getDocument().getTextLength()) { + Logger.getInstance(ListTemplatesHandler.class).error("Cannot filter templates, index out of bounds. Offset: " + offset, + AttachmentFactory.createAttachment(editor.getDocument())); + } CharSequence documentText = editor.getDocument().getCharsSequence().subSequence(0, offset); String prefixWithoutDots = computeDescriptionMatchingPrefix(editor.getDocument(), offset); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateCompletionContributor.java index d9fec79a1e12..e775516aafeb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateCompletionContributor.java @@ -65,9 +65,9 @@ public class LiveTemplateCompletionContributor extends CompletionContributor { return; } - int offset = parameters.getOffset(); - final List availableTemplates = TemplateManagerImpl.listApplicableTemplates(file, offset, false); Editor editor = parameters.getEditor(); + int offset = editor.getCaretModel().getOffset(); + final List availableTemplates = TemplateManagerImpl.listApplicableTemplates(file, offset, false); final Map templates = filterTemplatesByPrefix(availableTemplates, editor, offset, false, false); if (showAllTemplates()) { final AtomicBoolean templatesShown = new AtomicBoolean(false);