static LookupElement @NotNull [] collectClassAttributeVariants(@NotNull PsiElement location,
                                                                 @NotNull PyClassPattern classPattern,
                                                                 @NotNull TypeEvalContext typeContext) {
    PyResolveContext resolveContext = PyResolveContext.defaultContext(typeContext);
    return StreamEx.of(resolveToClassTypes(classPattern, resolveContext))
      .flatMap(t -> StreamEx.of(t.getCompletionVariants("", location, new ProcessingContext())))
      .select(LookupElement.class)
      .filter(e -> isMeaningfulClassPatternAttribute(e))
      .map(e -> new KeywordAttributeLookupDecorator(e, location))
      .toArray(LookupElement.EMPTY_ARRAY);
  }
static LookupElement @NotNull [] collectClassAttributeVariants(@NotNull PsiElement location,
                                                                 @NotNull PyClassPattern classPattern,
                                                                 @NotNull TypeEvalContext typeContext)