diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/AlwaysFocusLookup.java b/platform/lang-api/src/com/intellij/codeInsight/completion/AlwaysFocusLookup.java index 028cb9a5f8b0..c3633d607d64 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/AlwaysFocusLookup.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/AlwaysFocusLookup.java @@ -15,14 +15,16 @@ */ package com.intellij.codeInsight.completion; +import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; /** * @author peter */ public class AlwaysFocusLookup extends CompletionConfidence { + @NotNull @Override - public Boolean shouldFocusLookup(@NotNull CompletionParameters parameters) { - return true; + public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) { + return ThreeState.YES; } } 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 84b44292f99f..9a833e215d1f 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionConfidence.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.completion; 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; @@ -25,11 +26,11 @@ import org.jetbrains.annotations.Nullable; */ public abstract class CompletionConfidence { - @Nullable - public abstract Boolean shouldFocusLookup(@NotNull CompletionParameters parameters); + @NotNull + public abstract ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters); - @Nullable - public Boolean shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { - return null; + @NotNull + public ThreeState shouldSkipAutopopup(@Nullable PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { + return ThreeState.UNSURE; } } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedComments.java b/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedComments.java index 0372a0e00941..0a79233d03ad 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedComments.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedComments.java @@ -17,17 +17,19 @@ package com.intellij.codeInsight.completion; import com.intellij.psi.PsiComment; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; /** * @author peter */ public class UnfocusedComments extends CompletionConfidence { + @NotNull @Override - public Boolean shouldFocusLookup(@NotNull CompletionParameters parameters) { + public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) { if (PsiTreeUtil.getParentOfType(parameters.getPosition(), PsiComment.class) != null) { - return false; + return ThreeState.NO; } - return null; + return ThreeState.UNSURE; } } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedNameIdentifier.java b/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedNameIdentifier.java index f0127bba878c..bd59deb551f3 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedNameIdentifier.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/UnfocusedNameIdentifier.java @@ -17,27 +17,29 @@ package com.intellij.codeInsight.completion; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNameIdentifierOwner; +import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; /** * @author peter */ public class UnfocusedNameIdentifier extends CompletionConfidence { + @NotNull @Override - public Boolean shouldFocusLookup(@NotNull CompletionParameters parameters) { + public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) { final PsiElement position = parameters.getPosition(); final PsiElement parent = position.getParent(); if (parent instanceof PsiNameIdentifierOwner) { final PsiElement nameIdentifier = ((PsiNameIdentifierOwner)parent).getNameIdentifier(); if (nameIdentifier == position) { - return false; + return ThreeState.NO; } if (nameIdentifier != null && position.getTextRange().equals(nameIdentifier.getTextRange())) { //sometimes name identifiers are non-physical (e.g. Groovy) - return false; + return ThreeState.NO; } } - return null; + return ThreeState.UNSURE; } } 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 7d3dd6825fc0..776f5946c8c4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -68,6 +68,7 @@ import com.intellij.psi.util.PsiUtilBase; import com.intellij.reference.SoftReference; import com.intellij.ui.LightweightHint; import com.intellij.util.Consumer; +import com.intellij.util.ThreeState; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.messages.MessageBusConnection; import org.jetbrains.annotations.NotNull; @@ -207,8 +208,9 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { 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; + final ThreeState result = confidence.shouldSkipAutopopup(elementAt, psiFile, offset); // TODO: Peter Lazy API + if (result == ThreeState.YES) return; + if (result == ThreeState.NO) break; } } else { CommandProcessor.getInstance().executeCommand(project, initCmd, null, null); @@ -224,9 +226,9 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { final Language language = PsiUtilBase.getLanguageAtOffset(parameters.getPosition().getContainingFile(), parameters.getOffset()); for (CompletionConfidence confidence : CompletionConfidenceEP.forLanguage(language)) { - final Boolean result = confidence.shouldFocusLookup(parameters); - if (result != null) { - return result; + final ThreeState result = confidence.shouldFocusLookup(parameters); + if (result != ThreeState.UNSURE) { + return result == ThreeState.YES; } } return false; 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 b00f3dcb37c2..2e55d0ca097d 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 @@ -15,6 +15,7 @@ package org.jetbrains.plugins.groovy.lang.completion; import com.intellij.codeInsight.completion.CompletionConfidence; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.psi.PsiElement; +import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; @@ -23,19 +24,20 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrRefere * @author peter */ public class GroovyCompletionConfidence extends CompletionConfidence { + @NotNull @Override - public Boolean shouldFocusLookup(@NotNull CompletionParameters parameters) { + public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) { final PsiElement position = parameters.getPosition(); if (position.getParent() instanceof GrReferenceExpression) { final GrExpression expression = ((GrReferenceExpression)position.getParent()).getQualifierExpression(); if (expression == null) { - return true; + return ThreeState.YES; } if (expression.getType() == null) { - return false; + return ThreeState.NO; } - return true; + return ThreeState.YES; } - return null; + return ThreeState.UNSURE; } } diff --git a/xml/impl/resources/com/intellij/codeInsight/completion/XmlNameCompletionConfidence.java b/xml/impl/resources/com/intellij/codeInsight/completion/XmlNameCompletionConfidence.java index 8693c214d1b5..77a54ecf577c 100644 --- a/xml/impl/resources/com/intellij/codeInsight/completion/XmlNameCompletionConfidence.java +++ b/xml/impl/resources/com/intellij/codeInsight/completion/XmlNameCompletionConfidence.java @@ -3,21 +3,23 @@ package com.intellij.codeInsight.completion; import com.intellij.lang.ASTNode; import com.intellij.psi.tree.IElementType; import com.intellij.psi.xml.XmlTokenType; +import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; /** * @author peter */ public class XmlNameCompletionConfidence extends CompletionConfidence{ + @NotNull @Override - public Boolean shouldFocusLookup(@NotNull CompletionParameters parameters) { + public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) { final ASTNode node = parameters.getPosition().getNode(); - if (node == null) return null; + if (node == null) return ThreeState.UNSURE; final IElementType elementType = node.getElementType(); if (elementType == XmlTokenType.XML_NAME || elementType == XmlTokenType.XML_TAG_NAME) { - return true; + return ThreeState.YES; } - return null; + return ThreeState.UNSURE; } }