From 0d47b0f72098219e9ede9a60ba527e3949601109 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 25 Oct 2010 18:38:36 +0400 Subject: [PATCH] cs: use any var in declaration statement fixed (IDEA-58344) --- .../JavaChangeSignatureUsageProcessor.java | 2 ++ .../changeSignature/UseAnyVariableAndDefault.java | 14 ++++++++++++++ .../UseAnyVariableAndDefault_after.java | 14 ++++++++++++++ .../intellij/refactoring/ChangeSignatureTest.java | 12 ++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java create mode 100644 java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java index e30c86bec0a0..a5f1cd74ef4a 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java @@ -496,6 +496,8 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr final VariablesProcessor processor = new VariablesProcessor(false) { protected boolean check(PsiVariable var, ResolveState state) { if (var instanceof PsiField && !resolveHelper.isAccessible((PsiField)var, list, null)) return false; + if (var instanceof PsiLocalVariable && list.getTextRange().getStartOffset() <= var.getTextRange().getStartOffset()) return false; + if (PsiTreeUtil.isAncestor(var, list, false)) return false; final PsiType varType = state.get(PsiSubstitutor.KEY).substitute(var.getType()); return type.isAssignableFrom(varType); } diff --git a/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java new file mode 100644 index 000000000000..b8afa62a302a --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault.java @@ -0,0 +1,14 @@ +class C { + C(String name){} +} + +class Usage { + void foo() { + C c1 = new C("1"); + C c2 = new C("2"); + } + + void bar() { + C c1 = new C("1"), c2 = new C("2"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java new file mode 100644 index 000000000000..552dae226123 --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/UseAnyVariableAndDefault_after.java @@ -0,0 +1,14 @@ +class C { + C(C c){} +} + +class Usage { + void foo() { + C c1 = new C(null); + C c2 = new C(c1); + } + + void bar() { + C c1 = new C(null), c2 = new C(c1); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java index 41294f3e3f69..9f5a7a9195c1 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java @@ -153,6 +153,18 @@ public class ChangeSignatureTest extends LightCodeInsightTestCase { }, false); } + public void testUseAnyVariableAndDefault() throws Exception { + doTest(null, null, null, new GenParams() { + @Override + public ParameterInfoImpl[] genParams(PsiMethod method) throws IncorrectOperationException { + final PsiElementFactory factory = JavaPsiFacade.getInstance(method.getProject()).getElementFactory(); + return new ParameterInfoImpl[] { + new ParameterInfoImpl(-1, "c", factory.createTypeFromText("C", method), "null", true) + }; + } + }, false); + } + public void testRemoveVarargParameter() throws Exception { doTest(null, null, null, new ParameterInfoImpl[]{new ParameterInfoImpl(0)}, new ThrownExceptionInfo[0], false); }