// empty returns true if the receving module state is contributing nothing
// to the state. In other words, it returns true if the module could be
// removed from the state altogether without changing the meaning of the state.
//
// In practice a module containing no objects is the same as a non-existent
// module, and so we can opportunistically clean up once a module becomes
// empty on the assumption that it will be re-added if needed later.
empty returns true if the receving module state is contributing nothing
to the state. In other words, it returns true if the module could be
removed from the state altogether without changing the meaning of the state.

In practice a module containing no objects is the same as a non-existent
module, and so we can opportunistically clean up once a module becomes
empty on the assumption that it will be re-added if needed later.
// empty returns true if the receving module state is contributing nothing // to the state . In other words it returns true if the module could be // removed from the state altogether without changing the meaning of the state . // // In practice a module containing no objects is the same as a non - existent // module and so we can opportunistically clean up once a module becomes // empty on the assumption that it will be re - added if needed later .
func (ms *Module) empty() bool {
	if ms == nil {
		return true
	}
	return (len(ms.Resources) == 0 &&
		len(ms.OutputValues) == 0 &&
		len(ms.LocalValues) == 0)
}
func ( ms * Module ) empty ( ) bool { if ms == nil { return true } return ( len ( ms . Resources ) == 0 && len ( ms . OutputValues ) == 0 && len ( ms . LocalValues ) == 0 ) }
empty returns true if the receving module state is contributing nothing
to the state.
empty returns true if the receving module state is contributing nothing to the state .
// This must be updated to cover any new collections added to Module // in future.