Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 8132f04

Browse files
author
Dart CI
committed
Version 2.19.0-403.0.dev
Merge 3207808 into dev
2 parents 09be43f + 3207808 commit 8132f04

22 files changed

+154
-124
lines changed

DEPS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ vars = {
5151

5252
# co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
5353
# hashes.
54-
"co19_rev": "36cc25de009198a8516be7f12ac5b61069656d09",
54+
"co19_rev": "19439c0d58a0df422c4acc4ae97a3deeb98d0f67",
5555
# This line prevents conflicts when both packages are rolled simultaneously.
5656
"co19_2_rev": "cdab7e4e26f3dd534bcb297ff3f9e9aa5c7a04fb",
5757

pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_builder.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class ClassHierarchyBuilder implements ClassHierarchyBase {
7878

7979
@override
8080
Supertype? getClassAsInstanceOf(Class subclass, Class superclass) {
81+
if (identical(subclass, superclass)) return subclass.asThisSupertype;
8182
ClassHierarchyNode clsNode = getNodeFromClass(subclass);
8283
ClassHierarchyNode supertypeNode = getNodeFromClass(superclass);
8384
List<Supertype> superclasses = clsNode.superclasses;
@@ -114,6 +115,11 @@ class ClassHierarchyBuilder implements ClassHierarchyBase {
114115
return asSupertypeOf(type, superclass)?.typeArguments;
115116
}
116117

118+
@override
119+
bool isSubtypeOf(Class subtype, Class superclass) {
120+
return getClassAsInstanceOf(subtype, superclass) != null;
121+
}
122+
117123
@override
118124
InterfaceType getLegacyLeastUpperBound(
119125
InterfaceType type1, InterfaceType type2, Library clientLibrary) {

pkg/front_end/lib/src/fasta/kernel/hierarchy/members_builder.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,18 @@ class ClassMembersBuilder implements ClassHierarchyMembers {
148148
return getNodeFromClass(cls).getInterfaceMember(name, setter);
149149
}
150150

151+
@override
152+
Member? getDispatchTarget(Class cls, Name name, {bool setter = false}) {
153+
return getNodeFromClass(cls)
154+
.getDispatchTarget(name, setter)
155+
?.getMember(this);
156+
}
157+
158+
ClassMember? getDispatchClassMember(Class cls, Name name,
159+
{bool setter = false}) {
160+
return getNodeFromClass(cls).getDispatchTarget(name, setter);
161+
}
162+
151163
static ClassMembersBuilder build(
152164
ClassHierarchyBuilder hierarchyBuilder, List<ClassBuilder> classes) {
153165
ClassMembersBuilder membersBuilder =

pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,6 @@ class ClassMembersNodeBuilder {
7474
bool get shouldModifyKernel =>
7575
classBuilder.libraryBuilder.loader == hierarchy.loader;
7676

77-
ClassMember? checkInheritanceConflict(ClassMember a, ClassMember b) {
78-
if (a.isStatic || a.isProperty != b.isProperty) {
79-
reportInheritanceConflict(a, b);
80-
return a;
81-
}
82-
return null;
83-
}
84-
8577
static void inferMethodType(
8678
ClassHierarchyBuilder hierarchyBuilder,
8779
ClassMembersBuilder membersBuilder,
@@ -2311,6 +2303,7 @@ class ClassMembersNodeBuilder {
23112303

23122304
return new ClassMembersNode(
23132305
classBuilder,
2306+
supernode,
23142307
classMemberMap,
23152308
classSetterMap,
23162309
interfaceMemberMap,
@@ -2360,6 +2353,8 @@ class ClassMembersNodeBuilder {
23602353
class ClassMembersNode {
23612354
final ClassBuilder classBuilder;
23622355

2356+
final ClassMembersNode? supernode;
2357+
23632358
/// All the members of this class including [classMembers] of its
23642359
/// superclasses. The members are sorted by [compareDeclarations].
23652360
final Map<Name, ClassMember> classMemberMap;
@@ -2387,6 +2382,7 @@ class ClassMembersNode {
23872382

23882383
ClassMembersNode(
23892384
this.classBuilder,
2385+
this.supernode,
23902386
this.classMemberMap,
23912387
this.classSetterMap,
23922388
this.interfaceMemberMap,
@@ -2434,9 +2430,16 @@ class ClassMembersNode {
24342430
}
24352431

24362432
ClassMember? getInterfaceMember(Name name, bool isSetter) {
2437-
return isSetter
2433+
ClassMember? result = isSetter
24382434
? (interfaceSetterMap ?? classSetterMap)[name]
24392435
: (interfaceMemberMap ?? classMemberMap)[name];
2436+
if (result == null) {
2437+
return null;
2438+
}
2439+
if (result.isStatic) {
2440+
return null;
2441+
}
2442+
return result;
24402443
}
24412444

24422445
ClassMember? findMember(Name name, List<ClassMember> declarations) {
@@ -2464,7 +2467,17 @@ class ClassMembersNode {
24642467
}
24652468

24662469
ClassMember? getDispatchTarget(Name name, bool isSetter) {
2467-
return isSetter ? classSetterMap[name] : classMemberMap[name];
2470+
ClassMember? result =
2471+
isSetter ? classSetterMap[name] : classMemberMap[name];
2472+
if (result == null) {
2473+
return null;
2474+
}
2475+
if (result.isStatic) {
2476+
// TODO(johnniwinther): Can we avoid putting static members in the
2477+
// [classMemberMap]/[classSetterMap] maps?
2478+
return supernode?.getDispatchTarget(name, isSetter);
2479+
}
2480+
return result;
24682481
}
24692482
}
24702483

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
1212
import 'package:_fe_analyzer_shared/src/util/resolve_relative_uri.dart'
1313
show resolveRelativeUri;
1414
import 'package:kernel/ast.dart' hide Combinator, MapLiteralEntry;
15-
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
15+
import 'package:kernel/class_hierarchy.dart'
16+
show ClassHierarchy, ClassHierarchyBase, ClassHierarchyMembers;
1617
import 'package:kernel/clone.dart' show CloneVisitorNotMembers;
1718
import 'package:kernel/reference_from_index.dart'
1819
show IndexedClass, IndexedContainer, IndexedLibrary;
@@ -4416,7 +4417,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
44164417
void checkBoundsInMethodInvocation(
44174418
DartType receiverType,
44184419
TypeEnvironment typeEnvironment,
4419-
ClassHierarchy hierarchy,
4420+
ClassHierarchyBase classHierarchy,
4421+
ClassHierarchyMembers membersHierarchy,
44204422
Name name,
44214423
Member? interfaceTarget,
44224424
Arguments arguments,
@@ -4437,14 +4439,14 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
44374439
}
44384440
// TODO(cstefantsova): Find a better way than relying on [interfaceTarget].
44394441
Member? method =
4440-
hierarchy.getDispatchTarget(klass, name) ?? interfaceTarget;
4442+
membersHierarchy.getDispatchTarget(klass, name) ?? interfaceTarget;
44414443
// ignore: unnecessary_null_comparison
44424444
if (method == null || method is! Procedure) {
44434445
return;
44444446
}
44454447
if (klass != method.enclosingClass) {
44464448
Supertype parent =
4447-
hierarchy.getClassAsInstanceOf(klass, method.enclosingClass!)!;
4449+
classHierarchy.getClassAsInstanceOf(klass, method.enclosingClass!)!;
44484450
klass = method.enclosingClass!;
44494451
receiverTypeArguments = parent.typeArguments;
44504452
Map<TypeParameter, DartType> instanceSubstitutionMap = substitutionMap;
@@ -4492,7 +4494,6 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
44924494

44934495
void checkBoundsInFunctionInvocation(
44944496
TypeEnvironment typeEnvironment,
4495-
ClassHierarchy hierarchy,
44964497
FunctionType functionType,
44974498
String? localName,
44984499
Arguments arguments,
@@ -4526,7 +4527,6 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
45264527

45274528
void checkBoundsInInstantiation(
45284529
TypeEnvironment typeEnvironment,
4529-
ClassHierarchy hierarchy,
45304530
FunctionType functionType,
45314531
List<DartType> typeArguments,
45324532
Uri fileUri,

pkg/front_end/lib/src/fasta/source/source_loader.dart

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2295,21 +2295,25 @@ severity: $severity
22952295
Name name = restrictedMemberNames[i];
22962296
Class? declarer = restrictedMemberDeclarers[i];
22972297

2298-
Member? member = hierarchy.getDispatchTarget(classBuilder.cls, name);
2299-
if (member?.enclosingClass != declarer &&
2300-
member?.enclosingClass != classBuilder.cls &&
2301-
member?.isAbstract == false) {
2302-
classBuilder.libraryBuilder.addProblem(
2303-
templateEnumInheritsRestricted.withArguments(name.text),
2304-
classBuilder.charOffset,
2305-
classBuilder.name.length,
2306-
classBuilder.fileUri,
2307-
context: <LocatedMessage>[
2308-
messageEnumInheritsRestrictedMember.withLocation(
2309-
member!.fileUri,
2310-
member.fileOffset,
2311-
member.name.text.length)
2312-
]);
2298+
ClassMember? classMember =
2299+
membersBuilder.getDispatchClassMember(classBuilder.cls, name);
2300+
if (classMember != null) {
2301+
Member member = classMember.getMember(membersBuilder);
2302+
if (member.enclosingClass != declarer &&
2303+
member.enclosingClass != classBuilder.cls &&
2304+
member.isAbstract == false) {
2305+
classBuilder.libraryBuilder.addProblem(
2306+
templateEnumInheritsRestricted.withArguments(name.text),
2307+
classBuilder.charOffset,
2308+
classBuilder.name.length,
2309+
classBuilder.fileUri,
2310+
context: <LocatedMessage>[
2311+
messageEnumInheritsRestrictedMember.withLocation(
2312+
classMember.fileUri,
2313+
classMember.charOffset,
2314+
member.name.text.length)
2315+
]);
2316+
}
23132317
}
23142318
}
23152319
}

pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,7 +1407,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
14071407
if (inferredExpressionType is InterfaceType) {
14081408
// TODO(johnniwinther): Should we use the type of
14091409
// `iterable.iterator.current` instead?
1410-
List<DartType>? supertypeArguments = classHierarchy
1410+
List<DartType>? supertypeArguments = hierarchyBuilder
14111411
.getTypeArgumentsAsInstanceOf(inferredExpressionType, iterableClass);
14121412
if (supertypeArguments != null) {
14131413
inferredType = supertypeArguments[0];
@@ -1636,7 +1636,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
16361636
InitializerInferenceResult visitInvalidSuperInitializerJudgment(
16371637
InvalidSuperInitializerJudgment node) {
16381638
Substitution substitution = Substitution.fromSupertype(
1639-
classHierarchy.getClassAsInstanceOf(
1639+
hierarchyBuilder.getClassAsInstanceOf(
16401640
thisType!.classNode, node.target.enclosingClass)!);
16411641
FunctionType functionType = replaceReturnType(
16421642
substitution.substituteType(node.target.function
@@ -2843,10 +2843,10 @@ class InferenceVisitorImpl extends InferenceVisitorBase
28432843
// Ambiguous set/map literal
28442844
if (unfuturedTypeContext is InterfaceType) {
28452845
typeContextIsMap = typeContextIsMap ||
2846-
classHierarchy.isSubtypeOf(
2846+
hierarchyBuilder.isSubtypeOf(
28472847
unfuturedTypeContext.classNode, coreTypes.mapClass);
28482848
typeContextIsIterable = typeContextIsIterable ||
2849-
classHierarchy.isSubtypeOf(
2849+
hierarchyBuilder.isSubtypeOf(
28502850
unfuturedTypeContext.classNode, coreTypes.iterableClass);
28512851
if (node.entries.isEmpty && typeContextIsIterable && !typeContextIsMap) {
28522852
// Set literal
@@ -3086,7 +3086,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
30863086
result.inferredType, result.applyResult(invocation));
30873087
} else {
30883088
// TODO(johnniwinther): Handle augmentation of field with inferred types.
3089-
TypeInferenceEngine.resolveInferenceNode(member, classHierarchy);
3089+
TypeInferenceEngine.resolveInferenceNode(member, hierarchyBuilder);
30903090
Link<NullAwareGuard> nullAwareGuards = const Link<NullAwareGuard>();
30913091
DartType receiverType = member.getterType;
30923092
Expression receiver = new StaticGet(member)..fileOffset = node.fileOffset;
@@ -5892,7 +5892,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
58925892
return new ExpressionInferenceResult(replacementType, replacement);
58935893
} else {
58945894
// TODO(johnniwinther): Handle augmentation of field with inferred types.
5895-
TypeInferenceEngine.resolveInferenceNode(member, classHierarchy);
5895+
TypeInferenceEngine.resolveInferenceNode(member, hierarchyBuilder);
58965896
DartType writeContext = member.setterType;
58975897
ExpressionInferenceResult rhsResult =
58985898
inferExpression(node.value, writeContext, isVoidAllowed: true);
@@ -6153,7 +6153,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
61536153
readResult.inferredType, readResult.expression);
61546154
} else {
61556155
// TODO(johnniwinther): Handle augmentation of field with inferred types.
6156-
TypeInferenceEngine.resolveInferenceNode(member, classHierarchy);
6156+
TypeInferenceEngine.resolveInferenceNode(member, hierarchyBuilder);
61576157
DartType type = member.getterType;
61586158

61596159
if (member is Procedure && member.kind == ProcedureKind.Method) {
@@ -6302,7 +6302,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
63026302
ExpressionInferenceResult visitStaticSet(
63036303
StaticSet node, DartType typeContext) {
63046304
Member writeMember = node.target;
6305-
TypeInferenceEngine.resolveInferenceNode(writeMember, classHierarchy);
6305+
TypeInferenceEngine.resolveInferenceNode(writeMember, hierarchyBuilder);
63066306
DartType writeContext = writeMember.setterType;
63076307
ExpressionInferenceResult rhsResult =
63086308
inferExpression(node.value, writeContext, isVoidAllowed: true);
@@ -6318,7 +6318,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
63186318
ExpressionInferenceResult visitStaticGet(
63196319
StaticGet node, DartType typeContext) {
63206320
Member target = node.target;
6321-
TypeInferenceEngine.resolveInferenceNode(target, classHierarchy);
6321+
TypeInferenceEngine.resolveInferenceNode(target, hierarchyBuilder);
63226322
DartType type = target.getterType;
63236323

63246324
if (!isNonNullableByDefault) {
@@ -6378,7 +6378,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
63786378
InitializerInferenceResult visitSuperInitializer(SuperInitializer node) {
63796379
ensureMemberType(node.target);
63806380
Substitution substitution = Substitution.fromSupertype(
6381-
classHierarchy.getClassAsInstanceOf(
6381+
hierarchyBuilder.getClassAsInstanceOf(
63826382
thisType!.classNode, node.target.enclosingClass)!);
63836383
FunctionType functionType = replaceReturnType(
63846384
substitution.substituteType(node.target.function

0 commit comments

Comments
 (0)