diff --git a/java/java-impl-refactorings/src/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailability.kt b/java/java-impl-refactorings/src/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailability.kt index 5bc4be698ab9..afa26f38948f 100644 --- a/java/java-impl-refactorings/src/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailability.kt +++ b/java/java-impl-refactorings/src/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailability.kt @@ -28,21 +28,29 @@ class JavaSuggestedRefactoringAvailability(refactoringSupport: SuggestedRefactor override fun amendStateInBackground(state: SuggestedRefactoringState): Iterator { return iterator { - if (state.additionalData[HAS_OVERRIDES] == null) { + var updatedState = state + if (updatedState.additionalData[HAS_OVERRIDES] == null) { val method = state.declaration as? PsiMethod - if (method != null && method.canHaveOverrides(state.oldSignature)) { - val restoredMethod = state.restoredDeclarationCopy() as PsiMethod - val hasOverrides = OverridingMethodsSearch.search(restoredMethod, false).findFirst() != null - yield(state.withAdditionalData(HAS_OVERRIDES, hasOverrides)) + if (method != null) { + val hasOverrides: Boolean + if (!method.canHaveOverrides(state.oldSignature)) { + hasOverrides = false + } else { + val restoredMethod = state.restoredDeclarationCopy() as PsiMethod + hasOverrides = OverridingMethodsSearch.search(restoredMethod, false).findFirst() != null + } + updatedState = state.withAdditionalData(HAS_OVERRIDES, hasOverrides) + yield(updatedState) } } - if (state.additionalData[HAS_USAGES] == null) { + if (updatedState.additionalData[HAS_USAGES] == null) { val declarationCopy = state.restoredDeclarationCopy() val useScope = declarationCopy?.useScope if (useScope is LocalSearchScope) { val hasUsages = ReferencesSearch.search(declarationCopy, useScope).findFirst() != null - yield(state.withAdditionalData(HAS_USAGES, hasUsages)) + updatedState = updatedState.withAdditionalData(HAS_USAGES, hasUsages) + yield(updatedState) } } } @@ -132,7 +140,7 @@ class JavaSuggestedRefactoringAvailability(refactoringSupport: SuggestedRefactor return SuggestedRenameData(declaration as PsiNamedElement, oldSignature.name) } - val canHaveOverrides = declaration.canHaveOverrides(oldSignature) && updatedState.additionalData[HAS_OVERRIDES] != false + val canHaveOverrides = updatedState.additionalData[HAS_OVERRIDES] != false if (updatedState.additionalData[HAS_USAGES] == false && !canHaveOverrides) return null val updateUsagesData = SuggestedChangeSignatureData.create(updatedState, whatToUpdate) diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailabilityTest.kt b/java/java-tests/testSrc/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailabilityTest.kt index f1cdf933c98d..56b8a60e2139 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailabilityTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/suggested/JavaSuggestedRefactoringAvailabilityTest.kt @@ -87,7 +87,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("int", "long") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -102,7 +103,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("void", "int") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -175,7 +177,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("public", "private") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -222,7 +225,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("void", "int") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -237,7 +241,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("void", "int") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -252,7 +257,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("void", "int") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -267,7 +273,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("void", "int") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("foo", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) } @@ -455,7 +462,8 @@ class JavaSuggestedRefactoringAvailabilityTest : BaseSuggestedRefactoringAvailab { replaceTextAtCaret("int", "long") }, - expectedAvailability = Availability.Disabled + expectedAvailability = Availability.Available(changeSignatureAvailableTooltip("C", "overrides")), + expectedAvailabilityAfterBackgroundAmend = Availability.Disabled ) }