Cache the WidgetCreatorTracker.

This fixes the problem when the flutter bots run multiple tests from the flutter tool e.g.,
  flutter test first_widget_test.dart second_widget_test.dart

The first test causes the set of libraries, particularly Flutter's framework library, to be passed
to the transformer. The transformer needs the 'Widget' class located in Flutter's framework
library. The transformer on the first test works.  Each subsequent test only the libraries not in
the prior test are passed, without the framework library, the transformer is unable to find the
'Widget' class and the widget transformer fails to run.

This fix allows the use of a nice speedup to hot-reloading Flutter applications when
--track-widget-creation is enabled and it allows us to enable --track-widget-creation by default,
for command line Flutter users.

This fixes issue https://github.com/dart-lang/sdk/issues/36640

R=jacobr@google.com,askesc@google.com

Change-Id: I9a9c9dc69995122d0f7a7a3e1dfaebf57abb4afb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105661
Commit-Queue: Terry Lucas <terry@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Jacob Richman <jacobr@google.com>
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index e954139..c1635a0 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -20,6 +20,8 @@
 
   ClassHierarchy hierarchy;
 
+  WidgetCreatorTracker _widgetTracker;
+
   @override
   bool get legacyMode => false;
 
@@ -117,7 +119,10 @@
       DiagnosticReporter diagnosticReporter,
       {void logger(String msg)}) {
     if (flags.trackWidgetCreation) {
-      WidgetCreatorTracker().transform(component, libraries);
+      if (_widgetTracker == null) {
+        _widgetTracker = WidgetCreatorTracker();
+      }
+      _widgetTracker.transform(component, libraries);
     }
   }
 
diff --git a/pkg/vm/lib/target/flutter.dart b/pkg/vm/lib/target/flutter.dart
index 02673e7..ed4683c 100644
--- a/pkg/vm/lib/target/flutter.dart
+++ b/pkg/vm/lib/target/flutter.dart
@@ -12,6 +12,8 @@
 class FlutterTarget extends VmTarget {
   FlutterTarget(TargetFlags flags) : super(flags);
 
+  WidgetCreatorTracker _widgetTracker;
+
   @override
   String get name => 'flutter';
 
@@ -53,7 +55,10 @@
       DiagnosticReporter diagnosticReporter,
       {void logger(String msg)}) {
     if (flags.trackWidgetCreation) {
-      new WidgetCreatorTracker().transform(component, libraries);
+      if (_widgetTracker == null) {
+        _widgetTracker = WidgetCreatorTracker();
+      }
+      _widgetTracker.transform(component, libraries);
     }
   }
 }