Skip to content

Commit 9e2d5e0

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Refactor SourceMemberBuilder.checkTypes
This expands the signature of SourceMemberBuilder.checkTypes so that it can fully handle all member checks. Change-Id: I5414d7ee9f0b7f3be50beffe38b52965be75ddd5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398360 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 1207250 commit 9e2d5e0

9 files changed

+53
-67
lines changed

pkg/front_end/lib/src/base/scope.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -746,8 +746,8 @@ mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
746746

747747
@override
748748
// Coverage-ignore(suite): Not run.
749-
void checkTypes(
750-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
749+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
750+
TypeEnvironment typeEnvironment) {
751751
assert(false, "Unexpected call to $runtimeType.checkVariance.");
752752
}
753753

pkg/front_end/lib/src/source/source_builder_mixins.dart

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,13 @@ import '../builder/builder_mixins.dart';
1414
import '../builder/declaration_builders.dart';
1515
import '../builder/library_builder.dart';
1616
import '../builder/member_builder.dart';
17-
import '../builder/procedure_builder.dart';
1817
import '../builder/type_builder.dart';
1918
import '../kernel/body_builder_context.dart';
2019
import '../kernel/kernel_helper.dart';
2120
import '../kernel/type_algorithms.dart';
22-
import 'source_constructor_builder.dart';
23-
import 'source_field_builder.dart';
2421
import 'source_library_builder.dart';
2522
import 'source_loader.dart';
2623
import 'source_member_builder.dart';
27-
import 'source_procedure_builder.dart';
2824

2925
abstract class SourceDeclarationBuilder implements IDeclarationBuilder {
3026
void buildScopes(LibraryBuilder coreLibrary);
@@ -155,30 +151,13 @@ mixin SourceDeclarationBuilderMixin
155151

156152
void checkTypesInOutline(TypeEnvironment typeEnvironment) {
157153
forEach((String name, Builder builder) {
158-
if (builder is SourceFieldBuilder) {
159-
// Check fields.
160-
libraryBuilder.checkTypesInField(builder, typeEnvironment);
161-
} else if (builder is SourceProcedureBuilder) {
162-
// Check procedures
163-
libraryBuilder.checkTypesInFunctionBuilder(builder, typeEnvironment);
164-
if (builder.isGetter) {
165-
Builder? setterDeclaration =
166-
nameSpace.lookupLocalMember(builder.name, setter: true);
167-
if (setterDeclaration != null) {
168-
libraryBuilder.checkGetterSetterTypes(builder,
169-
setterDeclaration as ProcedureBuilder, typeEnvironment);
170-
}
171-
}
172-
} else {
173-
// Coverage-ignore-block(suite): Not run.
174-
assert(false, "Unexpected member: $builder.");
175-
}
154+
(builder as SourceMemberBuilder)
155+
.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
176156
});
177157

178158
nameSpace.forEachConstructor((String name, MemberBuilder builder) {
179-
if (builder is SourceConstructorBuilder) {
180-
builder.checkTypes(libraryBuilder, typeEnvironment);
181-
}
159+
(builder as SourceMemberBuilder)
160+
.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
182161
});
183162
}
184163

pkg/front_end/lib/src/source/source_class_builder.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,14 +1152,14 @@ class SourceClassBuilder extends ClassBuilderImpl
11521152
while (memberIterator.moveNext()) {
11531153
SourceMemberBuilder builder = memberIterator.current;
11541154
builder.checkVariance(this, typeEnvironment);
1155-
builder.checkTypes(libraryBuilder, typeEnvironment);
1155+
builder.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
11561156
}
11571157

11581158
Iterator<SourceMemberBuilder> constructorIterator =
11591159
fullConstructorIterator<SourceMemberBuilder>();
11601160
while (constructorIterator.moveNext()) {
11611161
SourceMemberBuilder builder = constructorIterator.current;
1162-
builder.checkTypes(libraryBuilder, typeEnvironment);
1162+
builder.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
11631163
}
11641164
}
11651165

