forbid private classes in java 9 interfaces (IDEA-167121)

This commit is contained in:
Anna Kozlova
2017-01-26 19:02:35 +03:00
parent f6ef33861c
commit 3096de1332
2 changed files with 15 additions and 6 deletions
@@ -158,6 +158,7 @@ public class HighlightUtil extends HighlightUtilBase {
Set<String> incompatibles = incompatibleModifiersHash.get(modifier);
if (incompatibles == null) return null;
final PsiElement parent = modifierList.getParent();
final boolean level8OrHigher = PsiUtil.isLanguageLevel8OrHigher(modifierList);
final boolean level9OrHigher = PsiUtil.isLanguageLevel9OrHigher(modifierList);
for (@PsiModifier.ModifierConstant String incompatible : incompatibles) {
@@ -166,12 +167,12 @@ public class HighlightUtil extends HighlightUtilBase {
continue;
}
}
if (level9OrHigher && modifier.equals(PsiModifier.PRIVATE) && incompatible.equals(PsiModifier.PUBLIC)) {
continue;
}
if (modifier.equals(PsiModifier.STATIC) && incompatible.equals(PsiModifier.FINAL)) {
final PsiElement parent = modifierList.getParent();
if (parent instanceof PsiMethod) {
if (parent instanceof PsiMethod) {
if (level9OrHigher && modifier.equals(PsiModifier.PRIVATE) && incompatible.equals(PsiModifier.PUBLIC)) {
continue;
}
if (modifier.equals(PsiModifier.STATIC) && incompatible.equals(PsiModifier.FINAL)) {
final PsiClass containingClass = ((PsiMethod)parent).getContainingClass();
if (containingClass == null || !containingClass.isInterface()) {
continue;
@@ -12,4 +12,12 @@ interface C {
interface D {
private static void m() {}
}
interface E {
<error descr="Illegal combination of modifiers: 'private' and 'public'">private</error> class E1 {}
}
interface F {
<error descr="Modifier 'private' not allowed here">private</error> int m = 0;
}