From 8202fb48574518905a0f99d1cc130c674446e08f Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 26 Jan 2023 14:53:56 +0100 Subject: [PATCH] Java: don't make enum class explicitly abstract on method pull-up (IDEA-236396) GitOrigin-RevId: 3f4924e16741deec404747f74c7e7c93999b70aa --- .../com/intellij/refactoring/util/RefactoringUtil.java | 9 ++++++--- .../pullUp/PullUpEnumMethodAndMakeAbstract.java | 7 +++++++ .../pullUp/PullUpEnumMethodAndMakeAbstract_after.java | 9 +++++++++ .../com/intellij/java/refactoring/PullUpTest.java | 6 +++++- 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract.java create mode 100644 java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract_after.java diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java index 480fdd75cbaa..cedf1eb29095 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.refactoring.util; import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil; @@ -36,6 +36,7 @@ import com.intellij.refactoring.introduceField.ElementToWorkOn; import com.intellij.util.CommonJavaRefactoringUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.ObjectUtils; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.UniqueNameGenerator; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -117,7 +118,7 @@ public final class RefactoringUtil { final PsiImportList importList = ((PsiJavaFile)element.getContainingFile()).getImportList(); if (importList != null) { final PsiImportStaticStatement[] importStaticStatements = importList.getImportStaticStatements(); - return Arrays.stream(importStaticStatements).anyMatch(stmt -> stmt.isOnDemand() && stmt.resolveTargetClass() == aClass); + return ContainerUtil.exists(importStaticStatements, stmt -> stmt.isOnDemand() && stmt.resolveTargetClass() == aClass); } } return false; @@ -386,7 +387,9 @@ public final class RefactoringUtil { } if (!targetClass.isInterface()) { - PsiUtil.setModifierProperty(targetClass, PsiModifier.ABSTRACT, true); + if (!targetClass.isEnum()) { + PsiUtil.setModifierProperty(targetClass, PsiModifier.ABSTRACT, true); + } prepareForAbstract(method); } else { diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract.java b/java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract.java new file mode 100644 index 000000000000..3ac0b3d769dd --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract.java @@ -0,0 +1,7 @@ +enum TestEnum { + + A { + void foo() {} + }; + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract_after.java b/java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract_after.java new file mode 100644 index 000000000000..b0616cb98674 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/PullUpEnumMethodAndMakeAbstract_after.java @@ -0,0 +1,9 @@ +enum TestEnum { + + A { + @Override + void foo() {} + }; + + abstract void foo(); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java index 69a40b02a51c..42615d717b94 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.java.refactoring; import com.intellij.JavaTestUtil; @@ -31,6 +31,10 @@ public class PullUpTest extends LightRefactoringTestCase { doTest(new RefactoringTestUtil.MemberDescriptor("Inner", PsiClass.class)); } + public void testPullUpEnumMethodAndMakeAbstract() { + doTest(new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, true)); + } + public void testQualifiedReference() { // IDEADEV-25008 doTest(new RefactoringTestUtil.MemberDescriptor("x", PsiField.class), new RefactoringTestUtil.MemberDescriptor("getX", PsiMethod.class),