empty method inspection: skip multiple super calls(IDEA-210462), fix support unrelated defaults from super (IDEA-219569)

GitOrigin-RevId: afa37ee534e59af18c4434d058ad2a55edb7ecca
This commit is contained in:
Anna Kozlova
2021-01-15 12:08:18 +01:00
committed by intellij-monorepo-bot
parent 51adbd8f32
commit 4b7aa030ff
5 changed files with 138 additions and 83 deletions

View File

@@ -2,6 +2,7 @@
package com.intellij.codeInspection.reference;
import com.intellij.codeInsight.daemon.impl.analysis.GenericsHighlightUtil;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
@@ -17,6 +18,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.uast.*;
import org.jetbrains.uast.visitor.AbstractUastVisitor;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@@ -576,6 +578,7 @@ public class RefJavaUtilImpl extends RefJavaUtil {
if (body != null) {
List<UExpression> statements =
body instanceof UBlockExpression ? ((UBlockExpression)body).getExpressions() : Collections.singletonList(body);
if (statements.size() > 1) return false;
for (UExpression expression : statements) {
boolean isCallToSameSuper = false;
if (expression instanceof UReturnExpression) {
@@ -594,17 +597,15 @@ public class RefJavaUtilImpl extends RefJavaUtil {
if (hasStatements) {
final PsiMethod[] superMethods = javaMethod.findSuperMethods();
int defaultCount = 0;
for (PsiMethod superMethod : superMethods) {
if (VisibilityUtil.compare(VisibilityUtil.getVisibilityModifier(superMethod.getModifierList()),
VisibilityUtil.getVisibilityModifier(javaMethod.getModifierList())) > 0) {
return false;
}
if (superMethod.hasModifierProperty(PsiModifier.DEFAULT)) {
defaultCount++;
}
}
if (defaultCount > 1) {
PsiClass aClass = javaMethod.getContainingClass();
if (aClass == null ||
GenericsHighlightUtil.getUnrelatedDefaultsMessage(aClass, Arrays.asList(superMethods), true) != null) {
return false;
}
}