google / google/reflectable.dart

Support stand-alone subtype relationships

Open
#76 0 comments 0 reactions 1 assignee Claimed by @eernstg View on GitHub
enhancement
Dominant language
Dart
Stars
386
Forks
67
PR merge metrics
No merged PRs in 30d

Description

The discussion about issue #69 and #72 revealed that the operations `isSubtypeOf` and `isAssignableTo` are quite demanding in terms of reflection support, because they require that all the supertypes of the receiver resp. the receiver and the argument are covered. This is because, for instance, `aMirror.isSubtypeOf(bMirror)` will search through all supertypes of `aMirror` until it encounters `bMirror` (returning `true`) or the supertype graph has been visited completely (returning `false`), and the latter scenario calls for complete coverage of all the direct and indirect supertypes of `aMirror`.

With non-generic classes only, it would be rather easy to generate a matrix where the subtyping relationship is specified for every pair of covered classes, without needing reflection support for all the intermediate classes nor all other supertypes of the involved types. However, that strategy does not extend easily to generic classes.

At this point the best advice is probably to use `isSubtypeOf` and `isAssignableTo` sparingly, especially in cases where the reflection support is requested for a complete subtype hierarchy. In cases that differ substantially from this it is likely to be rather expensive in terms of program size to cover all the classes needed.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.