pkg/front_end/lib/src/source/source_constructor_builder.dart

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import '../base/messages.dart'
2121
messageSuperInitializerNotLast,
2222
noLength;
2323
import '../base/modifiers.dart';
24+
import '../base/name_space.dart';
2425
import '../base/scope.dart';
2526
import '../builder/builder.dart';
2627
import '../builder/constructor_builder.dart';
@@ -362,8 +363,8 @@ abstract class AbstractSourceConstructorBuilder
362363
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
363364

364365
@override
365-
void checkTypes(
366-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
366+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
367+
TypeEnvironment typeEnvironment) {
367368
library.checkTypesInConstructorBuilder(this, formals, typeEnvironment);
368369
}
369370

@@ -986,13 +987,13 @@ class DeclaredSourceConstructorBuilder
986987
}
987988

988989
@override
989-
void checkTypes(
990-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
991-
super.checkTypes(library, typeEnvironment);
990+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
991+
TypeEnvironment typeEnvironment) {
992+
super.checkTypes(library, nameSpace, typeEnvironment);
992993
List<DeclaredSourceConstructorBuilder>? augmentations = _augmentations;
993994
if (augmentations != null) {
994995
for (DeclaredSourceConstructorBuilder augmentation in augmentations) {
995-
augmentation.checkTypes(library, typeEnvironment);
996+
augmentation.checkTypes(library, nameSpace, typeEnvironment);
996997
}
997998
}
998999
}
@@ -1214,8 +1215,8 @@ class SyntheticSourceConstructorBuilder extends MemberBuilderImpl
12141215
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
12151216

12161217
@override
1217-
void checkTypes(
1218-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {}
1218+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
1219+
TypeEnvironment typeEnvironment) {}
12191220
}
12201221

12211222
class SourceExtensionTypeConstructorBuilder

