From 7c2d78c47c97fe1a1ba7f817b6ed30d0a236926a Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 11 Feb 2010 14:43:57 +0300 Subject: [PATCH] inline parameter: decode context in initializer in case of local variable created as well (IDEA-52171) --- .../InlineParameterExpressionProcessor.java | 5 +++++ .../inlineParameter/RefStaticMethod.java | 16 ++++++++++++++++ .../inlineParameter/RefStaticMethod.java.after | 17 +++++++++++++++++ .../refactoring/inline/InlineParameterTest.java | 4 ++++ 4 files changed, 42 insertions(+) create mode 100644 java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java create mode 100644 java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java index 8f1751d448bb..f7b4c2b63480 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java @@ -293,6 +293,11 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor factory.createVariableDeclarationStatement(myParameter.getName(), myParameter.getType(), myInitializer); final PsiLocalVariable declaredVar = (PsiLocalVariable)localDeclaration.getDeclaredElements()[0]; PsiUtil.setModifierProperty(declaredVar, PsiModifier.FINAL, myParameter.hasModifierProperty(PsiModifier.FINAL)); + final PsiExpression localVarInitializer = + InlineUtil.inlineVariable(myParameter, myInitializer, (PsiReferenceExpression)factory.createExpressionFromText(myParameter.getName(), myMethod)); + final PsiExpression initializer = declaredVar.getInitializer(); + LOG.assertTrue(initializer != null); + initializer.replace(localVarInitializer); final PsiCodeBlock body = myMethod.getBody(); if (body != null) { body.addAfter(localDeclaration, body.getLBrace()); diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java new file mode 100644 index 000000000000..429fa3b56972 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java @@ -0,0 +1,16 @@ +public class StaticRefMove { + public static int init() { + return 1; + } + + public void context() { + StaticRefMoveSubject v = new StaticRefMoveSubject(); + v.subject(init()); + } +} + +class StaticRefMoveSubject { + public void subject(int subj) { + System.out.println(subj); + } +} diff --git a/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after new file mode 100644 index 000000000000..6f076e7e75fb --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/RefStaticMethod.java.after @@ -0,0 +1,17 @@ +public class StaticRefMove { + public static int init() { + return 1; + } + + public void context() { + StaticRefMoveSubject v = new StaticRefMoveSubject(); + v.subject(); + } +} + +class StaticRefMoveSubject { + public void subject() { + int subj = StaticRefMove.init(); + System.out.println(subj); + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java index 5b4f48a46a33..3cebbb97f2f6 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java @@ -80,6 +80,10 @@ public class InlineParameterTest extends LightCodeInsightTestCase { doTest(false); } + public void testRefStaticMethod() throws Exception { + doTest(true); + } + public void testRefOuterThis() throws Exception { try { doTest(false);