introduce variable from polyadic expression: ensure that selected expr would be replaced

This commit is contained in:
anna
2012-04-09 19:47:00 +02:00
parent 41e4ff0913
commit 37f41bf73f
4 changed files with 89 additions and 0 deletions

View File

@@ -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);

View File

@@ -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");
}
}
}
}

View File

@@ -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 (<selection>a && b</selection> && c) {
System.out.println("One");
}
}
else {
if (a && b) {
System.out.println("two");
}
}
}
else {
if (a && b) {
System.out.println("three");
}
}
}
}

View File

@@ -269,6 +269,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase {
public void testCantCollapsedToDiamond() throws Exception {
doTest(new MockIntroduceVariableHandler("a", true, true, true, "Foo<java.lang.Number>"));
}
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") {