Iterators replaced with streams where appropriate

This commit is contained in:
Andrey Breslav
2014-04-29 15:51:16 +04:00
parent 19719f9747
commit c6bd4a22ef
11 changed files with 21 additions and 24 deletions
@@ -43,7 +43,7 @@ class LazyJavaAnnotations(c: LazyJavaResolverContextWithTypes, val annotationOwn
[suppress("UNCHECKED_CAST")] // any iterator can be cast to MutableIterator [suppress("UNCHECKED_CAST")] // any iterator can be cast to MutableIterator
override fun iterator(): MutableIterator<AnnotationDescriptor> override fun iterator(): MutableIterator<AnnotationDescriptor>
= annotationOwner.getAnnotations().iterator().map { annotationDescriptors(it) }.filterNotNull() as MutableIterator = annotationOwner.getAnnotations().stream().map { annotationDescriptors(it) }.filterNotNull().iterator() as MutableIterator
override fun isEmpty() = iterator().hasNext() override fun isEmpty() = iterator().hasNext()
} }
@@ -196,7 +196,7 @@ class LazyJavaClassDescriptor(
listOf(jlObject ?: KotlinBuiltIns.getInstance().getAnyType()) listOf(jlObject ?: KotlinBuiltIns.getInstance().getAnyType())
} }
else else
supertypes.iterator() supertypes.stream()
.map { .map {
supertype -> supertype ->
c.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes()) c.typeResolver.transformJavaType(supertype, TypeUsage.SUPERTYPE.toAttributes())
@@ -61,7 +61,7 @@ public abstract class LazyJavaMemberScope(
-> ->
val methods = memberIndex().findMethodsByName(name) val methods = memberIndex().findMethodsByName(name)
val functions = LinkedHashSet( val functions = LinkedHashSet(
methods.iterator() methods.stream()
// values() and valueOf() are added manually, see LazyJavaClassDescriptor::getClassObjectDescriptor() // values() and valueOf() are added manually, see LazyJavaClassDescriptor::getClassObjectDescriptor()
.filter{ m -> !DescriptorResolverUtils.shouldBeInEnumClassObject(m) } .filter{ m -> !DescriptorResolverUtils.shouldBeInEnumClassObject(m) }
.flatMap { .flatMap {
@@ -69,9 +69,9 @@ public abstract class LazyJavaMemberScope(
val function = resolveMethodToFunctionDescriptor(m, true) val function = resolveMethodToFunctionDescriptor(m, true)
val samAdapter = resolveSamAdapter(function) val samAdapter = resolveSamAdapter(function)
if (samAdapter != null) if (samAdapter != null)
listOf(function, samAdapter).iterator() listOf(function, samAdapter).stream()
else else
listOf(function).iterator() listOf(function).stream()
}.toList()) }.toList())
if (_containingDeclaration is JavaPackageFragmentDescriptor) { if (_containingDeclaration is JavaPackageFragmentDescriptor) {
@@ -90,7 +90,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun computeMemberIndex(): MemberIndex = computeMemberIndexForSamConstructors(EMPTY_MEMBER_INDEX) override fun computeMemberIndex(): MemberIndex = computeMemberIndexForSamConstructors(EMPTY_MEMBER_INDEX)
override fun getAllClassNames(): Collection<Name> { override fun getAllClassNames(): Collection<Name> {
return jPackage.getClasses().iterator() return jPackage.getClasses().stream()
.filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS } .filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS }
.map { c -> c.getName() }.toList() .map { c -> c.getName() }.toList()
} }
@@ -126,7 +126,7 @@ public class LazyPackageFragmentScopeForJavaClass(
// We do not filter by hasStaticMembers() because it's slow (e.g. it triggers light class generation), // We do not filter by hasStaticMembers() because it's slow (e.g. it triggers light class generation),
// and there's no harm in having some names in the result that can not be resolved // and there's no harm in having some names in the result that can not be resolved
override fun getSubPackages(): Collection<FqName> = jClass.getInnerClasses().iterator() override fun getSubPackages(): Collection<FqName> = jClass.getInnerClasses().stream()
.filter { c -> c.isStatic() } .filter { c -> c.isStatic() }
.map { c -> c.getFqName().sure("Nested class has no fqName: $c}") }.toList() .map { c -> c.getFqName().sure("Nested class has no fqName: $c}") }.toList()
} }
@@ -55,8 +55,8 @@ open class ClassMemberIndex(val jClass: JavaClass, filter: (JavaMember) -> Boole
!DescriptorResolverUtils.isObjectMethodInInterface(m) !DescriptorResolverUtils.isObjectMethodInInterface(m)
} }
private val methods = jClass.getMethods().iterator().filter(methodFilter).groupBy { m -> m.getName() } private val methods = jClass.getMethods().stream().filter(methodFilter).groupBy { m -> m.getName() }
private val fields = jClass.getFields().iterator().filter(memberFilter).valuesToMap { m -> m.getName() } private val fields = jClass.getFields().stream().filter(memberFilter).valuesToMap { m -> m.getName() }
override fun findMethodsByName(name: Name): Collection<JavaMethod> { override fun findMethodsByName(name: Name): Collection<JavaMethod> {
return methods[name] ?: listOf() return methods[name] ?: listOf()
@@ -65,5 +65,5 @@ open class ClassMemberIndex(val jClass: JavaClass, filter: (JavaMember) -> Boole
override fun getAllMethodNames(): Collection<Name> = jClass.getAllMethods().iterator().filter(methodFilter).map { m -> m.getName() }.toList() override fun getAllMethodNames(): Collection<Name> = jClass.getAllMethods().iterator().filter(methodFilter).map { m -> m.getName() }.toList()
override fun findFieldByName(name: Name): JavaField? = fields[name] override fun findFieldByName(name: Name): JavaField? = fields[name]
override fun getAllFieldNames() = jClass.getAllFields().iterator().filter(memberFilter).map { m -> m.getName() }.toList() override fun getAllFieldNames() = jClass.getAllFields().stream().filter(memberFilter).map { m -> m.getName() }.toList()
} }
@@ -19,8 +19,7 @@ package org.jetbrains.jet.utils
import java.util.LinkedHashMap import java.util.LinkedHashMap
import java.util.ArrayList import java.util.ArrayList
[deprecated("use streams instead")] public fun <K, V> Stream<V>.valuesToMap(key: (V) -> K): Map<K, V> {
public fun <K, V> Iterator<V>.valuesToMap(key: (V) -> K): Map<K, V> {
val map = LinkedHashMap<K, V>() val map = LinkedHashMap<K, V>()
for (v in this) { for (v in this) {
map[key(v)] = v map[key(v)] = v
@@ -28,8 +27,7 @@ public fun <K, V> Iterator<V>.valuesToMap(key: (V) -> K): Map<K, V> {
return map return map
} }
[deprecated("use streams instead")] public fun <K, V> Stream<K>.keysToMap(value: (K) -> V): Map<K, V> {
public fun <K, V> Iterator<K>.keysToMap(value: (K) -> V): Map<K, V> {
val map = LinkedHashMap<K, V>() val map = LinkedHashMap<K, V>()
for (k in this) { for (k in this) {
map[k] = value(k) map[k] = value(k)
@@ -37,8 +35,7 @@ public fun <K, V> Iterator<K>.keysToMap(value: (K) -> V): Map<K, V> {
return map return map
} }
[deprecated("use streams instead")] public fun <K, V: Any> Stream<K>.keysToMapExceptNulls(value: (K) -> V?): Map<K, V> {
public fun <K, V: Any> Iterator<K>.keysToMapExceptNulls(value: (K) -> V?): Map<K, V> {
val map = LinkedHashMap<K, V>() val map = LinkedHashMap<K, V>()
for (k in this) { for (k in this) {
val v = value(k) val v = value(k)
@@ -57,7 +57,7 @@ class KotlinOverrideTreeStructure(project: Project, val element: PsiElement) : H
} }
return javaTreeStructures return javaTreeStructures
.iterator() .stream()
.map (::buildChildrenByTreeStructure) .map (::buildChildrenByTreeStructure)
.reduce { (a, b) -> ContainerUtil.union(a.toSet(), b.toSet()).copyToArray() } .reduce { (a, b) -> ContainerUtil.union(a.toSet(), b.toSet()).copyToArray() }
} }
@@ -265,7 +265,7 @@ public class MoveKotlinTopLevelDeclarationsProcessor(project: Project, val optio
} }
getTransaction()!!.getElementListener(oldDeclaration).elementMoved(newDeclaration) getTransaction()!!.getElementListener(oldDeclaration).elementMoved(newDeclaration)
for ((oldElement, newElement) in oldLightElements.iterator() zip newDeclaration.toLightElements().iterator()) { for ((oldElement, newElement) in oldLightElements.stream() zip newDeclaration.toLightElements().stream()) {
oldToNewElementsMapping[oldElement] = newElement oldToNewElementsMapping[oldElement] = newElement
} }
} }
@@ -105,7 +105,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
return searchInfo return searchInfo
} }
fun findUsagesByJavaProcessor(elements: Iterator<PsiElement>, insideDeleted: Condition<PsiElement>): Condition<PsiElement> = fun findUsagesByJavaProcessor(elements: Stream<PsiElement>, insideDeleted: Condition<PsiElement>): Condition<PsiElement> =
elements elements
.map { element -> findUsagesByJavaProcessor(element, true)?.getInsideDeletedCondition() } .map { element -> findUsagesByJavaProcessor(element, true)?.getInsideDeletedCondition() }
.filterNotNull() .filterNotNull()
@@ -114,7 +114,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
fun findUsagesByJavaProcessor(jetDeclaration: JetDeclaration): NonCodeUsageSearchInfo { fun findUsagesByJavaProcessor(jetDeclaration: JetDeclaration): NonCodeUsageSearchInfo {
return NonCodeUsageSearchInfo( return NonCodeUsageSearchInfo(
findUsagesByJavaProcessor( findUsagesByJavaProcessor(
jetDeclaration.toLightElements().iterator(), jetDeclaration.toLightElements().stream(),
getIgnoranceCondition() getIgnoranceCondition()
), ),
jetDeclaration jetDeclaration
@@ -123,7 +123,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
fun findKotlinDeclarationUsages(declaration: JetDeclaration): NonCodeUsageSearchInfo { fun findKotlinDeclarationUsages(declaration: JetDeclaration): NonCodeUsageSearchInfo {
ReferencesSearch.search(declaration, declaration.getUseScope()) ReferencesSearch.search(declaration, declaration.getUseScope())
.iterator() .stream()
.filterNot { reference -> getIgnoranceCondition().value(reference.getElement()) } .filterNot { reference -> getIgnoranceCondition().value(reference.getElement()) }
.mapTo(usages) { reference -> .mapTo(usages) { reference ->
reference.getElement().getParentByType(javaClass<JetImportDirective>())?.let { importDirective -> reference.getElement().getParentByType(javaClass<JetImportDirective>())?.let { importDirective ->
@@ -214,7 +214,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
if (declarationDescriptor !is CallableMemberDescriptor) return null if (declarationDescriptor !is CallableMemberDescriptor) return null
return declarationDescriptor.getOverriddenDescriptors() return declarationDescriptor.getOverriddenDescriptors()
.iterator() .stream()
.filter { overridenDescriptor -> overridenDescriptor.getModality() == Modality.ABSTRACT } .filter { overridenDescriptor -> overridenDescriptor.getModality() == Modality.ABSTRACT }
.mapTo(ArrayList<String>()) { overridenDescriptor -> .mapTo(ArrayList<String>()) { overridenDescriptor ->
JetBundle.message( JetBundle.message(
@@ -64,7 +64,7 @@ fun PsiElement.removeOverrideModifier() {
fun PsiMethod.cleanUpOverrides() { fun PsiMethod.cleanUpOverrides() {
val superMethods = findSuperMethods(true) val superMethods = findSuperMethods(true)
for (overridingMethod in OverridingMethodsSearch.search(this, true).findAll()) { for (overridingMethod in OverridingMethodsSearch.search(this, true).findAll()) {
val currentSuperMethods = overridingMethod.findSuperMethods(true).iterator() + superMethods.iterator() val currentSuperMethods = overridingMethod.findSuperMethods(true).stream() + superMethods.stream()
if (currentSuperMethods.all { superMethod -> superMethod.unwrapped == unwrapped }) { if (currentSuperMethods.all { superMethod -> superMethod.unwrapped == unwrapped }) {
overridingMethod.unwrapped?.removeOverrideModifier() overridingMethod.unwrapped?.removeOverrideModifier()
} }
@@ -46,7 +46,7 @@ public open class KotlinDirectInheritorsSearcher() : QueryExecutorBase<PsiClass,
if (scope == null) return if (scope == null) return
ApplicationManager.getApplication()?.runReadAction { ApplicationManager.getApplication()?.runReadAction {
JetSuperClassIndex.getInstance().get(name, baseClass.getProject(), scope).iterator() JetSuperClassIndex.getInstance().get(name, baseClass.getProject(), scope).stream()
.map { candidate -> JetSourceNavigationHelper.getOriginalPsiClassOrCreateLightClass(candidate)} .map { candidate -> JetSourceNavigationHelper.getOriginalPsiClassOrCreateLightClass(candidate)}
.filterNotNull() .filterNotNull()
.filter { candidate -> candidate.isInheritor(baseClass, false) } .filter { candidate -> candidate.isInheritor(baseClass, false) }