From 52e56fbb769e58073b355613e109fc5633efc59b Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 16 Oct 2015 14:47:30 +0300 Subject: [PATCH] guava type migration: convert variables like Optional o = FluentIterable.from().firstMatch(); --- .../inspections/GuavaInspection.java | 3 ++- .../GuavaFluentIterableConversionRule.java | 2 +- .../guava/GuavaOptionalConversionRule.java | 9 ++++++++- .../inspections/GuavaInspectionTest.java | 4 ++++ .../testData/inspections/guava/optional3.java | 19 +++++++++++++++++++ .../inspections/guava/optional3_after.java | 18 ++++++++++++++++++ 6 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 java/typeMigration/testData/inspections/guava/optional3.java create mode 100644 java/typeMigration/testData/inspections/guava/optional3_after.java diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/inspections/GuavaInspection.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/inspections/GuavaInspection.java index cbb6045eac4d..119156b17b79 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/inspections/GuavaInspection.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/inspections/GuavaInspection.java @@ -128,7 +128,8 @@ public class GuavaInspection extends BaseJavaBatchLocalInspectionTool { final PsiElement maybeLocalVariable = chain.getParent(); if (maybeLocalVariable instanceof PsiLocalVariable) { final PsiClass aClass = PsiUtil.resolveClassInType(chain.getType()); - if (aClass != null && GuavaFluentIterableConversionRule.FLUENT_ITERABLE.equals(aClass.getQualifiedName())) { + if (aClass != null && (GuavaFluentIterableConversionRule.FLUENT_ITERABLE.equals(aClass.getQualifiedName()) || + GuavaOptionalConversionRule.GUAVA_OPTIONAL.equals(aClass.getQualifiedName()))) { return; } } 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 e8f2cbee136d..f0ea318356f1 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 @@ -185,7 +185,7 @@ public class GuavaFluentIterableConversionRule extends BaseGuavaTypeConversionRu } @Nullable - private static GuavaChainedConversionDescriptor buildCompoundDescriptor(PsiMethodCallExpression expression, + public static GuavaChainedConversionDescriptor buildCompoundDescriptor(PsiMethodCallExpression expression, PsiType to, TypeMigrationLabeler labeler) { List methodDescriptors = new SmartList(); diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaOptionalConversionRule.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaOptionalConversionRule.java index 3ab15954e179..1559ae812f78 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaOptionalConversionRule.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaOptionalConversionRule.java @@ -78,7 +78,14 @@ public class GuavaOptionalConversionRule extends BaseGuavaTypeConversionRule { } return null; } - return null; + if (!(context instanceof PsiMethodCallExpression)) { + return null; + } + final PsiClass aClass = method.getContainingClass(); + if (aClass == null || !GuavaFluentIterableConversionRule.FLUENT_ITERABLE.equals(aClass.getQualifiedName())) { + return null; + } + return GuavaFluentIterableConversionRule.buildCompoundDescriptor((PsiMethodCallExpression) context, to, labeler); } private PsiClass getParameterClass(PsiMethod method) { diff --git a/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java b/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java index 8fb82bdab029..9d334c1e7f6b 100644 --- a/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java +++ b/java/typeMigration/test/com/intellij/codeInsight/inspections/GuavaInspectionTest.java @@ -57,6 +57,10 @@ public class GuavaInspectionTest extends JavaCodeInsightFixtureTestCase { doTest(); } + public void testOptional3() { + doTest(); + } + public void testSimpleFluentIterable() { doTest(); } diff --git a/java/typeMigration/testData/inspections/guava/optional3.java b/java/typeMigration/testData/inspections/guava/optional3.java new file mode 100644 index 000000000000..2c679a1af7fb --- /dev/null +++ b/java/typeMigration/testData/inspections/guava/optional3.java @@ -0,0 +1,19 @@ +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.FluentIterable; + +import java.util.ArrayList; + +public class Main7 { + + public static void main(String[] args) { + Optional image = FluentIterable.from(new ArrayList()).firstMatch(getPredicate()); + if (image.isPresent()) { + System.out.println(image.get()); + } + } + + static Predicate getPredicate() { + return null; + } +} \ No newline at end of file diff --git a/java/typeMigration/testData/inspections/guava/optional3_after.java b/java/typeMigration/testData/inspections/guava/optional3_after.java new file mode 100644 index 000000000000..db95e659f5ce --- /dev/null +++ b/java/typeMigration/testData/inspections/guava/optional3_after.java @@ -0,0 +1,18 @@ +import com.google.common.base.Predicate; + +import java.util.ArrayList; +import java.util.Optional; + +public class Main7 { + + public static void main(String[] args) { + Optional image = new ArrayList().stream().filter(getPredicate()::apply).findFirst(); + if (image.isPresent()) { + System.out.println(image.get()); + } + } + + static Predicate getPredicate() { + return null; + } +} \ No newline at end of file