docs: function extractElementDescriptor(/* this: File, */ classRef, superRef, path) {
    const { node, scope } = path;
    const isMethod = path.isClassMethod();
  
    if (path.isPrivate()) {
      throw path.buildCodeFrameError(
        `Private ${
          isMethod ? "methods" : "fields"
        } in decorated classes are not supported yet.`,
      );
    }
  
    new ReplaceSupers(
      {
        methodPath: path,
        methodNode: node,
        objectRef: classRef,
        isStatic: node.static,
        superRef,
        scope,
        file: this,
      },
      true,
    ).replace();
  
    const properties = [
      prop("kind", t.stringLiteral(isMethod ? node.kind : "field")),
      prop("decorators", takeDecorators(node)),
      prop("static", node.static && t.booleanLiteral(true)),
      prop("key", getKey(node)),
    ].filter(Boolean);
  
    if (isMethod) {
      const id = node.computed ? null : node.key;
      t.toExpression(node);
      properties.push(prop("value", nameFunction({ node, id, scope }) || node));
    } else if (node.value) {
      properties.push(
        method("value", template.statements.ast`return ${node.value}`),
      );
    } else {
      properties.push(prop("value", scope.buildUndefinedNode()));
    }
  
    path.remove();
  
    return t.objectExpression(properties);
  }