diff --git a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java index 77b889f22965..0154dd548ef1 100644 --- a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java @@ -19,6 +19,7 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.impl.FindSuperElementsHelper; +import com.intellij.psi.impl.light.LightRecordMethod; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; @@ -687,7 +688,7 @@ public class JavaSafeDeleteProcessor extends SafeDeleteProcessorDelegateBase { return findConstructorUsages(psiMethod, references, usages, allElementsToDelete); } final PsiMethod[] overridingMethods = - removeDeletedMethods(OverridingMethodsSearch.search(psiMethod).toArray(PsiMethod.EMPTY_ARRAY), + removeDeletedMethods(OverridingMethodsSearch.search(psiMethod).filtering(m -> !(m instanceof LightRecordMethod)).toArray(PsiMethod.EMPTY_ARRAY), allElementsToDelete); findFunctionalExpressions(usages, ArrayUtil.prepend(psiMethod, overridingMethods)); diff --git a/java/java-tests/testData/refactoring/safeDelete/RecordImplementsInterface.java b/java/java-tests/testData/refactoring/safeDelete/RecordImplementsInterface.java new file mode 100644 index 000000000000..0d3443506dbf --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/RecordImplementsInterface.java @@ -0,0 +1,4 @@ +interface I { + int m(); +} +record R(int m) implements I {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/safeDelete/RecordImplementsInterface_after.java b/java/java-tests/testData/refactoring/safeDelete/RecordImplementsInterface_after.java new file mode 100644 index 000000000000..1fc1961accb3 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/RecordImplementsInterface_after.java @@ -0,0 +1,3 @@ +interface I { +} +record R(int m) implements I {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java index ed1956d17c62..7be829d5563d 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java @@ -19,6 +19,7 @@ import com.intellij.refactoring.BaseRefactoringProcessor; import com.intellij.refactoring.MultiFileTestCase; import com.intellij.refactoring.RefactoringSettings; import com.intellij.refactoring.safeDelete.SafeDeleteHandler; +import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.PsiTestUtil; import com.intellij.util.PathUtil; import org.jetbrains.annotations.NonNls; @@ -432,8 +433,12 @@ public class SafeDeleteTest extends MultiFileTestCase { } public void testSealedGrandParent() { - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_15_PREVIEW); - doTest("Parent"); + IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_15_PREVIEW, () -> doTest("Parent")); + } + + public void testRecordImplementsInterface() throws Exception { + IdeaTestUtil.setModuleLanguageLevel(getModule(), LanguageLevel.JDK_16, getTestRootDisposable()); + doSingleFileTest(); } public void testNonAccessibleGrandParent() {