pkg/front_end/lib/src/source/source_factory_builder.dart

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import '../base/messages.dart'
1616
templateRedirectingFactoryIncompatibleTypeArgument,
1717
templateTypeArgumentMismatch;
1818
import '../base/modifiers.dart';
19+
import '../base/name_space.dart';
1920
import '../base/problems.dart' show unexpected, unhandled;
2021
import '../base/scope.dart';
2122
import '../builder/builder.dart';
@@ -318,13 +319,13 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl {
318319
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
319320

320321
@override
321-
void checkTypes(
322-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
322+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
323+
TypeEnvironment typeEnvironment) {
323324
library.checkTypesInFunctionBuilder(this, typeEnvironment);
324325
List<SourceFactoryBuilder>? augmentations = _augmentations;
325326
if (augmentations != null) {
326327
for (SourceFactoryBuilder augmentation in augmentations) {
327-
augmentation.checkTypes(library, typeEnvironment);
328+
augmentation.checkTypes(library, nameSpace, typeEnvironment);
328329
}
329330
}
330331
}
@@ -655,8 +656,8 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {
655656
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
656657

657658
@override
658-
void checkTypes(
659-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
659+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
660+
TypeEnvironment typeEnvironment) {
660661
library.checkTypesInRedirectingFactoryBuilder(this, typeEnvironment);
661662
}
662663

pkg/front_end/lib/src/source/source_field_builder.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
65
import 'package:_fe_analyzer_shared/src/metadata/expressions.dart' as shared;
6+
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
77
import 'package:kernel/ast.dart';
88
import 'package:kernel/class_hierarchy.dart';
99
import 'package:kernel/core_types.dart';
@@ -13,6 +13,7 @@ import 'package:kernel/type_environment.dart';
1313
import '../api_prototype/lowering_predicates.dart';
1414
import '../base/constant_context.dart' show ConstantContext;
1515
import '../base/modifiers.dart' show Modifiers;
16+
import '../base/name_space.dart';
1617
import '../base/problems.dart' show internalProblem;
1718
import '../base/scope.dart' show LookupScope;
1819
import '../builder/builder.dart';
@@ -652,8 +653,8 @@ class SourceFieldBuilder extends SourceMemberBuilderImpl
652653
}
653654

654655
@override
655-
void checkTypes(
656-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
656+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
657+
TypeEnvironment typeEnvironment) {
657658
library.checkTypesInField(this, typeEnvironment);
658659
}
659660

pkg/front_end/lib/src/source/source_library_builder.dart

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,22 +2009,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
20092009
Iterator<Builder> iterator = localMembersIterator;
20102010
while (iterator.moveNext()) {
20112011
Builder declaration = iterator.current;
2012-
if (declaration is SourceFieldBuilder) {
2013-
declaration.checkTypes(this, typeEnvironment);
2014-
} else if (declaration is SourceProcedureBuilder) {
2015-
List<TypeParameterBuilder>? typeParameters = declaration.typeParameters;
2016-
if (typeParameters != null && typeParameters.isNotEmpty) {
2017-
checkTypeParameterDependencies(typeParameters);
2018-
}
2019-
declaration.checkTypes(this, typeEnvironment);
2020-
if (declaration.isGetter) {
2021-
Builder? setterDeclaration = libraryNameSpace
2022-
.lookupLocalMember(declaration.name, setter: true);
2023-
if (setterDeclaration != null) {
2024-
checkGetterSetterTypes(declaration,
2025-
setterDeclaration as ProcedureBuilder, typeEnvironment);
2026-
}
2027-
}
2012+
if (declaration is SourceMemberBuilder) {
2013+
declaration.checkTypes(this, libraryNameSpace, typeEnvironment);
20282014
} else if (declaration is SourceClassBuilder) {
20292015
List<TypeParameterBuilder>? typeParameters = declaration.typeParameters;
20302016
if (typeParameters != null && typeParameters.isNotEmpty) {

pkg/front_end/lib/src/source/source_member_builder.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:kernel/class_hierarchy.dart';
77
import 'package:kernel/type_environment.dart';
88

99
import '../base/common.dart';
10+
import '../base/name_space.dart';
1011
import '../base/problems.dart' show unsupported;
1112
import '../builder/member_builder.dart';
1213
import '../builder/metadata_builder.dart';
@@ -49,8 +50,8 @@ abstract class SourceMemberBuilder implements MemberBuilder {
4950
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment);
5051

5152
/// Checks the signature types of this member.
52-
void checkTypes(
53-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment);
53+
void checkTypes(SourceLibraryBuilder library, NameSpace nameSpace,
54+
TypeEnvironment typeEnvironment);
5455

5556
/// Returns `true` if this member is declared using the `augment` modifier.
5657
bool get isAugmentation;

pkg/front_end/lib/src/source/source_procedure_builder.dart

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:kernel/type_algebra.dart';
77
import 'package:kernel/type_environment.dart';
88

99
import '../base/modifiers.dart';
10+
import '../base/name_space.dart';
1011
import '../builder/builder.dart';
1112
import '../builder/declaration_builders.dart';
1213
import '../builder/formal_parameter_builder.dart';
@@ -672,13 +673,29 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl
672673
}
673674

674675
@override
675-
void checkTypes(
676-
SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
677-
library.checkTypesInFunctionBuilder(this, typeEnvironment);
676+
void checkTypes(SourceLibraryBuilder libraryBuilder, NameSpace nameSpace,
677+
TypeEnvironment typeEnvironment) {
678+
List<TypeParameterBuilder>? typeParameters = this.typeParameters;
679+
if (typeParameters != null && typeParameters.isNotEmpty) {
680+
libraryBuilder.checkTypeParameterDependencies(typeParameters);
681+
}
682+
libraryBuilder.checkTypesInFunctionBuilder(this, typeEnvironment);
678683
List<SourceProcedureBuilder>? augmentations = _augmentations;
679684
if (augmentations != null) {
680685
for (SourceProcedureBuilder augmentation in augmentations) {
681-
augmentation.checkTypes(library, typeEnvironment);
686+
augmentation.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
687+
}
688+
}
689+
if (isGetter) {
690+
if (!isClassMember) {
691+
// Getter/setter type conflict for class members is handled in the class
692+
// hierarchy builder.
693+
Builder? setterDeclaration =
694+
nameSpace.lookupLocalMember(name, setter: true);
695+
if (setterDeclaration != null) {
696+
libraryBuilder.checkGetterSetterTypes(
697+
this, setterDeclaration as ProcedureBuilder, typeEnvironment);
698+
}
682699
}
683700
}
684701
}

0 commit comments

Comments
 (0)