fcb4c671b0
Instead of chasing exports in each FileState library individually, we perform recursive computation, and remember computed export namespaces for visited branches. Cycles require special handling - we don't remember partial namespaces, we compute one full export namespace and so break the cycle; then the rest also can be computed in one pass. This makes Analysis Server a bit faster for some Quick Fixes, and what is more important, is a playground to test the idea of makeing the similar change to _Prelinker. We spend 8% of total analysis time chasing long chains of exports in Flutter. R=brianwilkerson@google.com, devoncarew@google.com Change-Id: Ia45cff9a7fb24aac2e72fe50752274b764462017 Reviewed-on: https://dart-review.googlesource.com/51442 Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>