diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionCompletionConfidence.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionCompletionConfidence.java index 6b77a6dcb752..35cbc362a0cb 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionCompletionConfidence.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/JavaReflectionCompletionConfidence.java @@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author Konstantin Bulenkov @@ -35,12 +34,10 @@ public class JavaReflectionCompletionConfidence extends CompletionConfidence { @NotNull @Override - public ThreeState shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { - if (contextElement != null) { - final PsiElement literal = contextElement.getParent(); - if (literal != null && JavaReflectionReferenceContributor.PATTERN.accepts(literal)) { - return ThreeState.NO; - } + public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { + final PsiElement literal = contextElement.getParent(); + if (literal != null && JavaReflectionReferenceContributor.PATTERN.accepts(literal)) { + return ThreeState.NO; } return super.shouldSkipAutopopup(contextElement, psiFile, offset); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java index 9a833e215d1f..10efb39d0846 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java @@ -19,7 +19,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author peter @@ -30,7 +29,7 @@ public abstract class CompletionConfidence { public abstract ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters); @NotNull - public ThreeState shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { + public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { return ThreeState.UNSURE; } } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/SkipAutopopupInStrings.java b/platform/lang-api/src/com/intellij/codeInsight/completion/SkipAutopopupInStrings.java index 699667024930..7b50882ea357 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/SkipAutopopupInStrings.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/SkipAutopopupInStrings.java @@ -25,7 +25,6 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtilBase; import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author peter @@ -39,19 +38,12 @@ public class SkipAutopopupInStrings extends CompletionConfidence { @NotNull @Override - public ThreeState shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { - if (contextElement != null) { - ParserDefinition definition = LanguageParserDefinitions.INSTANCE.forLanguage(PsiUtilBase.getLanguageAtOffset(psiFile, offset)); - if (definition != null) { - if (isStringLiteral(contextElement, definition) || isStringLiteral(contextElement.getParent(), definition)) { - return ThreeState.YES; - } - if (offset > 0) { - PsiElement prev = psiFile.findElementAt(offset - 1); - if (prev != null && (isStringLiteralWithError(prev, definition) || isStringLiteralWithError(prev.getParent(), definition))) { - return ThreeState.YES; - } - } + public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { + ParserDefinition definition = LanguageParserDefinitions.INSTANCE.forLanguage(PsiUtilBase.getLanguageAtOffset(psiFile, offset)); + if (definition != null) { + if (isStringLiteral(contextElement, definition) || isStringLiteral(contextElement.getParent(), definition) || + isStringLiteralWithError(contextElement, definition) || isStringLiteralWithError(contextElement.getParent(), definition)) { + return ThreeState.YES; } } 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 2e1333b0919c..c5ed564d4f56 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -221,17 +221,18 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { CommandProcessor.getInstance().runUndoTransparentAction(initCmd); int offset = editor.getCaretModel().getOffset(); - int psiOffset = Math.max(0, offset); + int psiOffset = Math.max(0, offset - 1); PsiElement elementAt = InjectedLanguageUtil.findInjectedElementNoCommit(psiFile, psiOffset); if (elementAt == null) { elementAt = psiFile.findElementAt(psiOffset); } + if (elementAt == null) return; - Language language = elementAt != null ? PsiUtilBase.findLanguageFromElement(elementAt):psiFile.getLanguage(); + Language language = PsiUtilBase.findLanguageFromElement(elementAt); for (CompletionConfidence confidence : CompletionConfidenceEP.forLanguage(language)) { - final ThreeState result = confidence.shouldSkipAutopopup(elementAt, psiFile, offset); // TODO: Peter Lazy API + final ThreeState result = confidence.shouldSkipAutopopup(elementAt, psiFile, offset); if (result == ThreeState.YES) return; if (result == ThreeState.NO) break; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionConfidence.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionConfidence.java index ededc60a1f96..4df7481c0b13 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionConfidence.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionConfidence.java @@ -19,7 +19,6 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.console.GroovyShellAction; import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; @@ -78,7 +77,7 @@ public class GroovyCompletionConfidence extends CompletionConfidence { @NotNull @Override - public ThreeState shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { + public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { if (PsiUtil.isLeafElementOfType(contextElement, TokenSets.STRING_LITERALS)) { @SuppressWarnings("ConstantConditions") PsiElement parent = contextElement.getParent();