From f2ff362c7153dfd0b5bbfcc8e53b9abcc2c2466a Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Mon, 18 Sep 2017 20:26:38 +0000 Subject: [PATCH] Fix for resynthesizing FutureOr in not strong mode. R=brianwilkerson@google.com, paulberry@google.com Bug: Change-Id: I239bb013cb04c6e1ab07d644e3cca16119885321 Reviewed-on: https://dart-review.googlesource.com/6743 Reviewed-by: Paul Berry --- pkg/analyzer/lib/src/kernel/resynthesize.dart | 14 ++++++++++++-- .../generated/non_error_resolver_kernel_test.dart | 12 ------------ .../test/src/summary/resynthesize_kernel_test.dart | 5 +++++ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart index d19ab783d63..2af1c5c582b 100644 --- a/pkg/analyzer/lib/src/kernel/resynthesize.dart +++ b/pkg/analyzer/lib/src/kernel/resynthesize.dart @@ -41,6 +41,11 @@ class KernelResynthesizer implements ElementResynthesizer { */ DartType get typeType => getLibrary('dart:core').getType('Type').type; + /** + * Return `true` if strong mode analysis should be used. + */ + bool get strongMode => _analysisContext.analysisOptions.strongMode; + @override Element getElement(ElementLocation location) { List components = location.components; @@ -810,8 +815,13 @@ class _KernelUnitResynthesizerContextImpl if (kernelType is kernel.VoidType) return VoidTypeImpl.instance; if (kernelType is kernel.InterfaceType) { - return _getInterfaceType(context, kernelType.className.canonicalName, - kernelType.typeArguments); + var name = kernelType.className.canonicalName; + if (!libraryContext.resynthesizer.strongMode && + name.name == 'FutureOr' && + name.parent.name == 'dart:async') { + return DynamicTypeImpl.instance; + } + return _getInterfaceType(context, name, kernelType.typeArguments); } if (kernelType is kernel.TypeParameterType) { diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart index 926d622b7ed..0547d047dd6 100644 --- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart +++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart @@ -18,18 +18,6 @@ class NonErrorResolverTest_Kernel extends NonErrorResolverTest_Driver { @override bool get enableKernelDriver => true; - @override - @failingTest - test_async_flattened() async { - return super.test_async_flattened(); - } - - @override - @failingTest - test_async_future_int_with_return_future_int() async { - return super.test_async_future_int_with_return_future_int(); - } - @override @failingTest test_commentReference_beforeMethod() async { diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart index 5130f65117c..e29522ccda1 100644 --- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart +++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart @@ -9,6 +9,7 @@ import 'dart:async'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:analyzer/src/dart/element/element.dart'; +import 'package:analyzer/src/generated/engine.dart'; import 'package:analyzer/src/generated/source.dart'; import 'package:analyzer/src/kernel/resynthesize.dart'; import 'package:front_end/byte_store.dart'; @@ -117,6 +118,10 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { return resynthesizer.getLibrary(testUriStr); } + @override + AnalysisOptionsImpl createOptions() => + super.createOptions()..strongMode = true; + @failingTest @fastaProblem test_class_constructor_field_formal_multiple_matching_fields() async {