void (@NotNull PsiMethodCallExpression call) { super.visitMethodCallExpression(call); if (!HASH_TABLE_CALLS.test(call)) return; final PsiExpression qualifier = call.getMethodExpression().getQualifierExpression(); if (qualifier == null) return; if (!TypeUtils.expressionHasTypeOrSubtype(qualifier, CommonClassNames.JAVA_UTIL_PROPERTIES)) return; if ("putAll".equals(call.getMethodExpression().getReferenceName())) { PsiExpression[] args = call.getArgumentList().getExpressions(); // putAll with properties or Map<String, String> argument is probably safe, // assuming that the original Properties or Map<String, String> object was safely filled if (args.length == 1) { PsiType type = args[0].getType(); if (TypeUtils.typeEquals(CommonClassNames.JAVA_UTIL_PROPERTIES, type) || TypeUtils.isJavaLangString(PsiUtil.substituteTypeParameter(type, CommonClassNames.JAVA_UTIL_MAP, 0, true)) && TypeUtils.isJavaLangString(PsiUtil.substituteTypeParameter(type, CommonClassNames.JAVA_UTIL_MAP, 1, true))) { return; } } } registerMethodCallError(call, call); }