func (g *Graph) Populate() error {
	for _, o := range g.named {
		if o.Complete {
			continue
		}

		if err := g.populateExplicit(o); err != nil {
			return err
		}
	}

	// We append and modify our slice as we go along, so we don't use a standard
	// range loop, and do a single pass thru each object in our graph.
	i := 0
	for {
		if i == len(g.unnamed) {
			break
		}

		o := g.unnamed[i]
		i++

		if o.Complete {
			continue
		}

		if err := g.populateExplicit(o); err != nil {
			return err
		}
	}

	// A Second pass handles injecting Interface values to ensure we have created
	// all concrete types first.
	for _, o := range g.unnamed {
		if o.Complete {
			continue
		}

		if err := g.populateUnnamedInterface(o); err != nil {
			return err
		}
	}

	for _, o := range g.named {
		if o.Complete {
			continue
		}

		if err := g.populateUnnamedInterface(o); err != nil {
			return err
		}
	}

	return nil
}
func (g *Graph) Populate() error {
	for _, o := range g.named {
		if o.Complete {
			continue
		}

		if err := g.populateExplicit(o); err != nil {
			return err
		}
	}

	
	
	i := 0
	for {
		if i == len(g.unnamed) {
			break
		}

		o := g.unnamed[i]
		i++

		if o.Complete {
			continue
		}

		if err := g.populateExplicit(o); err != nil {
			return err
		}
	}

	
	
	for _, o := range g.unnamed {
		if o.Complete {
			continue
		}

		if err := g.populateUnnamedInterface(o); err != nil {
			return err
		}
	}

	for _, o := range g.named {
		if o.Complete {
			continue
		}

		if err := g.populateUnnamedInterface(o); err != nil {
			return err
		}
	}

	return nil
}
func ( g * Graph ) Populate ( ) error { for _ , o := range g . named { if o . Complete { continue } if err := g . populateExplicit ( o ) ; err != nil { return err } } // We append and modify our slice as we go along, so we don't use a standard // range loop, and do a single pass thru each object in our graph. i := 0 for { if i == len ( g . unnamed ) { break } o := g . unnamed [ i ] i ++ if o . Complete { continue } if err := g . populateExplicit ( o ) ; err != nil { return err } } // A Second pass handles injecting Interface values to ensure we have created // all concrete types first. for _ , o := range g . unnamed { if o . Complete { continue } if err := g . populateUnnamedInterface ( o ) ; err != nil { return err } } for _ , o := range g . named { if o . Complete { continue } if err := g . populateUnnamedInterface ( o ) ; err != nil { return err } } return nil }
// Populate the incomplete Objects.
Populate the incomplete Objects .