[java-actions] IDEA-340069 Don't offer replace constructor with factory if it is inside implicit class

GitOrigin-RevId: 5d44f909e46220a49a88e31f23bad09ec9868e44
This commit is contained in:
Mikhail Pyltsin
2023-12-11 21:05:56 +00:00
committed by intellij-monorepo-bot
parent 9f280818c9
commit 0d55ac4678
2 changed files with 25 additions and 2 deletions
@@ -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;
}
}
@@ -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 R<caret>ar();
}
""");
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);