From da7bbf2537891f88337e7e493201eec9ea68b783 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 5 Nov 2015 16:50:21 +0300 Subject: [PATCH] guava type migration: method parameter migration involves local variables migration if need --- .../GuavaFluentIterableConversionRule.java | 5 ++++- .../inspections/GuavaInspectionTest.java | 4 ++++ .../guava/typeMigrationRootBackTraverse.java | 17 +++++++++++++++++ .../typeMigrationRootBackTraverse_after.java | 16 ++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse.java create mode 100644 java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse_after.java diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaFluentIterableConversionRule.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaFluentIterableConversionRule.java index 41f3b5fc97bc..c7f8ec138a9b 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaFluentIterableConversionRule.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaFluentIterableConversionRule.java @@ -29,7 +29,6 @@ import com.intellij.refactoring.typeMigration.TypeConversionDescriptor; import com.intellij.refactoring.typeMigration.TypeConversionDescriptorBase; import com.intellij.refactoring.typeMigration.TypeMigrationLabeler; import com.intellij.refactoring.typeMigration.rules.TypeConversionRule; -import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; @@ -306,6 +305,10 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu } break; } + else if (qualifier instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifier).resolve() instanceof PsiVariable) { + labeler.migrateExpressionType(qualifier, to, qualifier.getParent(), false, false); + break; + } else { return null; } diff --git a/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java b/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java index 285d54a50105..a12a4f578765 100644 --- a/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java +++ b/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java @@ -182,6 +182,10 @@ public class GuavaInspectionTest extends JavaCodeInsightFixtureTestCase { doTest(); } + public void testTypeMigrationRootBackTraverse() { + doTest(); + } + private void doTestNoQuickFixes(final Class... quickFixesClasses) { myFixture.configureByFile(getTestName(true) + ".java"); myFixture.enableInspections(new GuavaInspection()); diff --git a/java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse.java b/java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse.java new file mode 100644 index 000000000000..278051a54fbc --- /dev/null +++ b/java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse.java @@ -0,0 +1,17 @@ +import com.google.common.collect.FluentIterable; + +import java.util.ArrayList; + +public class MainFluentIterable { + + FluentIterable m2() { + + FluentIterable it = FluentIterable.from(new ArrayList()); + + return it.transform(s -> s + s); + } + + void m3() { + System.out.println((int) m2().size()); + } +} \ No newline at end of file diff --git a/java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse_after.java b/java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse_after.java new file mode 100644 index 000000000000..d693a19dde25 --- /dev/null +++ b/java/typeMigration/testData/inspections/guava/typeMigrationRootBackTraverse_after.java @@ -0,0 +1,16 @@ +import java.util.ArrayList; +import java.util.stream.Stream; + +public class MainFluentIterable { + + Stream m2() { + + Stream it = new ArrayList().stream(); + + return it.map(s -> s + s); + } + + void m3() { + System.out.println((int) (int) m2().count()); + } +} \ No newline at end of file