From 677a9b9606d85ea5486f285301a1db0eaba2d740 Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Fri, 3 Aug 2012 16:12:56 +0400 Subject: [PATCH] IDEA-89670 Groovy: 'instanceof' keyword is not exist in completion variants --- .../lang/completion/GroovyCompletionData.java | 4 ++-- .../lang/completion/GroovyCompletionUtil.java | 19 ++++++++++++++----- .../completion/KeywordCompletionTest.groovy | 3 ++- .../oldCompletion/keyword/instanceOf.test | 3 +++ 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 plugins/groovy/testdata/groovy/oldCompletion/keyword/instanceOf.test diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java index a647582f107a..c641b7369b69 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java @@ -570,8 +570,8 @@ public class GroovyCompletionData { return true; } if (context.getParent() instanceof GrReferenceExpression && - GroovyCompletionUtil.nearestLeftSibling(context.getParent()) instanceof PsiErrorElement && - GroovyCompletionUtil.endsWithExpression(GroovyCompletionUtil.nearestLeftSibling(context.getParent()).getPrevSibling())) { + GroovyCompletionUtil.nearestLeftLeaf(context) instanceof PsiErrorElement && + GroovyCompletionUtil.endsWithExpression(GroovyCompletionUtil.nearestLeftLeaf(context).getPrevSibling())) { return true; } if (context.getParent() instanceof PsiErrorElement && diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java index 6605553c6aec..1ea758aaff80 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java @@ -39,10 +39,7 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; -import com.intellij.psi.util.InheritanceUtil; -import com.intellij.psi.util.PsiFormatUtil; -import com.intellij.psi.util.PsiFormatUtilBase; -import com.intellij.psi.util.TypeConversionUtil; +import com.intellij.psi.util.*; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.CollectionFactory; @@ -91,7 +88,7 @@ public class GroovyCompletionUtil { } /** - * Return true if last element of curren statement is expression + * Return true if last element of current statement is expression * * @param statement * @return @@ -119,6 +116,18 @@ public class GroovyCompletionUtil { return elem; } + @Nullable + public static PsiElement nearestLeftLeaf(PsiElement elem) { + elem = PsiTreeUtil.prevLeaf(elem); + while (elem != null && + (elem instanceof PsiWhiteSpace || + elem instanceof PsiComment || + mNLS.equals(elem.getNode().getElementType()))) { + elem = PsiTreeUtil.prevLeaf(elem); + } + return elem; + } + /** * Shows whether keyword may be placed as a new statement beginning * diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy index a3934f772f81..cbdc73e05d42 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy @@ -89,8 +89,9 @@ public class KeywordCompletionTest extends CompletionTestBase { void testPrimitiveTypes() { doTest() } void testIncompleteConstructor() { doTest() } void testAtInterface() { doTest() } + void testInstanceOf() { doTest() } - String basePath = "${TestUtils.testDataPath}groovy/oldCompletion/keyword" + String basePath = TestUtils.testDataPath + 'groovy/oldCompletion/keyword' @Override protected boolean addReferenceVariants() { diff --git a/plugins/groovy/testdata/groovy/oldCompletion/keyword/instanceOf.test b/plugins/groovy/testdata/groovy/oldCompletion/keyword/instanceOf.test new file mode 100644 index 000000000000..752d4d689418 --- /dev/null +++ b/plugins/groovy/testdata/groovy/oldCompletion/keyword/instanceOf.test @@ -0,0 +1,3 @@ +if (!(a ins)) +----- +instanceof \ No newline at end of file