function getData(element) {
	  var children = null;
	  var props = null;
	  var state = null;
	  var context = null;
	  var updater = null;
	  var name = null;
	  var type = null;
	  var text = null;
	  var publicInstance = null;
	  var nodeType = 'Native';
	  if (element._currentElement === null || element._currentElement === false) {
	    nodeType = 'Empty';
	  } else if (element._renderedComponent) {
	    nodeType = 'NativeWrapper';
	    children = [element._renderedComponent];
	    props = element._instance.props;
	    state = element._instance.state;
	    context = element._instance.context;
	    if (context && Object.keys(context).length === 0) {
	      context = null;
	    }
	  } else if (element._renderedChildren) {
	    children = childrenList(element._renderedChildren);
	  } else if (element._currentElement.props) {
	    // This is a native node without rendered children -- meaning the children
	    // prop is just a string.
	    children = element._currentElement.props.children;
	  }

	  if (!props && element._currentElement && element._currentElement.props) {
	    props = element._currentElement.props;
	  }

	  if (element._currentElement) {
	    type = element._currentElement.type;
	    if (typeof type === 'string') {
	      name = type;
	    } else if (element.getName) {
	      nodeType = 'Composite';
	      name = element.getName();
	      // 0.14 top-level wrapper
	      // TODO(jared): The backend should just act as if these don't exist.
	      if (element._renderedComponent && element._currentElement.props === element._renderedComponent._currentElement) {
	        nodeType = 'Wrapper';
	      }
	      if (name === null) {
	        name = 'No display name';
	      }
	    } else if (element._stringText) {
	      nodeType = 'Text';
	      text = element._stringText;
	    } else {
	      name = type.displayName || type.name || 'Unknown';
	    }
	  }

	  if (element._instance) {
	    var inst = element._instance;
	    updater = {
	      setState: inst.setState && inst.setState.bind(inst),
	      forceUpdate: inst.forceUpdate && inst.forceUpdate.bind(inst),
	      setInProps: inst.forceUpdate && setInProps.bind(null, inst),
	      setInState: inst.forceUpdate && setInState.bind(null, inst),
	      setInContext: inst.forceUpdate && setInContext.bind(null, inst)
	    };
	    publicInstance = inst;

	    // TODO: React ART currently falls in this bucket, but this doesn't
	    // actually make sense and we should clean this up after stabilizing our
	    // API for backends
	    if (inst._renderedChildren) {
	      children = childrenList(inst._renderedChildren);
	    }
	  }

	  return {
	    nodeType: nodeType,
	    type: type,
	    name: name,
	    props: props,
	    state: state,
	    context: context,
	    children: children,
	    text: text,
	    updater: updater,
	    publicInstance: publicInstance
	  };
	}
Convert a react internal instance to a sanitized data object.