From d7ed8a605bbcc24a0ca5bbb4e1137a2b254224b7 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 19 Nov 2024 12:05:52 +0100 Subject: [PATCH] [java-refactoring] Refactoring dialog: avoid updating var-type state on every updateControls() It should be updated only on type change (which happens rarely, especially because in many cases, we do not allow to change the type at all) Fixes IDEA-360822 Introduce Variable: "Replace all occurrences" (Alt+A) triggers flood of exceptions Slow operations are still possible but should not cause 'flood'. Given that dialog mode in refactorings is rarely used (it's non-default), current fix looks good enough GitOrigin-RevId: 6ad7e2826b11e1f39598e991201ba05620acae84 --- .../introduceVariable/IntroduceVariableDialog.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/IntroduceVariableDialog.java b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/IntroduceVariableDialog.java index 061a23cc4df1..9a5c35e14ecb 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/IntroduceVariableDialog.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/IntroduceVariableDialog.java @@ -234,7 +234,7 @@ class IntroduceVariableDialog extends DialogWrapper implements IntroduceVariable @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { - myCbVarType.setEnabled(Comparing.equal(myTypeSelector.getSelectedType(), CommonJavaRefactoringUtil.getTypeByExpressionWithExpectedType(myExpression))); + updateVarType(); } } }); @@ -246,10 +246,17 @@ class IntroduceVariableDialog extends DialogWrapper implements IntroduceVariable panel.add(myCbVarType, gbConstraints); updateControls(); + updateVarType(); return panel; } + public void updateVarType() { + if (myCbVarType != null) { + myCbVarType.setEnabled(Comparing.equal(myTypeSelector.getSelectedType(), CommonJavaRefactoringUtil.getTypeByExpressionWithExpectedType(myExpression))); + } + } + private void updateControls() { if (myCbReplaceWrite != null) { if (myCbReplaceAll.isSelected()) { @@ -276,10 +283,6 @@ class IntroduceVariableDialog extends DialogWrapper implements IntroduceVariable myCbFinal.setEnabled(true); myCbFinal.setSelected(myCbFinalState); } - - if (myCbVarType != null) { - myCbVarType.setEnabled(Comparing.equal(myTypeSelector.getSelectedType(), myExpression.getType())); - } } @Override