From 576ac2eac6dff7f3e4be155c04d4e45b3f273f31 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 11 Nov 2010 20:03:20 +0300 Subject: [PATCH] IDEA-60891 flex: (automatic) code completion should not suggest language keywords inside comments WI-3734 PhpStorm tries show automplete window inside string in javascript file -> exception and editor became frozen for ~10 seconds --- .../completion/CompletionConfidence.java | 7 ++++++- .../completion/CodeCompletionHandlerBase.java | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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); }