Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Unified Diff: pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart

Issue 2977983002: Resynthesize InterfaceType, class type parameters and supertype. (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/test/src/summary/resynthesize_common.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+ });
+ }
}
« no previous file with comments | « pkg/analyzer/test/src/summary/resynthesize_common.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698