From 1d7ecf3c722a60618dac89b56d93e5444986b826 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 8 Aug 2012 11:25:37 +0200 Subject: [PATCH] not so eager space after instanceof --- .../completion/JavaCompletionContributor.java | 2 +- .../completion/JavaCompletionData.java | 21 ++++++++----------- .../keywords/spaceAfterInstanceof.java | 7 +++++++ .../keywords/spaceAfterInstanceof_after.java | 7 +++++++ .../completion/KeywordCompletionTest.java | 1 + 5 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java create mode 100644 java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index d7215f034ae9..6344cc8dfe30 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -127,7 +127,7 @@ public class JavaCompletionContributor extends CompletionContributor { if (JavaCompletionData.AFTER_TRY_BLOCK.isAcceptable(position, position) || JavaCompletionData.START_SWITCH.accepts(position) || - JavaCompletionData.INSTANCEOF_PLACE.isAcceptable(position, position) || + JavaCompletionData.isInstanceofPlace(position) || JavaCompletionData.isAfterPrimitiveOrArrayType(position)) { return null; } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 35fe9016630d..521a7228a96a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -50,7 +50,7 @@ public class JavaCompletionData extends JavaAwareCompletionData { private static final PsiElementPattern AFTER_DOT = psiElement().afterLeaf("."); - public static final LeftNeighbour INSTANCEOF_PLACE = new LeftNeighbour(new OrFilter( + private static final LeftNeighbour INSTANCEOF_PLACE = new LeftNeighbour(new OrFilter( new ReferenceOnFilter(new ClassFilter(PsiVariable.class)), new TextFilter(PsiKeyword.THIS), new AndFilter(new TextFilter(")"), new ParentElementFilter(new AndFilter( @@ -302,17 +302,6 @@ public class JavaCompletionData extends JavaAwareCompletionData { registerVariant(variant); } - { -// instanceof keyword - final ElementFilter position = INSTANCEOF_PLACE; - final CompletionVariant variant = new CompletionVariant(position); - variant.includeScopeClass(PsiExpression.class, true); - variant.includeScopeClass(PsiMethod.class); - variant.addCompletion(PsiKeyword.INSTANCEOF); - - registerVariant(variant); - } - { // Keyword completion in returns !!!! final CompletionVariant variant = new CompletionVariant(PsiMethod.class, new LeftNeighbour(new TextFilter(PsiKeyword.RETURN))); @@ -492,6 +481,10 @@ public class JavaCompletionData extends JavaAwareCompletionData { result.addElement(TailTypeDecorator.withTail(createKeyword(position, PsiKeyword.FINAL), TailType.HUMBLE_SPACE_BEFORE_WORD)); } + if (isInstanceofPlace(position)) { + result.addElement(TailTypeDecorator.withTail(createKeyword(position, PsiKeyword.INSTANCEOF), TailType.HUMBLE_SPACE_BEFORE_WORD)); + } + if (isSuitableForClass(position)) { for (String s : ModifierChooser.getKeywords(position)) { result.addElement(new OverrideableSpace(createKeyword(position, s), TailType.HUMBLE_SPACE_BEFORE_WORD)); @@ -523,6 +516,10 @@ public class JavaCompletionData extends JavaAwareCompletionData { } } + public static boolean isInstanceofPlace(PsiElement position) { + return INSTANCEOF_PLACE.isAcceptable(position, position); + } + public static boolean isSuitableForClass(PsiElement position) { if (psiElement().afterLeaf("@").accepts(position) || PsiTreeUtil.getNonStrictParentOfType(position, PsiLiteralExpression.class, PsiComment.class) != null) { diff --git a/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java new file mode 100644 index 000000000000..53904b6bb5d0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof.java @@ -0,0 +1,7 @@ +class Foo { + void test(Object o) { + if (o inst Foo) { + + } + } +} diff --git a/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java new file mode 100644 index 000000000000..584007dd613f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/spaceAfterInstanceof_after.java @@ -0,0 +1,7 @@ +class Foo { + void test(Object o) { + if (o instanceof Foo) { + + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java index c55902596223..fddf4537e278 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java @@ -98,6 +98,7 @@ public class KeywordCompletionTest extends LightCompletionTestCase { public void testNullInMethodCall() throws Exception { doTest(true); } public void testNullInMethodCall2() throws Exception { doTest(false); } public void testNewInMethodRefs() throws Exception { doTest(false); } + public void testSpaceAfterInstanceof() throws Exception { doTest(false); } public void testAbstractInInterface() throws Exception { doTest(1, "abstract"); } public void testCharInAnnotatedParameter() throws Exception { doTest(1, "char"); } public void testReturnInTernary() throws Exception { doTest(1, "return"); }