[java-refactoring] Suggested refactoring: avoid canHaveOverrides in EDT

It could trigger resolve if modifiers are augmented (e.g., with Lombok). The same is checked anyway in background.
Improves IDEA-322957 T: DirectoryIndexImpl.getInfoForFile
Improves EA-765399 - T: DirectoryIndexImpl.getInfoForFile

GitOrigin-RevId: 7b1ff3fc823a53fdd959f662bffadce2c4747fa3
This commit is contained in:
Tagir Valeev
2023-11-06 19:11:39 +00:00
committed by intellij-monorepo-bot
parent 4a164c70d3
commit d5ccfc998a
2 changed files with 32 additions and 16 deletions
@@ -28,21 +28,29 @@ class JavaSuggestedRefactoringAvailability(refactoringSupport: SuggestedRefactor
override fun amendStateInBackground(state: SuggestedRefactoringState): Iterator<SuggestedRefactoringState> {
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)
@@ -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
)
}