diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ConstructorBodyProcessor.java b/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ConstructorBodyProcessor.java index 6a9bdfffe360..c55f021effae 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ConstructorBodyProcessor.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ConstructorBodyProcessor.java @@ -265,10 +265,15 @@ final class ConstructorBodyProcessor { if (resolved instanceof PsiField field && !field.hasModifierProperty(STATIC) && field.getContainingClass() == containingClass) { hasReferenceToClassUnderConstruction.set(true); } - else if (resolved instanceof PsiMethod method && - !method.hasModifierProperty(STATIC) && - method.getContainingClass() == containingClass) { - hasReferenceToClassUnderConstruction.set(true); + else if (resolved instanceof PsiMethod method) { + if (method.hasModifierProperty(STATIC)) return; + if (method.getContainingClass() == containingClass) { + hasReferenceToClassUnderConstruction.set(true); + return; + } + if (containingClass.findMethodBySignature(method, true) != null) { + hasReferenceToClassUnderConstruction.set(true); + } } } }); diff --git a/java/java-tests/testData/inspection/classCanBeRecord/flexibleConstructorBodies/beforeDelegating_8.java b/java/java-tests/testData/inspection/classCanBeRecord/flexibleConstructorBodies/beforeDelegating_8.java new file mode 100644 index 000000000000..8d4e0c7aa190 --- /dev/null +++ b/java/java-tests/testData/inspection/classCanBeRecord/flexibleConstructorBodies/beforeDelegating_8.java @@ -0,0 +1,21 @@ +// "Convert to record class" "false" +interface LivingAndBreathing { + default void performBackflip() { + System.out.println("Watch out, I'm gonna do a backflip"); + } +} + +class Person implements LivingAndBreathing { + final String name; + final int age; + + Person(String name, int age) { + this.name = name; + this.age = age; + } + + Person(String name) { + performBackflip(); // javac error: "cannot reference performBackflip() before supertype constructor has been called" + this(name, 0); + } +} \ No newline at end of file