func (p *ParamAnalyzer) recordTypes(root gen.DataType) {
	if o, ok := root.(*gen.ObjectDataType); ok {
		if _, found := p.ParamTypes[o.TypeName]; !found {
			p.ParamTypes[o.TypeName] = o
			for _, f := range o.Fields {
				p.recordTypes(f.Type)
			}
		}
	} else if a, ok := root.(*gen.ArrayDataType); ok {
		p.recordTypes(a.ElemType.Type)
	}
}
func (p *ParamAnalyzer) recordTypes(root gen.DataType) {
	if o, ok := root.(*gen.ObjectDataType); ok {
		if _, found := p.ParamTypes[o.TypeName]; !found {
			p.ParamTypes[o.TypeName] = o
			for _, f := range o.Fields {
				p.recordTypes(f.Type)
			}
		}
	} else if a, ok := root.(*gen.ArrayDataType); ok {
		p.recordTypes(a.ElemType.Type)
	}
}
// Recursively record all type declarations