in internal/typeregistry/discover-implemented.go [13:47]
func (t *TypeRegistry) DiscoverImplementation(vt reflect.Type) (interfaces []api.FQN, overrides []api.Override) {
if strings.HasPrefix(vt.Name(), "jsiiProxy_") {
return
}
registeredOverrides := make(map[string]bool)
embeds := t.registeredBasesOf(vt)
pt := reflect.PtrTo(vt)
OuterLoop:
for fqn, members := range t.typeMembers {
iface := t.fqnToType[fqn]
if iface.Kind == classType || !(vt.AssignableTo(iface.Type) || pt.AssignableTo(iface.Type)) {
continue
}
for _, embed := range embeds {
if embed.AssignableTo(iface.Type) {
continue OuterLoop
}
}
// Found a hit, registering it's FQN in the list!
interfaces = append(interfaces, fqn)
// Now, collecting all members thereof
for _, override := range members {
if identifier := override.GoName(); !registeredOverrides[identifier] {
registeredOverrides[identifier] = true
overrides = append(overrides, override)
}
}
}
return
}