From ee786f46967d6530b2d1c19f61c06bfea330f651 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 16 Feb 2017 17:29:33 +0100 Subject: [PATCH] fix completion in an empty custom-file-type file (EA-93679 - IOOBE: SegmentArrayWithData.getSegmentData) --- .../completion/CustomFileTypeCompletionTest.java | 6 ++++++ .../completion/CustomFileTypeCompletionContributor.java | 2 ++ 2 files changed, 8 insertions(+) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CustomFileTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CustomFileTypeCompletionTest.java index dd0dc3acb1ff..2a44b1e5215a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CustomFileTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CustomFileTypeCompletionTest.java @@ -42,6 +42,12 @@ public class CustomFileTypeCompletionTest extends LightCompletionTestCase { testByCount(0, new String[] { null }); } + public void testEmptyFile() throws Throwable { + configureFromFileText("a.cs", ""); + complete(); + testByCount(1, "abstract", "x"); + } + public void testPlainTextSubstitution() throws IOException { FileTypeManagerEx.getInstanceEx().registerFileType(MockLanguageFileType.INSTANCE, "xxx"); try { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CustomFileTypeCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CustomFileTypeCompletionContributor.java index 709bfd7e60eb..e4000d4e2f09 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CustomFileTypeCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CustomFileTypeCompletionContributor.java @@ -71,6 +71,8 @@ public class CustomFileTypeCompletionContributor extends CompletionContributor i private static boolean inCommentOrLiteral(CompletionParameters parameters) { HighlighterIterator iterator = ((EditorEx)parameters.getEditor()).getHighlighter().createIterator(parameters.getOffset()); + if (iterator.atEnd()) return false; + IElementType elementType = iterator.getTokenType(); if (elementType == CustomHighlighterTokenType.WHITESPACE) { iterator.retreat();