Update RecursiveTypeVisitor to support RecordType(s).
Change-Id: Ic44d956040144fe56f12637527b49368371c3947
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/255683
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/type_visitor.dart b/pkg/analyzer/lib/src/dart/element/type_visitor.dart
index 5bb9d80..9c628b4 100644
--- a/pkg/analyzer/lib/src/dart/element/type_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_visitor.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_visitor.dart';
+import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_schema.dart';
import 'package:analyzer/src/summary2/function_type_builder.dart';
import 'package:analyzer/src/summary2/named_type_builder.dart';
@@ -53,9 +54,8 @@
visitChildren(type.typeArguments);
@override
- bool visitRecordType(RecordType type) {
- // TODO: implement visitRecordType
- throw UnimplementedError();
+ bool visitRecordType(covariant RecordTypeImpl type) {
+ return visitChildren(type.fieldTypes);
}
@override
diff --git a/pkg/analyzer/test/src/dart/element/type_visitor_test.dart b/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
index 09426a5..eb22267 100644
--- a/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
@@ -9,6 +9,7 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../../generated/type_system_base.dart';
+import 'string_types.dart';
main() {
defineReflectiveSuite(() {
@@ -17,13 +18,14 @@
}
@reflectiveTest
-class RecursiveTypeVisitorTest extends AbstractTypeSystemTest {
+class RecursiveTypeVisitorTest extends AbstractTypeSystemTest with StringTypes {
late final _MockRecursiveVisitor visitor;
@override
void setUp() {
super.setUp();
visitor = _MockRecursiveVisitor();
+ defineStringTypes();
}
void test_callsDefaultBehavior() {
@@ -117,6 +119,20 @@
visitor.assertVisitedType(intNone);
}
+ void test_recordType_named() {
+ final type = typeOfString('({int f1, double f2})');
+ expect(type.accept(visitor), true);
+ visitor.assertVisitedType(intNone);
+ visitor.assertVisitedType(doubleNone);
+ }
+
+ void test_recordType_positional() {
+ final type = typeOfString('(int, double)');
+ expect(type.accept(visitor), true);
+ visitor.assertVisitedType(intNone);
+ visitor.assertVisitedType(doubleNone);
+ }
+
void test_stopVisiting_first() {
final T = typeParameter('T', bound: intNone);
final K = typeParameter('K', bound: stringNone);