diff --git a/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt index 04fb7390997..3876157593c 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt @@ -179,7 +179,7 @@ object KeywordCompletion { while (child != position) { if (child is JetDeclaration) { if (child == prevDeclaration) { - builder.append(child!!.getText()) //TODO: skip code blocks, class body inside, + builder.appendReducedText(child!!) } } else { @@ -190,6 +190,23 @@ object KeywordCompletion { } } + private fun StringBuilder.appendReducedText(element: PsiElement) { + var child = element.getFirstChild() + if (child == null) { + append(element.getText()!!) + } + else { + while (child != null) { + when (child) { + is JetBlockExpression, is JetClassBody -> append("{}") + else -> appendReducedText(child) + } + + child = child.getNextSibling() + } + } + } + private fun PsiElement.getStartOffsetInAncestor(ancestor: PsiElement): Int { val parent = getParent()!! return if (parent == ancestor) diff --git a/idea/testData/completion/keywords/AfterClasses.kt b/idea/testData/completion/keywords/AfterClasses.kt new file mode 100644 index 00000000000..e40d8fb0c42 --- /dev/null +++ b/idea/testData/completion/keywords/AfterClasses.kt @@ -0,0 +1,38 @@ +class A { + fun foo() { + bar() + } +} + +class B { + fun bar() { + foo() + } +} + + + +// EXIST: abstract +// EXIST: annotation +// EXIST: class +// EXIST: enum +// EXIST: final +// EXIST: fun +// EXIST: in +/*why?*/ +// EXIST: inner +// EXIST: internal +// EXIST: object +// EXIST: open +// EXIST: out +/*why?*/ +// EXIST: override +// EXIST: private +// EXIST: protected +// EXIST: public +// EXIST: trait +// EXIST: val +// EXIST: var +// EXIST: vararg +/*why?*/ +// NUMBER: 20 diff --git a/idea/testData/completion/keywords/AfterFuns.kt b/idea/testData/completion/keywords/AfterFuns.kt new file mode 100644 index 00000000000..c147bc4047c --- /dev/null +++ b/idea/testData/completion/keywords/AfterFuns.kt @@ -0,0 +1,36 @@ +class A { + fun foo() { + bar() + } + + fun bar() { + fun() + } + + +} + +// EXIST: abstract +// EXIST: annotation +// EXIST: class +// EXIST: enum +// EXIST: final +// EXIST: fun +// EXIST: in +/*why?*/ +// EXIST: inner +// EXIST: internal +// EXIST: object +// EXIST: open +// EXIST: out +/*why?*/ +// EXIST: override +// EXIST: private +// EXIST: protected +// EXIST: public +// EXIST: trait +// EXIST: val +// EXIST: var +// EXIST: vararg +/*why?*/ +// NUMBER: 20 diff --git a/idea/tests/org/jetbrains/jet/completion/KeywordCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/KeywordCompletionTestGenerated.java index 5d692ee5dcf..e4698fd4a91 100644 --- a/idea/tests/org/jetbrains/jet/completion/KeywordCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/KeywordCompletionTestGenerated.java @@ -42,12 +42,24 @@ public class KeywordCompletionTestGenerated extends AbstractKeywordCompletionTes doTest(fileName); } + @TestMetadata("AfterClasses.kt") + public void testAfterClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/keywords/AfterClasses.kt"); + doTest(fileName); + } + @TestMetadata("AfterDot.kt") public void testAfterDot() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/keywords/AfterDot.kt"); doTest(fileName); } + @TestMetadata("AfterFuns.kt") + public void testAfterFuns() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/keywords/AfterFuns.kt"); + doTest(fileName); + } + @TestMetadata("AfterSafeDot.kt") public void testAfterSafeDot() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/keywords/AfterSafeDot.kt");