diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SafeDeleteFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SafeDeleteFix.java index 3e286629704f..a99cbfce96da 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SafeDeleteFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SafeDeleteFix.java @@ -153,9 +153,11 @@ public class SafeDeleteFix extends LocalQuickFixAndIntentionActionOnPsiElement { }); PsiFile containingFile = body.getContainingFile(); + PsiManager manager = containingFile.getManager(); return elementsToCheck .stream() .filter(additionalFilter) + .filter(manager::isInProject) .filter(m -> m != containingFile) .filter(m -> !PsiTreeUtil.isAncestor(psiMember, m, true)) .filter(m -> !(m instanceof PsiMember member) || diff --git a/java/java-tests/testData/refactoring/safeDelete/AccidentalPropertyRef.java b/java/java-tests/testData/refactoring/safeDelete/AccidentalPropertyRef.java new file mode 100644 index 000000000000..c215fcd44ff9 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/AccidentalPropertyRef.java @@ -0,0 +1,9 @@ +class AccidentalPropertyRef { + // mockjdk-21 contains a file java/time/chrono/hijrah-config-Hijrah-umalqura_islamic-umalqura.properties + // which contains a line like + // 1493=30 29 30 29 30 29 29 30 29 30 30 30 + // this test ensures that we don't try to remove this line from the JDK + public static void main(String[] args) { + String s = "1493"; + } +} diff --git a/java/java-tests/testData/refactoring/safeDelete/AccidentalPropertyRef_after.java b/java/java-tests/testData/refactoring/safeDelete/AccidentalPropertyRef_after.java new file mode 100644 index 000000000000..e779fb4a7005 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/AccidentalPropertyRef_after.java @@ -0,0 +1,2 @@ +class AccidentalPropertyRef { +} diff --git a/java/java-tests/testData/refactoring/safeDelete/NoConflictOnDeleteParameterWithMethodRefArg_after.java b/java/java-tests/testData/refactoring/safeDelete/NoConflictOnDeleteParameterWithMethodRefArg_after.java index 87b2e5480514..e6868f6e71c8 100644 --- a/java/java-tests/testData/refactoring/safeDelete/NoConflictOnDeleteParameterWithMethodRefArg_after.java +++ b/java/java-tests/testData/refactoring/safeDelete/NoConflictOnDeleteParameterWithMethodRefArg_after.java @@ -1,5 +1,3 @@ -import java.util.function.Consumer; - public class Subst { void test1() { test2(); 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 829ff1e45ffa..4c428caa550a 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java @@ -8,6 +8,7 @@ import com.intellij.ide.scratch.ScratchFileService; import com.intellij.ide.scratch.ScratchRootType; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; @@ -35,6 +36,11 @@ public class SafeDeleteTest extends MultiFileTestCase { ModuleRootModificationUtil.updateModel(getModule(), DefaultLightProjectDescriptor::addJetBrainsAnnotations); } + @Override + protected Sdk getTestProjectJdk() { + return IdeaTestUtil.getMockJdk21(); + } + @NotNull @Override protected String getTestDataPath() { @@ -137,6 +143,10 @@ public class SafeDeleteTest extends MultiFileTestCase { doSingleFileTest(); } + public void testAccidentalPropertyRef() throws Exception { + doSingleFileTest(); + } + public void testDeleteMethodWithPropertyUsage() { doTest("Foo"); }