From d71d1b04192e39ac368d8b82d4893627d1b90abd Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Fri, 11 Sep 2009 16:10:02 +0400 Subject: [PATCH] dumb-aware completion offsets calculation (IDEADEV-40285) --- .../CompletionInitializationContext.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionInitializationContext.java b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionInitializationContext.java index 5e7dcd8b589d..4f30bb03a04b 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionInitializationContext.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionInitializationContext.java @@ -7,6 +7,7 @@ package com.intellij.codeInsight.completion; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.SelectionModel; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import org.jetbrains.annotations.NonNls; @@ -43,19 +44,25 @@ public class CompletionInitializationContext { final int selectionEndOffset = selectionModel.hasSelection() ? selectionModel.getSelectionEnd() : caretOffset; myOffsetMap.addOffset(SELECTION_END_OFFSET, selectionEndOffset); + myOffsetMap.addOffset(IDENTIFIER_END_OFFSET, findIdentifierEnd(file, selectionEndOffset)); + } - final PsiReference reference = file.findReferenceAt(selectionEndOffset); - if(reference != null){ - myOffsetMap.addOffset(IDENTIFIER_END_OFFSET, - reference.getElement().getTextRange().getStartOffset() + reference.getRangeInElement().getEndOffset()); - } else { - final String text = file.getText(); - int idEnd = selectionEndOffset; - while (idEnd < text.length() && Character.isJavaIdentifierPart(text.charAt(idEnd))) { - idEnd++; + private static int findIdentifierEnd(PsiFile file, int selectionEndOffset) { + try { + final PsiReference reference = file.findReferenceAt(selectionEndOffset); + if(reference != null){ + return reference.getElement().getTextRange().getStartOffset() + reference.getRangeInElement().getEndOffset(); } - myOffsetMap.addOffset(IDENTIFIER_END_OFFSET, idEnd); } + catch (IndexNotReadyException ignored) { + } + + final String text = file.getText(); + int idEnd = selectionEndOffset; + while (idEnd < text.length() && Character.isJavaIdentifierPart(text.charAt(idEnd))) { + idEnd++; + } + return idEnd; } public void setFileCopyPatcher(@NotNull final FileCopyPatcher fileCopyPatcher) {