From 7d7c49c5a63f31443dd07a977bef09bde55bce6d Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 9 Dec 2015 17:48:24 +0100 Subject: [PATCH] IG: don't expect an array of generic type in "Suspicious 'Collection.toArray()' call" inspection --- .../bugs/SuspiciousToArrayCallInspection.java | 19 ++++++++++++++++++- .../SuspiciousToArrayCallInspectionTest.java | 13 ++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/SuspiciousToArrayCallInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/SuspiciousToArrayCallInspection.java index 8037dc6dea09..ad6dc11072a1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/SuspiciousToArrayCallInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/SuspiciousToArrayCallInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2013 Bas Leijdekkers + * Copyright 2005-2015 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import com.intellij.psi.util.InheritanceUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.psiutils.TypeUtils; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -124,6 +125,22 @@ public class SuspiciousToArrayCallInspection extends BaseInspection { if (componentType.isAssignableFrom(parameter)) { return; } + if (parameter instanceof PsiClassType) { + final PsiClassType classType = (PsiClassType)parameter; + final PsiClass aClass = classType.resolve(); + if (aClass instanceof PsiTypeParameter) { + final PsiTypeParameter typeParameter = (PsiTypeParameter)aClass; + final PsiReferenceList extendsList = typeParameter.getExtendsList(); + final PsiClassType[] types = extendsList.getReferencedTypes(); + if (types.length == 0) { + registerError(argument, TypeUtils.getObjectType(argument)); + } + else if (types.length == 1) { + registerError(argument, types[0]); + } + return; + } + } registerError(argument, parameter); } } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/SuspiciousToArrayCallInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/SuspiciousToArrayCallInspectionTest.java index 165a32e3b6c8..674c832471dd 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/SuspiciousToArrayCallInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/SuspiciousToArrayCallInspectionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,6 +35,17 @@ public class SuspiciousToArrayCallInspectionTest extends LightInspectionTestCase "}"); } + public void testGenerics() { + doTest("import java.util.*;" + + "class K {\n" + + " List list = new ArrayList<>();\n" + + "\n" + + " String[] m() {\n" + + " return list.toArray(/*Array of type 'java.lang.Integer[]' expected*/new String[list.size()]/**/);\n" + + " }\n" + + "}"); + } + @Override protected InspectionProfileEntry getInspection() { return new SuspiciousToArrayCallInspection();