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 0d651e3cb9a4..84b44292f99f 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java @@ -15,6 +15,8 @@ */ package com.intellij.codeInsight.completion; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,5 +28,8 @@ public abstract class CompletionConfidence { @Nullable public abstract Boolean shouldFocusLookup(@NotNull CompletionParameters parameters); - + @Nullable + public Boolean shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { + return null; + } } 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 dd7e941c6253..7d3dd6825fc0 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -193,6 +193,23 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { }; if (autopopup) { CommandProcessor.getInstance().runUndoTransparentAction(initCmd); + + int offset = editor.getCaretModel().getOffset(); + + PsiElement elementAt = InjectedLanguageUtil.findInjectedElementNoCommit(psiFile, offset); + if (elementAt == null) { + elementAt = psiFile.findElementAt(offset); + if (elementAt == null && offset > 0) { + elementAt = psiFile.findElementAt(offset - 1); + } + } + + Language language = elementAt != null ? PsiUtilBase.findLanguageFromElement(elementAt):psiFile.getLanguage(); + + for (CompletionConfidence confidence : CompletionConfidenceEP.forLanguage(language)) { + final Boolean result = confidence.shouldSkipAutopopup(elementAt, psiFile, offset); // TODO: Peter Lazy API + if (result == Boolean.TRUE) return; + } } else { CommandProcessor.getInstance().executeCommand(project, initCmd, null, null); }