mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
java 9: ensure private methods in interfaces do not receive implicit public modifier (IDEA-171089)
This commit is contained in:
@@ -17,7 +17,6 @@ package com.intellij.psi.impl.source;
|
||||
|
||||
import com.intellij.codeInsight.AnnotationTargetUtil;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.augment.PsiAugmentProvider;
|
||||
import com.intellij.psi.impl.CheckUtil;
|
||||
@@ -158,9 +157,11 @@ public class PsiModifierListImpl extends JavaStubPsiElement<PsiModifierListStub>
|
||||
else if (parent instanceof PsiMethod) {
|
||||
PsiClass aClass = ((PsiMethod)parent).getContainingClass();
|
||||
if (aClass != null && aClass.isInterface()) {
|
||||
implicitModifiers.add(PUBLIC);
|
||||
if (!explicitModifiers.contains(DEFAULT) && !explicitModifiers.contains(STATIC) && !explicitModifiers.contains(PRIVATE)) {
|
||||
implicitModifiers.add(ABSTRACT);
|
||||
if (!explicitModifiers.contains(PRIVATE)) {
|
||||
implicitModifiers.add(PUBLIC);
|
||||
if (!explicitModifiers.contains(DEFAULT) && !explicitModifiers.contains(STATIC)) {
|
||||
implicitModifiers.add(ABSTRACT);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (aClass != null && aClass.isEnum() && ((PsiMethod)parent).isConstructor()) {
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
interface A {
|
||||
void m();
|
||||
}
|
||||
interface A1 extends A {
|
||||
<error descr="Static method 'm()' in 'A1' cannot override instance method 'm()' in 'A'">private static void m()</error> {}
|
||||
}
|
||||
interface A2 extends A {
|
||||
<error descr="'m()' in 'A2' clashes with 'm()' in 'A'; attempting to assign weaker access privileges ('private'); was 'public'">private</error> void m() {}
|
||||
}
|
||||
|
||||
interface B {
|
||||
private void m() {}
|
||||
}
|
||||
interface B1 extends B {
|
||||
private void m() {}
|
||||
}
|
||||
interface B2 extends B {
|
||||
private static void m() {}
|
||||
}
|
||||
interface B3 extends B {
|
||||
default void m() {}
|
||||
}
|
||||
interface B4 extends B {
|
||||
void m();
|
||||
}
|
||||
+1
@@ -41,6 +41,7 @@ public class LightAdvHighlightingJdk9Test extends LightDaemonAnalyzerTestCase {
|
||||
|
||||
public void testSafeVarargsApplicability() { doTest(true, false); }
|
||||
public void testPrivateInInterfaces() { doTest(false, false); }
|
||||
public void testPrivateInInterfacesOverriding() { doTest(false, false); }
|
||||
public void testUnderscore() { doTest(false, false); }
|
||||
public void testTryWithResources() { doTest(false, false); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user