code: func (r *Resource) RefreshWithoutUpgrade(
  	s *terraform.InstanceState,
  	meta interface{}) (*terraform.InstanceState, error) {
  	// If the ID is already somehow blank, it doesn't exist
  	if s.ID == "" {
  		return nil, nil
  	}
  
  	rt := ResourceTimeout{}
  	if _, ok := s.Meta[TimeoutKey]; ok {
  		if err := rt.StateDecode(s); err != nil {
  			log.Printf("[ERR] Error decoding ResourceTimeout: %s", err)
  		}
  	}
  
  	if r.Exists != nil {
  		// Make a copy of data so that if it is modified it doesn't
  		// affect our Read later.
  		data, err := schemaMap(r.Schema).Data(s, nil)
  		data.timeouts = &rt
  
  		if err != nil {
  			return s, err
  		}
  
  		exists, err := r.Exists(data, meta)
  		if err != nil {
  			return s, err
  		}
  		if !exists {
  			return nil, nil
  		}
  	}
  
  	data, err := schemaMap(r.Schema).Data(s, nil)
  	data.timeouts = &rt
  	if err != nil {
  		return s, err
  	}
  
  	err = r.Read(data, meta)
  	state := data.State()
  	if state != nil && state.ID == "" {
  		state = nil
  	}
  
  	return r.recordCurrentSchemaVersion(state), err
  }
docs: // RefreshWithoutUpgrade reads the instance state, but does not call
  // MigrateState or the StateUpgraders, since those are now invoked in a
  // separate API call.
  // RefreshWithoutUpgrade is part of the new plugin shims.