From 1580b82b92f602e23b352c38c6e7e8dac97e9ad4 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 18 Jul 2017 18:37:17 +0300 Subject: [PATCH] PY-18816 Simplify stream of stub-safe resolve of qualified names --- .../python/psi/resolve/PyResolveUtil.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/resolve/PyResolveUtil.java b/python/src/com/jetbrains/python/psi/resolve/PyResolveUtil.java index 6d608ba3a0b1..edf10093b557 100644 --- a/python/src/com/jetbrains/python/psi/resolve/PyResolveUtil.java +++ b/python/src/com/jetbrains/python/psi/resolve/PyResolveUtil.java @@ -28,6 +28,7 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.types.PyClassLikeType; +import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; @@ -37,8 +38,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import static com.jetbrains.python.psi.PyUtil.as; - /** * @author vlan * @@ -164,19 +163,18 @@ public class PyResolveUtil { initialResults = StreamEx.of(unqualifiedResults); } final List remainingNames = qualifiedName.removeHead(1).getComponents(); - final StreamEx result = StreamEx.of(remainingNames).reduce(initialResults, (prev, name) -> + final StreamEx result = StreamEx.of(remainingNames).foldLeft(initialResults, (prev, name) -> prev .map(RatedResolveResult::getElement) - .map(elem -> as(elem, PyTypedElement.class)) - .nonNull() + .select(PyTypedElement.class) .map(context::getType) .nonNull() - .map(type -> type instanceof PyClassLikeType ? ((PyClassLikeType)type).toInstance() : type) - .flatMap(elemType -> { + .flatMap(type -> { + final PyType instanceType = type instanceof PyClassLikeType ? ((PyClassLikeType)type).toInstance() : type; final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(context); - final List results = elemType.resolveMember(name, null, AccessDirection.READ, resolveContext); + final List results = instanceType.resolveMember(name, null, AccessDirection.READ, resolveContext); return results != null ? StreamEx.of(results) : StreamEx.empty(); - }), (oldResults, newResults) -> newResults); + })); return PyUtil.filterTopPriorityResults(result.toArray(RatedResolveResult[]::new)); } }