From 55914a27afa034cda89d56a9a357b8b492c03ff8 Mon Sep 17 00:00:00 2001 From: peter <peter@jetbrains.com> Date: Tue, 17 Apr 2018 15:46:24 +0200 Subject: [PATCH] support completion at the end of file with no dummy identifier (IDEA-188584) --- .../codeInsight/completion/CodeCompletionHandlerBase.java | 6 ++---- .../codeInsight/completion/CompletionAssertions.java | 6 +----- .../completion/CompletionInitializationUtil.java | 4 ++++ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index b143784fae04..94563bfb211f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -249,14 +249,12 @@ public class CodeCompletionHandlerBase { if (indicator.blockingWaitForFinish(ourAutoInsertItemTimeout)) { try { indicator.getLookup().refreshUi(true, false); + completionFinished(indicator, hasModifiers); } - catch (Exception e) { + catch (Throwable e) { CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion); LOG.error(e); - return; } - - completionFinished(indicator, hasModifiers); return; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java index 1221ecd26389..daaaf2d5587f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java @@ -120,7 +120,7 @@ class CompletionAssertions { static void assertHostInfo(PsiFile hostCopy, OffsetMap hostMap) { PsiUtilCore.ensureValid(hostCopy); - if (hostMap.getOffset(CompletionInitializationContext.START_OFFSET) >= hostCopy.getTextLength()) { + if (hostMap.getOffset(CompletionInitializationContext.START_OFFSET) > hostCopy.getTextLength()) { throw new AssertionError("startOffset outside the host file: " + hostMap.getOffset(CompletionInitializationContext.START_OFFSET) + "; " + hostCopy); } } @@ -140,10 +140,6 @@ class CompletionAssertions { createAstAttachment(fileCopy, originalFile)); } - if (fileCopy.findElementAt(offset) != insertedElement) { - throw new AssertionError("wrong offset"); - } - final TextRange range = insertedElement.getTextRange(); CharSequence fileCopyText = fileCopy.getViewProvider().getContents(); if ((range.getEndOffset() > fileCopyText.length()) || diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java index 275c88abaa4e..dfffb6e12b24 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java @@ -21,6 +21,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.impl.PsiFileEx; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtilBase; import com.intellij.reference.SoftReference; import org.jetbrains.annotations.NotNull; @@ -156,6 +157,9 @@ public class CompletionInitializationUtil { @NotNull private static PsiElement findCompletionPositionLeaf(OffsetsInFile offsets, int offset, PsiFile originalFile) { PsiElement insertedElement = offsets.getFile().findElementAt(offset); + if (insertedElement == null && offsets.getFile().getTextLength() == 0) { + insertedElement = PsiTreeUtil.getDeepestLast(offsets.getFile()); + } CompletionAssertions.assertCompletionPositionPsiConsistent(offsets, offset, originalFile, insertedElement); return insertedElement; } -- GitLab