@Nullable
  private Ref<PyType> getDescriptorType(@Nullable PyType typeFromTargets, @NotNull TypeEvalContext context) {
    if (!isQualified()) return null;
    final PyClassLikeType targetType = as(typeFromTargets, PyClassLikeType.class);
    if (targetType == null || targetType.isDefinition()) return null;
    final PyResolveContext resolveContext = PyResolveContext.noProperties(context);
    final List<? extends RatedResolveResult> members = targetType.resolveMember(PyNames.GET, this, AccessDirection.READ,
                                                                                resolveContext);
    if (members == null || members.isEmpty()) return null;
    final PyType type = StreamEx.of(members)
      .map(RatedResolveResult::getElement)
      .select(PyCallable.class)
      .map(context::getReturnType)
      .collect(PyTypeUtil.toUnion());
    return Ref.create(type);
  }
@Nullable
  private Ref<PyType> getDescriptorType(@Nullable PyType typeFromTargets, @NotNull TypeEvalContext context)