diff --git a/java/java-impl/src/com/intellij/codeInspection/miscGenerics/RedundantTypeArgsInspection.java b/java/java-impl/src/com/intellij/codeInspection/miscGenerics/RedundantTypeArgsInspection.java index 85ae19c6a7d7..133c517b12e7 100644 --- a/java/java-impl/src/com/intellij/codeInspection/miscGenerics/RedundantTypeArgsInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/miscGenerics/RedundantTypeArgsInspection.java @@ -106,12 +106,11 @@ public class RedundantTypeArgsInspection extends GenericsInspectionToolBase { if (typeParameters.length == typeArguments.length) { final PsiParameter[] parameters = method.getParameterList().getParameters(); PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(expression.getProject()).getResolveHelper(); - for (int i = 0; i < typeParameters.length; i++) { + final PsiSubstitutor psiSubstitutor = resolveHelper + .inferTypeArguments(typeParameters, parameters, argumentList.getExpressions(), PsiSubstitutor.EMPTY, expression, DefaultParameterTypeInferencePolicy.INSTANCE); + for (int i = 0, length = typeParameters.length; i < length; i++) { PsiTypeParameter typeParameter = typeParameters[i]; - final PsiType inferredType = resolveHelper.inferTypeForMethodTypeParameter(typeParameter, parameters, - argumentList.getExpressions(), - resolveResult.getSubstitutor(), expression, - DefaultParameterTypeInferencePolicy.INSTANCE); + final PsiType inferredType = psiSubstitutor.getSubstitutionMap().get(typeParameter); if (!typeArguments[i].equals(inferredType)) return; if (PsiUtil.resolveClassInType(method.getReturnType()) == typeParameter && PsiPrimitiveType.getUnboxedType(inferredType) != null) return; } diff --git a/java/java-tests/testData/inspection/redundantTypeArgs/BoundInference.java b/java/java-tests/testData/inspection/redundantTypeArgs/BoundInference.java new file mode 100644 index 000000000000..61bfb5f09f69 --- /dev/null +++ b/java/java-tests/testData/inspection/redundantTypeArgs/BoundInference.java @@ -0,0 +1,31 @@ +import java.util.*; + +class ArraysUtil { + public static List asList(T... a) { + List result = new ArrayList(); + result.addAll(Arrays.asList(a)); + return result; + } + + public static List asCollection(T... a) { + return ArraysUtil.asList(a); + } + + public static void main(String[] args) { + asCollection(); + } +} + +class ArraysUtil1 { + public static List asList(T... a) { + return null; + } + + public static List asCollection(Integer... a) { + return ArraysUtil1.asList(a); + } + + public static void main(String[] args) { + asCollection(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantTypeArgsInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantTypeArgsInspectionTest.java index ff20eecc3f6f..53aba55cf689 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantTypeArgsInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantTypeArgsInspectionTest.java @@ -30,7 +30,11 @@ public class RedundantTypeArgsInspectionTest extends JavaCodeInsightFixtureTestC doTest(); } - public void testConditionalExpression() throws Throwable { // javac non-boxing: IDEA-53984 + public void testConditionalExpression() throws Throwable { + doTest(); + } + + public void testBoundInference() throws Throwable { doTest(); } } \ No newline at end of file