コード例 #1
0
ファイル: resolver.go プロジェクト: dsymonds/gotoc
func (r *resolver) resolveExtension(s *scope, ext *ast.Extension) error {
	o := r.resolveName(s, ext.Extendee)
	if o == nil {
		return fmt.Errorf("failed to resolve name %q", ext.Extendee)
	}
	m, ok := o.last().(*ast.Message)
	if !ok {
		return fmt.Errorf("extendee %q resolved to non-message %T", ext.Extendee, o.last())
	}
	ext.ExtendeeType = m
	// Resolve fields.
	for _, field := range ext.Fields {
		ft, ok := r.resolveFieldTypeName(s, field.TypeName)
		if !ok {
			return fmt.Errorf("failed to resolve name %q", field.TypeName)
		}
		field.Type = ft

		// TODO: Map fields should be forbidden?
	}
	return nil
}