diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index 571bb7caee5..b902e551c9b 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -326,6 +326,9 @@ abstract class StatelessWidget extends Widget { /// provides the set of inherited widgets for this location in the tree. @protected Widget build(BuildContext context); + + /// Trampoline to make the [build] closure library-accessible. + WidgetBuilder get _build => build; } /// StatefulWidgets provide the configuration for @@ -484,6 +487,9 @@ abstract class State { @protected Widget build(BuildContext context); + /// Trampoline to make the [build] closure library-accessible. + WidgetBuilder get _build => build; + /// Called when an Inherited widget in the ancestor chain has changed. Usually /// there is nothing to do here; whenever this is called, build() is also /// called. @@ -1606,7 +1612,7 @@ abstract class ComponentElement extends BuildableElement { /// Instantiation of [StatelessWidget]s. class StatelessElement extends ComponentElement { StatelessElement(StatelessWidget widget) : super(widget) { - _builder = widget.build; + _builder = widget._build; } @override @@ -1616,14 +1622,14 @@ class StatelessElement extends ComponentElement { void update(StatelessWidget newWidget) { super.update(newWidget); assert(widget == newWidget); - _builder = widget.build; + _builder = widget._build; _dirty = true; rebuild(); } @override void _reassemble() { - _builder = widget.build; + _builder = widget._build; super._reassemble(); } } @@ -1636,7 +1642,7 @@ class StatefulElement extends ComponentElement { assert(_state._element == null); _state._element = this; assert(_builder == _buildNothing); - _builder = _state.build; + _builder = _state._build; assert(_state._config == null); _state._config = widget; assert(_state._debugLifecycleState == _StateLifecycle.created); @@ -1647,7 +1653,7 @@ class StatefulElement extends ComponentElement { @override void _reassemble() { - _builder = state.build; + _builder = state._build; super._reassemble(); } diff --git a/packages/flutter_test/pubspec.yaml b/packages/flutter_test/pubspec.yaml index 7d6e8302759..0a9936f99b9 100644 --- a/packages/flutter_test/pubspec.yaml +++ b/packages/flutter_test/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: # We don't actually depend on 'analyzer', but 'test' and 'flutter_tools' do. # We pin the version of analyzer we depend on to avoid version skew across our # packages. - analyzer: 0.27.4-alpha.9 + analyzer: 0.27.4-alpha.14 flutter: path: ../flutter diff --git a/packages/flutter_tools/lib/src/dart/analysis.dart b/packages/flutter_tools/lib/src/dart/analysis.dart index 1ee4e8a6b16..2b1a95b815d 100644 --- a/packages/flutter_tools/lib/src/dart/analysis.dart +++ b/packages/flutter_tools/lib/src/dart/analysis.dart @@ -90,22 +90,30 @@ class AnalysisDriver { List _getResolvers(InternalAnalysisContext context, Map> packageMap) { - DirectoryBasedDartSdk sdk = new DirectoryBasedDartSdk(new JavaFile(sdkDir)); - sdk.analysisOptions = context.analysisOptions; - // TODO(pq): re-enable once we have a proper story for SDK summaries - // in the presence of embedders (https://github.com/dart-lang/sdk/issues/26467). - sdk.useSummary = false; + + + // Create our list of resolvers. List resolvers = []; + + // Look for an embedder. + EmbedderYamlLocator locator = new EmbedderYamlLocator(packageMap); + if (locator.embedderYamls.isNotEmpty) { + // Create and configure an embedded SDK. + EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); + // Fail fast if no URI mappings are found. + assert(sdk.libraryMap.size() > 0); + sdk.analysisOptions = context.analysisOptions; + // TODO(pq): re-enable once we have a proper story for SDK summaries + // in the presence of embedders (https://github.com/dart-lang/sdk/issues/26467). + sdk.useSummary = false; - EmbedderYamlLocator yamlLocator = context.embedderYamlLocator; - yamlLocator.refresh(packageMap); - - EmbedderUriResolver embedderUriResolver = - new EmbedderUriResolver(yamlLocator.embedderYamls); - if (embedderUriResolver.length == 0) { resolvers.add(new DartUriResolver(sdk)); } else { - resolvers.add(embedderUriResolver); + // Fall back to a standard SDK if no embedder is found. + DirectoryBasedDartSdk sdk = new DirectoryBasedDartSdk(new JavaFile(sdkDir)); + sdk.analysisOptions = context.analysisOptions; + + resolvers.add(new DartUriResolver(sdk)); } if (options.packageRootPath != null) { @@ -113,7 +121,7 @@ class AnalysisDriver { resolvers.add(new PackageUriResolver([packageDirectory])); } - resolvers.add(new FileUriResolver()); + resolvers.add(new file_system.ResourceUriResolver(PhysicalResourceProvider.INSTANCE)); return resolvers; } @@ -202,6 +210,7 @@ class DriverOptions extends AnalysisOptionsImpl { cacheSize = 512; lint = true; generateSdkErrors = false; + trackCacheDependencies = false; } /// The path to the dart SDK. diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index c922ae4e30a..eae833230f0 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -33,7 +33,7 @@ dependencies: test: 0.12.13+5 # Pinned in flutter_test as well. - analyzer: 0.27.4-alpha.9 + analyzer: 0.27.4-alpha.14 dev_dependencies: mockito: ^0.11.0