List<RatedResolveResult> (@Nullable PyExpression object, @Nullable String name) { final ArrayList<RatedResolveResult> results = new ArrayList<>(); if (object != null && name != null) { final TypeEvalContext typeEvalContext = myContext.getTypeEvalContext(); final PyType type = typeEvalContext.getType(object); typeEvalContext.trace("Side text is %s, type is %s", object.getText(), type); if (type != null) { final List<? extends RatedResolveResult> res = PyTypeUtil .toStream(type) .nonNull() .flatCollection( it -> it instanceof PyClassLikeType && ((PyClassLikeType)it).isDefinition() ? resolveDefinitionMember((PyClassLikeType)it, object, name) : it.resolveMember(name, object, AccessDirection.of(myElement), myContext) ) .toList(); if (!ContainerUtil.isEmpty(res)) { results.addAll(res); } else if (typeEvalContext.tracing()) { VirtualFile vFile = null; if (type instanceof PyClassType) { final PyClass pyClass = ((PyClassType)type).getPyClass(); vFile = pyClass.getContainingFile().getVirtualFile(); } type.resolveMember(name, object, AccessDirection.of(myElement), myContext); typeEvalContext.trace("Could not resolve member %s in type %s from file %s", name, type, vFile); } } } return results; }