From 37f41bf73fa2d5a111f9ff266239297fae6c571f Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 9 Apr 2012 19:47:00 +0200 Subject: [PATCH] introduce variable from polyadic expression: ensure that selected expr would be replaced --- .../IntroduceVariableBase.java | 4 ++ .../introduceVariable/Polyadic.after.java | 41 +++++++++++++++++++ .../introduceVariable/Polyadic.java | 40 ++++++++++++++++++ .../refactoring/IntroduceVariableTest.java | 4 ++ 4 files changed, 89 insertions(+) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/Polyadic.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java index 3b76ae657960..619ee12db84c 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java @@ -752,6 +752,10 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase { } } + if (!deleteSelf && replaceSelf && expr1 instanceof PsiPolyadicExpression && expr1.isValid() && !expr1.isPhysical() ) { + array.add(replace(expr1, ref, project)); + } + if (editor != null) { final PsiElement[] replacedOccurences = PsiUtilBase.toPsiElementArray(array); highlightReplacedOccurences(project, editor, replacedOccurences); diff --git a/java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java new file mode 100644 index 000000000000..f76ab1f15bfd --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.after.java @@ -0,0 +1,41 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +public class C { + void foo(boolean a, boolean b, boolean c) { + boolean option1 = true; + boolean option2 = true; + final boolean b1 = a && b; + if (option1) { + if (option2) { + if (b1 && c) { + System.out.println("One"); + } + } + else { + if (b1) { + System.out.println("two"); + } + } + } + else { + if (b1) { + System.out.println("three"); + } + } + } + + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/Polyadic.java b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.java new file mode 100644 index 000000000000..39592e80d903 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/Polyadic.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +public class C { + void foo(boolean a, boolean b, boolean c) { + boolean option1 = true; + boolean option2 = true; + if (option1) { + if (option2) { + if (a && b && c) { + System.out.println("One"); + } + } + else { + if (a && b) { + System.out.println("two"); + } + } + } + else { + if (a && b) { + System.out.println("three"); + } + } + } + + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index 2ed55d72cc16..1a3b6948a01d 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -269,6 +269,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { public void testCantCollapsedToDiamond() throws Exception { doTest(new MockIntroduceVariableHandler("a", true, true, true, "Foo")); } + + public void testPolyadic() throws Exception { + doTest(new MockIntroduceVariableHandler("b1", true, true, true, "boolean")); + } public void testSiblingInnerClassType() throws Exception { doTest(new MockIntroduceVariableHandler("vari", true, false, false, "A.B") {