From f8a53347cf73145b38a2cc8508a568c4b07b089f Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 2 Nov 2020 20:36:00 +0100 Subject: [PATCH] java: split declaration & assignment: fix for very broken code (IDEA-254385) forcePsiPostprocessAndRestoreElement may invalidate variable initializer GitOrigin-RevId: 31b99804e5603cff36494ecbf9f98c1716b13d22 --- .../quickFix/splitDeclaration/afterBroken.java | 11 +++++++++++ .../quickFix/splitDeclaration/beforeBroken.java | 10 ++++++++++ .../src/com/siyeh/ig/psiutils/ExpressionUtils.java | 5 ++++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/afterBroken.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/beforeBroken.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/afterBroken.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/afterBroken.java new file mode 100644 index 000000000000..70ca52ccbe5e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/afterBroken.java @@ -0,0 +1,11 @@ +// "Split into declaration and assignment" "true" + +class Foo { + { + int fieldIndexes; + fieldIndexes = getFieldIndexes(Hellonew String[;]{""}); + } + public int getFieldIndexes(String[] columns) { + return 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/beforeBroken.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/beforeBroken.java new file mode 100644 index 000000000000..7e3fbb13197d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/splitDeclaration/beforeBroken.java @@ -0,0 +1,10 @@ +// "Split into declaration and assignment" "true" + +class Foo { + { + int fieldIndexes = getFieldIndexes(Hellonew String[]{""}); + } + public int getFieldIndexes(String[] columns) { + return 0; + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java index 6ae2f163d021..d4ac1a869ba0 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java @@ -1662,7 +1662,10 @@ public final class ExpressionUtils { return (PsiAssignmentExpression)((PsiExpressionStatement)block.addAfter(statement, declaration)).getExpression(); } finally { - initializer.delete(); + initializer = var.getInitializer(); + if (initializer != null) { + initializer.delete(); + } } } }