diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/ReplaceConstructorWithFactoryAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/ReplaceConstructorWithFactoryAction.java index 60cf23bae9a8..40a204e6c92f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/ReplaceConstructorWithFactoryAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/ReplaceConstructorWithFactoryAction.java @@ -16,6 +16,7 @@ import com.intellij.psi.impl.source.resolve.JavaResolveUtil; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.psi.util.PsiFormatUtilBase; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.ObjectUtils; import com.intellij.util.VisibilityUtil; @@ -243,7 +244,12 @@ public class ReplaceConstructorWithFactoryAction implements ModCommandAction { } private static boolean isSuitableClass(PsiClass containingClass) { - return containingClass != null && !containingClass.isInterface() && !containingClass.isEnum() && !containingClass.isRecord() && - !containingClass.hasModifierProperty(PsiModifier.ABSTRACT) && containingClass.getQualifiedName() != null; + return containingClass != null && + PsiTreeUtil.getParentOfType(containingClass, PsiImplicitClass.class, false) == null && + !containingClass.isInterface() && + !containingClass.isEnum() && + !containingClass.isRecord() && + !containingClass.hasModifierProperty(PsiModifier.ABSTRACT) && + containingClass.getQualifiedName() != null; } } diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithFactoryTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithFactoryTest.java index e88a58746e48..740e9b92da27 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithFactoryTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithFactoryTest.java @@ -75,6 +75,23 @@ public class ReplaceConstructorWithFactoryTest extends LightRefactoringTestCase assertNull(presentation); } + public void testImplicitClass(){ + configureFromFileText("A.java", """ + enum E {A, B} + + record Rar() { + } + + void main() { + Rar rar = new Rar(); + } + """); + ReplaceConstructorWithFactoryAction action = new ReplaceConstructorWithFactoryAction(); + ActionContext context = ActionContext.from(getEditor(), getFile()); + Presentation presentation = action.getPresentation(context); + assertNull(presentation); + } + private void runTest(final String testIndex, @NonNls String targetClassName) { configureByFile("/refactoring/replaceConstructorWithFactory/before" + testIndex + ".java"); perform(targetClassName);