@Override
        public void visitPyElement(@NotNull PyElement node) {
          if (parameterWasReassigned.get()) return;

          if (node instanceof ScopeOwner && node != owner) {
            return;
          }
          if (node instanceof PyQualifiedExpression expr) {
            final PyExpression qualifier = expr.getQualifier();
            if (qualifier != null) {
              final String attributeName = expr.getReferencedName();
              final PyExpression referencedExpr = node instanceof PyBinaryExpression && PyNames.isRightOperatorName(attributeName) ?
                                                  ((PyBinaryExpression)node).getRightExpression() : qualifier;
              if (attributeName != null && isReferenceToParameter(referencedExpr)) {
                usedAttributes.add(attributeName);
              }
            }
            else if (isReferenceToParameter(expr)) {
              StreamEx.of(getParametersByCallArgument(expr, context))
                      .nonNull()
                      .map(parameter -> parameter.getType(context))
                      .select(PyStructuralType.class)
                      .forEach(type -> usedAttributes.addAll(type.getAttributeNames()));
            }
          }
          super.visitPyElement(node);
        }
@Override
        public void visitPyElement(@NotNull PyElement node)