[java] new keyword completion in module-info files (IDEA-164119)

This commit is contained in:
Roman Shevchenko
2017-02-16 11:08:50 +01:00
parent acf2b71cb2
commit 43f832d364
2 changed files with 21 additions and 5 deletions
@@ -71,7 +71,12 @@ class JavaModuleCompletion {
}
private static void addFileHeaderKeywords(PsiElement position, Consumer<LookupElement> result) {
if (PsiTreeUtil.prevVisibleLeaf(position) == null) {
PsiElement prev = PsiTreeUtil.prevVisibleLeaf(position);
if (prev == null) {
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.MODULE), TailType.HUMBLE_SPACE_BEFORE_WORD));
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.OPEN), TailType.HUMBLE_SPACE_BEFORE_WORD));
}
else if (PsiUtil.isJavaToken(prev, JavaTokenType.OPEN_KEYWORD)) {
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.MODULE), TailType.HUMBLE_SPACE_BEFORE_WORD));
}
}
@@ -79,6 +84,7 @@ class JavaModuleCompletion {
private static void addModuleStatementKeywords(PsiElement position, Consumer<LookupElement> result) {
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.REQUIRES), TailType.HUMBLE_SPACE_BEFORE_WORD));
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.EXPORTS), TailType.HUMBLE_SPACE_BEFORE_WORD));
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.OPENS), TailType.HUMBLE_SPACE_BEFORE_WORD));
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.USES), TailType.HUMBLE_SPACE_BEFORE_WORD));
result.consume(new OverrideableSpace(createKeyword(position, PsiKeyword.PROVIDES), TailType.HUMBLE_SPACE_BEFORE_WORD));
}
@@ -89,6 +95,10 @@ class JavaModuleCompletion {
private static void addModuleReferences(PsiElement context, Consumer<LookupElement> result) {
PsiElement statement = context.getParent();
if (statement instanceof PsiRequiresStatement) {
result.consume(new OverrideableSpace(createKeyword(context, PsiKeyword.TRANSITIVE), TailType.HUMBLE_SPACE_BEFORE_WORD));
result.consume(new OverrideableSpace(createKeyword(context, PsiKeyword.STATIC), TailType.HUMBLE_SPACE_BEFORE_WORD));
}
if (!(statement instanceof PsiJavaModule)) {
PsiElement host = statement.getParent();
if (host instanceof PsiJavaModule) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,11 +25,17 @@ class ModuleCompletionTest : LightJava9ModulesCodeInsightFixtureTestCase() {
addFile("module-info.java", "module M2 { }", M2)
}
fun testFileHeader() = complete("<caret>", "module <caret>")
fun testFileHeader1() = variants("<caret>", "module", "open")
fun testFileHeader2() = complete("open <caret>", "open module <caret>")
fun testModuleName() = variants("module M<caret>")
fun testStatements1() = variants("module M { <caret> }", "requires", "exports", "uses", "provides")
fun testStatements1() = variants("module M { <caret> }", "requires", "exports", "opens", "uses", "provides")
fun testStatements2() = complete("module M { requires X; ex<caret> }", "module M { requires X; exports <caret> }")
fun testModuleRef() = complete("module M { requires M<caret> }", "module M { requires M2;<caret> }")
fun testRequires() {
variants("module M { requires <caret>", "transitive", "static", "M2", "java.base", "lib.multi.release", "lib.named")
complete("module M { requires t<caret> }", "module M { requires transitive <caret> }")
complete("module M { requires M<caret> }", "module M { requires M2;<caret> }")
}
fun testExports() {
addFile("pkg/empty/package-info.java", "package pkg.empty;")