(nodes: Node[])
| 2988 | const MIN_SIBLINGS = 3; |
| 2989 | const siblingSuper = new Map<string, boolean>(); |
| 2990 | const isPolymorphicSibling = (nodes: Node[]): boolean => { |
| 2991 | for (const n of nodes) { |
| 2992 | for (const e of cg.getOutgoingEdges(n.id)) { |
| 2993 | if (e.kind !== 'implements' && e.kind !== 'extends') continue; |
| 2994 | let many = siblingSuper.get(e.target); |
| 2995 | if (many === undefined) { |
| 2996 | many = cg.getIncomingEdges(e.target) |
| 2997 | .filter((x) => x.kind === 'implements' || x.kind === 'extends').length >= MIN_SIBLINGS; |
| 2998 | siblingSuper.set(e.target, many); |
| 2999 | } |
| 3000 | if (many) return true; |
| 3001 | } |
| 3002 | } |
| 3003 | return false; |
| 3004 | }; |
| 3005 | |
| 3006 | // A file that DEFINES a polymorphic supertype (a class/interface with ≥ |
| 3007 | // MIN_SIBLINGS implementers) AND co-locates its subclasses is a redundant |
nothing calls this directly
no test coverage detected