92dabc8491
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>
65 lines
1.8 KiB
Dart
65 lines
1.8 KiB
Dart
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
library vm.target.flutter;
|
|
|
|
import 'package:kernel/ast.dart' show Component, Library;
|
|
import 'package:kernel/core_types.dart' show CoreTypes;
|
|
import 'package:kernel/target/targets.dart';
|
|
import 'package:kernel/transformations/track_widget_constructor_locations.dart';
|
|
import 'package:vm/target/vm.dart' show VmTarget;
|
|
|
|
class FlutterTarget extends VmTarget {
|
|
FlutterTarget(TargetFlags flags) : super(flags);
|
|
|
|
WidgetCreatorTracker _widgetTracker;
|
|
|
|
@override
|
|
String get name => 'flutter';
|
|
|
|
@override
|
|
bool get enableSuperMixins => true;
|
|
|
|
// This is the order that bootstrap libraries are loaded according to
|
|
// `runtime/vm/object_store.h`.
|
|
@override
|
|
List<String> get extraRequiredLibraries => const <String>[
|
|
'dart:async',
|
|
'dart:collection',
|
|
'dart:convert',
|
|
'dart:developer',
|
|
'dart:ffi',
|
|
'dart:_internal',
|
|
'dart:isolate',
|
|
'dart:math',
|
|
|
|
// The library dart:mirrors may be ignored by the VM, e.g. when built in
|
|
// PRODUCT mode.
|
|
'dart:mirrors',
|
|
|
|
'dart:profiler',
|
|
'dart:typed_data',
|
|
'dart:nativewrappers',
|
|
'dart:io',
|
|
|
|
// Required for flutter.
|
|
'dart:ui',
|
|
'dart:vmservice_io',
|
|
];
|
|
|
|
@override
|
|
void performPreConstantEvaluationTransformations(
|
|
Component component,
|
|
CoreTypes coreTypes,
|
|
List<Library> libraries,
|
|
DiagnosticReporter diagnosticReporter,
|
|
{void logger(String msg)}) {
|
|
if (flags.trackWidgetCreation) {
|
|
if (_widgetTracker == null) {
|
|
_widgetTracker = WidgetCreatorTracker();
|
|
}
|
|
_widgetTracker.transform(component, libraries);
|
|
}
|
|
}
|
|
}
|