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 4c14a27f500526fbb6a93ed148fbec4b41a97f22..e9b1092afea403b46a7a99758d8c1f17b8a7e585 100644 |
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart |
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart |
@@ -6,9 +6,12 @@ library analyzer.test.src.summary.resynthesize_kernel_test; |
import 'dart:async'; |
+import 'package:analyzer/dart/element/type.dart'; |
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/dart/element/type.dart'; |
+import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/summary/resynthesize.dart'; |
import 'package:front_end/file_system.dart'; |
@@ -19,7 +22,6 @@ import 'package:front_end/src/incremental/kernel_driver.dart'; |
import 'package:kernel/kernel.dart' as kernel; |
import 'package:kernel/target/targets.dart'; |
import 'package:path/path.dart' as pathos; |
-import 'package:test/test.dart'; |
import 'package:test_reflective_loader/test_reflective_loader.dart'; |
import '../context/mock_sdk.dart'; |
@@ -84,11 +86,8 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
} |
- kernel.Library kernelLibrary = libraryMap[testUriStr]; |
- expect(kernelLibrary, isNotNull); |
- |
- return new LibraryElementImpl.forKernel(context, |
- new _KernelLibraryResynthesizerContextImpl(libraryMap, kernelLibrary)); |
+ var resynthesizer = new _KernelResynthesizer(context, libraryMap); |
+ return resynthesizer.getLibrary(testUriStr); |
} |
@override |
@@ -135,11 +134,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
@failingTest |
- test_class_constructor_explicit_type_params() async { |
- await super.test_class_constructor_explicit_type_params(); |
- } |
- |
- @failingTest |
test_class_constructor_factory() async { |
await super.test_class_constructor_factory(); |
} |
@@ -220,11 +214,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
@failingTest |
- test_class_constructor_implicit_type_params() async { |
- await super.test_class_constructor_implicit_type_params(); |
- } |
- |
- @failingTest |
test_class_constructor_params() async { |
await super.test_class_constructor_params(); |
} |
@@ -385,16 +374,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
@failingTest |
- test_class_supertype() async { |
- await super.test_class_supertype(); |
- } |
- |
- @failingTest |
- test_class_type_parameters() async { |
- await super.test_class_type_parameters(); |
- } |
- |
- @failingTest |
test_class_type_parameters_bound() async { |
await super.test_class_type_parameters_bound(); |
} |
@@ -2667,11 +2646,63 @@ class _FileSystemEntityAdaptor implements FileSystemEntity { |
class _KernelLibraryResynthesizerContextImpl |
implements KernelLibraryResynthesizerContext { |
- /// TODO(scheglov) we don't use this yet, make it private later |
- final Map<String, kernel.Library> libraryMap; |
+ final _KernelResynthesizer _resynthesizer; |
@override |
final kernel.Library library; |
- _KernelLibraryResynthesizerContextImpl(this.libraryMap, this.library); |
+ _KernelLibraryResynthesizerContextImpl(this._resynthesizer, this.library); |
+ |
+ @override |
+ InterfaceType getInterfaceType( |
+ ElementImpl context, kernel.Supertype kernelType) { |
+ return _getInterfaceType( |
+ kernelType.className.canonicalName, kernelType.typeArguments); |
+ } |
+ |
+ DartType getType(ElementImpl context, kernel.DartType kernelType) { |
+ if (kernelType is kernel.InterfaceType) { |
+ return _getInterfaceType( |
+ kernelType.className.canonicalName, kernelType.typeArguments); |
+ } |
+ // TODO(scheglov) Support other kernel types. |
+ return null; |
+ } |
+ |
+ InterfaceType _getInterfaceType( |
+ kernel.CanonicalName className, List<kernel.DartType> kernelArguments) { |
+ var libraryName = className.parent; |
+ var libraryElement = _resynthesizer.getLibrary(libraryName.name); |
+ ClassElementImpl classElement = libraryElement.getType(className.name); |
+ |
+ if (kernelArguments.isEmpty) { |
+ return classElement.type; |
+ } |
+ |
+ return new InterfaceTypeImpl.elementWithNameAndArgs( |
+ classElement, classElement.name, () { |
+ List<DartType> arguments = kernelArguments |
+ .map((kernel.DartType k) => getType(classElement, k)) |
+ .toList(growable: false); |
+ return arguments; |
+ }); |
+ } |
+} |
+ |
+class _KernelResynthesizer { |
+ final AnalysisContext _analysisContext; |
+ final Map<String, kernel.Library> _kernelMap; |
+ final Map<String, LibraryElementImpl> _libraryMap = {}; |
+ |
+ _KernelResynthesizer(this._analysisContext, this._kernelMap); |
+ |
+ LibraryElementImpl getLibrary(String uriStr) { |
+ return _libraryMap.putIfAbsent(uriStr, () { |
+ var kernel = _kernelMap[uriStr]; |
+ if (kernel == null) return null; |
+ var libraryContext = |
+ new _KernelLibraryResynthesizerContextImpl(this, kernel); |
+ return new LibraryElementImpl.forKernel(_analysisContext, libraryContext); |
+ }); |
+ } |
} |