func (td *TypeDef) ToContentType() (t *content.Type, err error) { if td.ct.Name.Relative != "" { return &td.ct, nil } t = &content.Type{} t.Name = td.Name() t.Flags = td.row.Flags.Convert() if ext, err := td.Extends(); err != nil && err != ErrInterface { return nil, err } else { t.Extends = ext } if imp, err := td.Implements(); err != nil { return nil, err } else { t.Implements = imp } if f, err := td.Fields(); err != nil { return nil, err } else { t.Fields = f } if f, err := td.Methods(); err != nil { return nil, err } else { t.Methods = f } idx := td.mu.Search(id_NestedClass, func(ti TableIndex) bool { if raw, err := ti.Data(); err == nil { c := raw.(*NestedClassRow) return c.NestedClass.Index() > td.index.Index() } return false }) if idx != nil { ci := idx.(*ConcreteTableIndex) table := td.mu.Tables[idx.Table()] for i := idx.Index(); i < table.Rows+1; i++ { ci.index = i if raw, err := ci.Data(); err != nil { return nil, err } else { row := raw.(*NestedClassRow) if row.EnclosingClass.Index() != td.index.Index() { break } else if td2, err := TypeDefFromIndex(row.NestedClass); err != nil { return nil, err } else { ct := content.Type{} ct.Name = td2.Name() ct.Flags = td2.row.Flags.Convert() if err := check(&ct, ct.Name); err != nil { log4go.Fine("Skipping nested type: %s, %+v, %+v", err, ct, td2.row) continue } t.Types = append(t.Types, ct) } } } } err = content.Validate(&t) td.ct = *t return }