func()

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
}