code: func (n *NodeRefreshableManagedResourceInstance) EvalTree() EvalNode {
  	addr := n.ResourceInstanceAddr()
  
  	// Eval info is different depending on what kind of resource this is
  	switch addr.Resource.Resource.Mode {
  	case addrs.ManagedResourceMode:
  		if n.ResourceState == nil {
  			log.Printf("[TRACE] NodeRefreshableManagedResourceInstance: %s has no existing state to refresh", addr)
  			return n.evalTreeManagedResourceNoState()
  		}
  		log.Printf("[TRACE] NodeRefreshableManagedResourceInstance: %s will be refreshed", addr)
  		return n.evalTreeManagedResource()
  
  	case addrs.DataResourceMode:
  		// Get the data source node. If we don't have a configuration
  		// then it is an orphan so we destroy it (remove it from the state).
  		var dn GraphNodeEvalable
  		if n.Config != nil {
  			dn = &NodeRefreshableDataResourceInstance{
  				NodeAbstractResourceInstance: n.NodeAbstractResourceInstance,
  			}
  		} else {
  			dn = &NodeDestroyableDataResourceInstance{
  				NodeAbstractResourceInstance: n.NodeAbstractResourceInstance,
  			}
  		}
  
  		return dn.EvalTree()
  	default:
  		panic(fmt.Errorf("unsupported resource mode %s", addr.Resource.Resource.Mode))
  	}
  }
docs: // GraphNodeEvalable