String (PsiExpression collectionExpression, boolean force) { collectionExpression = replaceTypeParameters(collectionExpression); if (collectionExpression == null) return null; final PsiType type = collectionExpression.getType(); if (type instanceof PsiClassType) { final PsiClass resolved = ((PsiClassType)type).resolve(); LOG.assertTrue(resolved != null && resolved.getQualifiedName() != null, type); if (InheritanceUtil.isInheritor(resolved, CommonClassNames.JAVA_UTIL_COLLECTION)) { return collectionExpression.getText() + ".stream()"; } else { return "java.util.stream.StreamSupport.stream(" + collectionExpression.getText() + ".spliterator(), false)"; } } else if (type instanceof PsiArrayType) { return CommonClassNames.JAVA_UTIL_ARRAYS + ".stream(" + collectionExpression.getText() + ")"; } else if (force) { return collectionExpression.getText() + ".stream()"; } throw new AssertionError("type: " + type + " is unexpected for expression: " + collectionExpression.getText()); }