diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java b/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java index bcc479bd30bf..7bf63a1b2fc2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java @@ -39,6 +39,25 @@ public final class ModifierChooser { {PsiKeyword.TRANSIENT} }; + private static final String[][] CLASS_15_MEMBER_MODIFIERS = { + {PsiKeyword.PUBLIC, PsiKeyword.PROTECTED, PsiKeyword.PRIVATE}, + {PsiKeyword.STATIC}, + {PsiKeyword.FINAL, PsiKeyword.ABSTRACT}, + {PsiKeyword.SEALED, PsiKeyword.NON_SEALED}, + {PsiKeyword.NATIVE}, + {PsiKeyword.SYNCHRONIZED}, + {PsiKeyword.STRICTFP}, + {PsiKeyword.VOLATILE}, + {PsiKeyword.TRANSIENT} + }; + + private static final String[][] INTERFACE_15_MEMBER_MODIFIERS = { + {PsiKeyword.PUBLIC, PsiKeyword.PROTECTED, PsiKeyword.PRIVATE}, + {PsiKeyword.STATIC, PsiKeyword.DEFAULT}, + {PsiKeyword.FINAL, PsiKeyword.ABSTRACT}, + {PsiKeyword.SEALED, PsiKeyword.NON_SEALED} + }; + private static final String[][] INTERFACE_9_MEMBER_MODIFIERS = { {PsiKeyword.PUBLIC, PsiKeyword.PROTECTED, PsiKeyword.PRIVATE}, {PsiKeyword.STATIC, PsiKeyword.DEFAULT}, @@ -82,10 +101,13 @@ public final class ModifierChooser { } public static String[] addMemberModifiers(PsiModifierList list, final boolean inInterface, @NotNull PsiElement position) { - return addKeywords(list, inInterface ? getInterfaceMemberModifiers(position) : CLASS_MEMBER_MODIFIERS); + return addKeywords(list, inInterface ? getInterfaceMemberModifiers(position) : getClassMemberModifiers(position)); } private static String[][] getInterfaceMemberModifiers(@NotNull PsiElement list) { + if (PsiUtil.getLanguageLevel(list).isAtLeast(LanguageLevel.JDK_15_PREVIEW)) { + return INTERFACE_15_MEMBER_MODIFIERS; + } if (PsiUtil.isLanguageLevel9OrHigher(list)) { return INTERFACE_9_MEMBER_MODIFIERS; } @@ -95,6 +117,13 @@ public final class ModifierChooser { return INTERFACE_MEMBER_MODIFIERS; } + private static String[][] getClassMemberModifiers(@NotNull PsiElement list) { + if (PsiUtil.getLanguageLevel(list).isAtLeast(LanguageLevel.JDK_15_PREVIEW)) { + return CLASS_15_MEMBER_MODIFIERS; + } + return CLASS_MEMBER_MODIFIERS; + } + private static String[] addKeywords(PsiModifierList list, String[][] keywordSets) { final List ret = new ArrayList<>(); for (int i = 0; i < keywordSets.length; i++) { diff --git a/java/java-tests/testData/codeInsight/completion/keywords/innerClassSealedModifier.java b/java/java-tests/testData/codeInsight/completion/keywords/innerClassSealedModifier.java new file mode 100644 index 000000000000..e86a0eaca113 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/innerClassSealedModifier.java @@ -0,0 +1,3 @@ +class Foo { + class Bar {} +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/keywords/interfaceInnerClassSealedModifier.java b/java/java-tests/testData/codeInsight/completion/keywords/interfaceInnerClassSealedModifier.java new file mode 100644 index 000000000000..0d3b8b80f96c --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/interfaceInnerClassSealedModifier.java @@ -0,0 +1,3 @@ +interface Foo { + private class Bar {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java index b37820ebbaac..4c8b0d877523 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java @@ -200,6 +200,8 @@ public class KeywordCompletionTest extends LightCompletionTestCase { public void testSealedModifier() {setLanguageLevel(LanguageLevel.JDK_15_PREVIEW); doTest(1, "sealed"); } public void testPermitsList() {setLanguageLevel(LanguageLevel.JDK_15_PREVIEW); doTest(1, "permits"); } public void testEnumPermitsList() {setLanguageLevel(LanguageLevel.JDK_15_PREVIEW); doTest(0, "permits"); } + public void testInnerClassSealedModifier() {setLanguageLevel(LanguageLevel.JDK_15_PREVIEW); doTest(1, "sealed");} + public void testInterfaceInnerClassSealedModifier() {setLanguageLevel(LanguageLevel.JDK_15_PREVIEW); doTest(1, "sealed");} public void testOverwriteCatch() { configureByTestName();