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))

This commit is contained in:
Tagir Valeev
2017-03-20 16:26:39 +07:00
parent 140d771f36
commit c90b64b7e8
@@ -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<PsiType> 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);