Files
sdk/pkg/analyzer/test/generated
Paul Berry 237bb3bb2f [analyzer] Represent FutureOr<...> as FutureOrTypeImpl.
This change introduces the class `FutureOrTypeImpl` to represent the
special types of the form `FutureOr<...>`, which were previously
represented as ordinary instances of `InterfaceType`.

This class mirrors the CFE's `FutureOrType` class. Adding it will
facilitate further code sharing between the analyzer and the CFE,
because it will allow code that's shared between the analyzer and CFE
to use `is` tests to recognize `FutureOr` types.

In a follow-up CL I intend to add a base class that is common to
analyzer and CFE `FutureOrType` representations.

Note that in https://dart-review.googlesource.com/c/sdk/+/396320, when
I introduced the `NullTypeImpl` class, I took pains to find all the
places in the analyzer that might call the `InterfaceTypeImpl`
constructor, and updated them so that if the type they are creating is
the `Null` type, they call the `NullTypeImpl` constructor
instead. That was tractable for the type `Null`, since there's
basically just a single `Null` type corresponding to a single
declaration in `dart:core`. At first I tried doing a similar thing for
`FutureOr`, but it proved to be a big pain, because `FutureOr` types
get created all over the place. It was difficult to be confident that
I'd updated all the necessary call sites. So instead I've put the
necessary logic in the `InterfaceTypeImpl` constructor itself (by
changing it into a factory constructor). This is a much lower risk
approach and I'm much happier with it. In a follow-up CL I'll change
the logic for `NullTypeImpl` to follow the same factory approach.

Change-Id: I54c6998f991456199076faeac995e433cc88845d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/396523
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2024-11-20 19:32:09 +00:00
..