diff --git a/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java b/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java index e98036cd4a6c..7c1944875894 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java @@ -27,6 +27,7 @@ import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.RedundantCastUtil; import com.intellij.refactoring.RefactoringBundle; import com.intellij.util.IncorrectOperationException; @@ -127,7 +128,7 @@ public class InlineUtil { if (substituted == null) break; copy.getTypeArgumentList().add(elementFactory.createTypeElement(substituted)); } - if (varType.equals(copy.getType())) { + if (varType.equals(copy.getType()) && copy.resolveMethodGenerics().isValidResult()) { ((PsiCallExpression)expr).getTypeArgumentList().replace(copy.getTypeArgumentList()); return (PsiMethod)resolved; } diff --git a/java/java-tests/testData/refactoring/inlineLocal/AvoidTypeSpecificationWhenPossibleToAvoid.java b/java/java-tests/testData/refactoring/inlineLocal/AvoidTypeSpecificationWhenPossibleToAvoid.java new file mode 100644 index 000000000000..641243b6c121 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/AvoidTypeSpecificationWhenPossibleToAvoid.java @@ -0,0 +1,12 @@ +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +class Main { + public Collection get() { + List list = IntStream.range(0, 100).boxed().collect(Collectors.toList()); + return list; + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineLocal/AvoidTypeSpecificationWhenPossibleToAvoid.java.after b/java/java-tests/testData/refactoring/inlineLocal/AvoidTypeSpecificationWhenPossibleToAvoid.java.after new file mode 100644 index 000000000000..5eb5c27d2595 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/AvoidTypeSpecificationWhenPossibleToAvoid.java.after @@ -0,0 +1,11 @@ +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +class Main { + public Collection get() { + return IntStream.range(0, 100).boxed().collect(Collectors.toList()); + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java index 57bb07abd225..6559b6bb6447 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java @@ -292,6 +292,10 @@ public class InlineLocalTest extends LightCodeInsightTestCase { "Variable 'hello' is accessed for writing"); } + public void testAvoidTypeSpecificationWhenPossibleToAvoid() throws Exception { + doTest(false); + } + private void doTest(final boolean inlineDef, String conflictMessage) throws Exception { try { doTest(inlineDef);