mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 08:51:02 +07:00
[java-highlighting] Default method overrides a member of 'java.lang.Object': false negative
IDEA-306394 GitOrigin-RevId: 3a5938ae9de0d2d5e0e7c713fa86f4b672fec0d3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7e0d6a7f1a
commit
e7f7a140b7
@@ -436,17 +436,23 @@ public final class GenericsHighlightUtil {
|
||||
@NotNull PsiMethod method,
|
||||
@NotNull PsiElement methodIdentifier) {
|
||||
if (languageLevel.isAtLeast(LanguageLevel.JDK_1_8) && aClass.isInterface() && method.hasModifierProperty(PsiModifier.DEFAULT)) {
|
||||
HierarchicalMethodSignature sig = method.getHierarchicalMethodSignature();
|
||||
for (HierarchicalMethodSignature methodSignature : sig.getSuperSignatures()) {
|
||||
PsiMethod objectMethod = methodSignature.getMethod();
|
||||
PsiClass containingClass = objectMethod.getContainingClass();
|
||||
if (containingClass != null && CommonClassNames.JAVA_LANG_OBJECT.equals(containingClass.getQualifiedName()) && objectMethod.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
|
||||
.descriptionAndTooltip(JavaErrorBundle.message("default.method.overrides.object.member", sig.getName()))
|
||||
.range(methodIdentifier)
|
||||
;
|
||||
}
|
||||
return checkDefaultMethodOverrideEquivalentToObjectNonPrivate(methodIdentifier, method.getHierarchicalMethodSignature());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static HighlightInfo.Builder checkDefaultMethodOverrideEquivalentToObjectNonPrivate(@NotNull PsiElement methodIdentifier, HierarchicalMethodSignature sig) {
|
||||
for (HierarchicalMethodSignature methodSignature : sig.getSuperSignatures()) {
|
||||
PsiMethod objectMethod = methodSignature.getMethod();
|
||||
PsiClass containingClass = objectMethod.getContainingClass();
|
||||
if (containingClass != null && CommonClassNames.JAVA_LANG_OBJECT.equals(containingClass.getQualifiedName()) && objectMethod.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
|
||||
.descriptionAndTooltip(JavaErrorBundle.message("default.method.overrides.object.member", sig.getName()))
|
||||
.range(methodIdentifier);
|
||||
}
|
||||
HighlightInfo.Builder inHierarchy = checkDefaultMethodOverrideEquivalentToObjectNonPrivate(methodIdentifier, methodSignature);
|
||||
if (inHierarchy != null) return inHierarchy;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -3,4 +3,12 @@ interface A {
|
||||
return "";
|
||||
}
|
||||
default void finalize() throws Throwable { }
|
||||
boolean equals(Object o);
|
||||
}
|
||||
|
||||
interface B extends A {
|
||||
|
||||
default boolean <error descr="Default method 'equals' overrides a member of 'java.lang.Object'">equals</error>(Object o) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user