Return all subclasses of this class, both direct and indirect. Return None if it is impossible to identify all subclasses, for example because we are performing separate compilation.
(self)
| 344 | return self.children == [] and not self.allow_interpreted_subclasses |
| 345 | |
| 346 | def subclasses(self) -> set[ClassIR] | None: |
| 347 | """Return all subclasses of this class, both direct and indirect. |
| 348 | |
| 349 | Return None if it is impossible to identify all subclasses, for example |
| 350 | because we are performing separate compilation. |
| 351 | """ |
| 352 | if self.children is None or self.allow_interpreted_subclasses: |
| 353 | return None |
| 354 | result = set(self.children) |
| 355 | for child in self.children: |
| 356 | if child.children: |
| 357 | child_subs = child.subclasses() |
| 358 | if child_subs is None: |
| 359 | return None |
| 360 | result.update(child_subs) |
| 361 | return result |
| 362 | |
| 363 | def concrete_subclasses(self) -> list[ClassIR] | None: |
| 364 | """Return all concrete (i.e. non-trait and non-abstract) subclasses. |
no test coverage detected