mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
unrelated defaults: check if current class contains explicit method (IDEA-164732)
This commit is contained in:
@@ -458,6 +458,7 @@ public class GenericsHighlightUtil {
|
||||
|
||||
if (!hasConcrete && defaults != null) {
|
||||
final PsiMethod defaultMethod = defaults.get(0);
|
||||
if (MethodSignatureUtil.findMethodBySuperMethod(aClass, defaultMethod, false) != null) continue;
|
||||
final PsiClass defaultMethodContainingClass = defaultMethod.getContainingClass();
|
||||
if (defaultMethodContainingClass == null) continue;
|
||||
final PsiMethod unrelatedMethod = abstracts != null ? abstracts.get(0) : defaults.get(1);
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
interface A<E> {
|
||||
void foo(E item);
|
||||
}
|
||||
|
||||
interface B1<E> extends A<E> {
|
||||
@Override
|
||||
default void foo(E item) {}
|
||||
}
|
||||
|
||||
interface B2<E> extends A<E> {
|
||||
@Override
|
||||
default void foo(E item) {}
|
||||
}
|
||||
|
||||
interface C1<E> extends B1<E> {}
|
||||
|
||||
interface C2<E> extends B2<E> {}
|
||||
|
||||
interface Bottom1<E> extends C2<E>, C1<E> {
|
||||
@Override
|
||||
default void foo(E item) {}
|
||||
}
|
||||
interface Bottom2<E> extends C2<E>, C1<E> {
|
||||
@Override
|
||||
void foo(E item);
|
||||
}
|
||||
interface <error descr="Bottom3 inherits unrelated defaults for foo(E) from types B2 and B1">Bottom3</error><E> extends C2<E>, C1<E> {}
|
||||
@@ -71,6 +71,10 @@ public class Interface8MethodsHighlightingTest extends LightCodeInsightFixtureTe
|
||||
doTest(false, false);
|
||||
}
|
||||
|
||||
public void testUnrelatedDefaultsWhenOverridingIsPresentExplicitly() throws Exception {
|
||||
doTest(false, false);
|
||||
}
|
||||
|
||||
public void testStaticMethodAccessibleBothThroughStaticImportAndInheritance() throws Exception {
|
||||
myFixture.addClass("package p; public interface Foo {" +
|
||||
" static void foo() {}" +
|
||||
|
||||
Reference in New Issue
Block a user