f9503cda50
* Invocation handlers and InvocationAnalyzer are revised to reduce complexity of the code, improve precision and efficiency of analysis. * Invocation now has 2 subclasses: DirectInvocation and DispatchableInvocation; processing of invocations is moved to these subclasses and simplified. DirectInvocation is responsible for processing particular methods and fields, while DispatchableInvocation processes polymorphic calls by collecting targets and accurate receiver types for each target, and delegating to DirectInvocations for processing of each target. * Dynamic tear-offs and dynamic calls via getter/field are supported. * Invalidation of field initializers is implemented. * Implicit 'return null' at the end of a function is correctly detected. Issue: https://github.com/dart-lang/sdk/issues/30480 Change-Id: I3d2ea69fbc95e3eb9aee244ee909016dfcf79bee Reviewed-on: https://dart-review.googlesource.com/34507 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>