| Index: pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
|
| diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
|
| index 12cada7c40caf5f567c87aa8bd0a07b78493d5cb..966cfde9eb238a639a0601e365f664454688e79d 100644
|
| --- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
|
| +++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
|
| @@ -26,6 +26,7 @@ import 'package:front_end/src/incremental/byte_store.dart';
|
| import 'package:front_end/src/incremental/kernel_driver.dart';
|
| import 'package:kernel/kernel.dart' as kernel;
|
| import 'package:kernel/target/targets.dart';
|
| +import 'package:kernel/type_environment.dart' as kernel;
|
| import 'package:package_config/packages.dart';
|
| import 'package:path/path.dart' as pathos;
|
| import 'package:test_reflective_loader/test_reflective_loader.dart';
|
| @@ -96,7 +97,8 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
|
| }
|
| }
|
|
|
| - var resynthesizer = new _KernelResynthesizer(context, libraryMap);
|
| + var resynthesizer =
|
| + new _KernelResynthesizer(context, kernelResult.types, libraryMap);
|
| return resynthesizer.getLibrary(testUriStr);
|
| }
|
|
|
| @@ -191,11 +193,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
|
| }
|
|
|
| @failingTest
|
| - test_class_type_parameters_f_bound_simple() async {
|
| - await super.test_class_type_parameters_f_bound_simple();
|
| - }
|
| -
|
| - @failingTest
|
| test_closure_generic() async {
|
| await super.test_closure_generic();
|
| }
|
| @@ -226,11 +223,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
|
| }
|
|
|
| @failingTest
|
| - test_const_invokeConstructor_generic_named() async {
|
| - await super.test_const_invokeConstructor_generic_named();
|
| - }
|
| -
|
| - @failingTest
|
| test_const_invokeConstructor_generic_named_imported() async {
|
| await super.test_const_invokeConstructor_generic_named_imported();
|
| }
|
| @@ -242,16 +234,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
|
| }
|
|
|
| @failingTest
|
| - test_const_invokeConstructor_generic_noTypeArguments() async {
|
| - await super.test_const_invokeConstructor_generic_noTypeArguments();
|
| - }
|
| -
|
| - @failingTest
|
| - test_const_invokeConstructor_generic_unnamed() async {
|
| - await super.test_const_invokeConstructor_generic_unnamed();
|
| - }
|
| -
|
| - @failingTest
|
| test_const_invokeConstructor_generic_unnamed_imported() async {
|
| await super.test_const_invokeConstructor_generic_unnamed_imported();
|
| }
|
| @@ -263,11 +245,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
|
| }
|
|
|
| @failingTest
|
| - test_const_invokeConstructor_named() async {
|
| - await super.test_const_invokeConstructor_named();
|
| - }
|
| -
|
| - @failingTest
|
| test_const_invokeConstructor_named_imported() async {
|
| await super.test_const_invokeConstructor_named_imported();
|
| }
|
| @@ -308,11 +285,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
|
| }
|
|
|
| @failingTest
|
| - test_const_invokeConstructor_unnamed() async {
|
| - await super.test_const_invokeConstructor_unnamed();
|
| - }
|
| -
|
| - @failingTest
|
| test_const_invokeConstructor_unnamed_imported() async {
|
| await super.test_const_invokeConstructor_unnamed_imported();
|
| }
|
| @@ -2092,6 +2064,23 @@ class _ExprBuilder {
|
| }
|
| }
|
|
|
| + if (expr is kernel.ConstructorInvocation) {
|
| + var element = _getElement(expr.targetReference);
|
| +
|
| + var kernelType = expr.getStaticType(_context._resynthesizer._types);
|
| + var type = _context.getType(null, kernelType);
|
| + TypeName typeName = _buildType(type);
|
| +
|
| + var constructorName = AstTestFactory.constructorName(
|
| + typeName, element.name.isNotEmpty ? element.name : null);
|
| + constructorName?.name?.staticElement = element;
|
| +
|
| + var keyword = expr.isConst ? Keyword.CONST : Keyword.NEW;
|
| + var arguments = _toArguments(expr.arguments);
|
| + return AstTestFactory.instanceCreationExpression(
|
| + keyword, constructorName, arguments);
|
| + }
|
| +
|
| // TODO(scheglov): complete getExpression
|
| throw new UnimplementedError('kernel: (${expr.runtimeType}) $expr');
|
| }
|
| @@ -2168,6 +2157,25 @@ class _ExprBuilder {
|
| }
|
| }
|
|
|
| + /// Return [Expression]s for the given [kernelArguments].
|
| + List<Expression> _toArguments(kernel.Arguments kernelArguments) {
|
| + int numPositional = kernelArguments.positional.length;
|
| + int numNamed = kernelArguments.named.length;
|
| + var arguments = new List<Expression>(numPositional + numNamed);
|
| +
|
| + int i = 0;
|
| + for (kernel.Expression k in kernelArguments.positional) {
|
| + arguments[i++] = build(k);
|
| + }
|
| +
|
| + for (kernel.NamedExpression k in kernelArguments.named) {
|
| + var value = build(k.value);
|
| + arguments[i++] = AstTestFactory.namedExpression2(k.name, value);
|
| + }
|
| +
|
| + return arguments;
|
| + }
|
| +
|
| /// Return the [TokenType] for the given operator [name].
|
| TokenType _toBinaryOperatorTokenType(String name) {
|
| if (name == '==') return TokenType.EQ_EQ;
|
| @@ -2260,11 +2268,15 @@ class _KernelLibraryResynthesizerContextImpl
|
|
|
| DartType getType(ElementImpl context, kernel.DartType kernelType) {
|
| if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance;
|
| + if (kernelType is kernel.VoidType) return VoidTypeImpl.instance;
|
| if (kernelType is kernel.InterfaceType) {
|
| return _getInterfaceType(
|
| kernelType.className.canonicalName, kernelType.typeArguments);
|
| }
|
| - if (kernelType is kernel.VoidType) return VoidTypeImpl.instance;
|
| + if (kernelType is kernel.TypeParameterType) {
|
| + kernel.TypeParameter kTypeParameter = kernelType.parameter;
|
| + return _getTypeParameter(context, kTypeParameter).type;
|
| + }
|
| // TODO(scheglov) Support other kernel types.
|
| throw new UnimplementedError('For ${kernelType.runtimeType}');
|
| }
|
| @@ -2286,6 +2298,7 @@ class _KernelLibraryResynthesizerContextImpl
|
| bool isGetter = false;
|
| bool isSetter = false;
|
| bool isField = false;
|
| + bool isConstructor = false;
|
| bool isMethod = false;
|
| if (parentName.name == '@getters') {
|
| isGetter = true;
|
| @@ -2296,6 +2309,9 @@ class _KernelLibraryResynthesizerContextImpl
|
| } else if (parentName.name == '@fields') {
|
| isField = true;
|
| parentName = parentName.parent;
|
| + } else if (parentName.name == '@constructors') {
|
| + isConstructor = true;
|
| + parentName = parentName.parent;
|
| } else if (parentName.name == '@methods') {
|
| isMethod = true;
|
| parentName = parentName.parent;
|
| @@ -2324,6 +2340,11 @@ class _KernelLibraryResynthesizerContextImpl
|
| return parentElement.getSetter(name.name) as ElementImpl;
|
| } else if (isField) {
|
| return parentElement.getField(name.name) as ElementImpl;
|
| + } else if (isConstructor) {
|
| + if (name.name.isEmpty) {
|
| + return parentElement.unnamedConstructor as ConstructorElementImpl;
|
| + }
|
| + return parentElement.getNamedConstructor(name.name) as ElementImpl;
|
| } else if (isMethod) {
|
| return parentElement.getMethod(name.name) as ElementImpl;
|
| }
|
| @@ -2351,10 +2372,27 @@ class _KernelLibraryResynthesizerContextImpl
|
| return arguments;
|
| });
|
| }
|
| +
|
| + /// Return the [TypeParameterElement] for the given [kernelTypeParameter].
|
| + TypeParameterElement _getTypeParameter(
|
| + ElementImpl context, kernel.TypeParameter kernelTypeParameter) {
|
| + String name = kernelTypeParameter.name;
|
| + for (var ctx = context; ctx != null; ctx = ctx.enclosingElement) {
|
| + if (ctx is TypeParameterizedElementMixin) {
|
| + for (var typeParameter in ctx.typeParameters) {
|
| + if (typeParameter.name == name) {
|
| + return typeParameter;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + throw new StateError('Not found $kernelTypeParameter in $context');
|
| + }
|
| }
|
|
|
| class _KernelResynthesizer {
|
| final AnalysisContext _analysisContext;
|
| + final kernel.TypeEnvironment _types;
|
| final Map<String, kernel.Library> _kernelMap;
|
| final Map<String, LibraryElementImpl> _libraryMap = {};
|
|
|
| @@ -2363,7 +2401,7 @@ class _KernelResynthesizer {
|
| */
|
| final Map<String, Source> _sources = <String, Source>{};
|
|
|
| - _KernelResynthesizer(this._analysisContext, this._kernelMap);
|
| + _KernelResynthesizer(this._analysisContext, this._types, this._kernelMap);
|
|
|
| LibraryElementImpl getLibrary(String uriStr) {
|
| return _libraryMap.putIfAbsent(uriStr, () {
|
|
|