From c90b64b7e8e9953538264de7b5a454d9fee8a0c2 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 20 Mar 2017 16:21:29 +0700 Subject: [PATCH] ConstructionUtils#isCustomizedEmptyCollectionInitializer: check that it's actually a collection or a Map (otherwise it works on some crazy things like new java.util.zip.Deflater(compressionLevel)) --- .../src/com/siyeh/ig/psiutils/ConstructionUtils.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ConstructionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ConstructionUtils.java index 2600aec2654d..80222196474f 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ConstructionUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ConstructionUtils.java @@ -131,7 +131,11 @@ public class ConstructionUtils { PsiMethod constructor = ((PsiNewExpression)expression).resolveConstructor(); if (constructor == null) return false; PsiClass aClass = constructor.getContainingClass(); - if (aClass == null || aClass.getQualifiedName() == null || !aClass.getQualifiedName().startsWith("java.util.")) return false; + if (aClass != null && (aClass.getQualifiedName() == null || !aClass.getQualifiedName().startsWith("java.util."))) return false; + if (!com.intellij.psi.util.InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_UTIL_COLLECTION) && + !com.intellij.psi.util.InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_UTIL_MAP)) { + return false; + } Predicate allowedParameterType = t -> t instanceof PsiPrimitiveType || com.intellij.psi.util.InheritanceUtil.isInheritor(t, CommonClassNames.JAVA_LANG_CLASS); return Stream.of(constructor.getParameterList().getParameters()).map(PsiParameter::getType).allMatch(allowedParameterType);