Skip to content

Commit 6b4ec9b

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Simplify reporting dependency failures.
Change-Id: If89c481bf9204f32a2f714055bd259dfbc2667e2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/417564 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 7fb6f1f commit 6b4ec9b

File tree

4 files changed

+324
-93
lines changed

4 files changed

+324
-93
lines changed

pkg/analyzer/lib/src/fine/requirement_failure.dart

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,12 @@ final class ExportLibraryMissing extends ExportFailure {
4646
});
4747
}
4848

49-
sealed class InstanceMemberFailure extends RequirementFailure {}
50-
51-
class InstanceMemberIdMismatch extends InstanceMemberFailure {
49+
class InstanceMemberIdMismatch extends RequirementFailure {
5250
final Uri libraryUri;
5351
final LookupName interfaceName;
5452
final LookupName memberName;
5553
final ManifestItemId? expectedId;
56-
final ManifestItemId actualId;
54+
final ManifestItemId? actualId;
5755

5856
InstanceMemberIdMismatch({
5957
required this.libraryUri,
@@ -64,10 +62,6 @@ class InstanceMemberIdMismatch extends InstanceMemberFailure {
6462
});
6563
}
6664

67-
class InstanceMemberMissing extends InstanceMemberFailure {}
68-
69-
class InstanceMemberPresent extends InstanceMemberFailure {}
70-
7165
class LibraryMissing extends RequirementFailure {
7266
final Uri uri;
7367

@@ -80,45 +74,29 @@ sealed class RequirementFailure {}
8074

8175
sealed class TopLevelFailure extends RequirementFailure {
8276
final Uri libraryUri;
77+
final LookupName name;
8378

8479
TopLevelFailure({
8580
required this.libraryUri,
81+
required this.name,
8682
});
8783
}
8884

8985
class TopLevelIdMismatch extends TopLevelFailure {
90-
final LookupName name;
9186
final ManifestItemId? expectedId;
92-
final ManifestItemId actualId;
87+
final ManifestItemId? actualId;
9388

9489
TopLevelIdMismatch({
9590
required super.libraryUri,
96-
required this.name,
91+
required super.name,
9792
required this.expectedId,
9893
required this.actualId,
9994
});
10095
}
10196

102-
class TopLevelMissing extends TopLevelFailure {
103-
final LookupName name;
104-
105-
TopLevelMissing({
106-
required super.libraryUri,
107-
required this.name,
108-
});
109-
}
110-
11197
class TopLevelNotClass extends TopLevelFailure {
11298
TopLevelNotClass({
11399
required super.libraryUri,
114-
});
115-
}
116-
117-
class TopLevelPresent extends TopLevelFailure {
118-
final LookupName name;
119-
120-
TopLevelPresent({
121-
required super.libraryUri,
122-
required this.name,
100+
required super.name,
123101
});
124102
}

pkg/analyzer/lib/src/fine/requirements.dart

Lines changed: 20 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -106,28 +106,13 @@ class BundleRequirementsManifest {
106106
for (var topLevelEntry in libraryEntry.value.entries) {
107107
var name = topLevelEntry.key;
108108
var item = libraryManifest.items[name];
109-
if (topLevelEntry.value == null) {
110-
if (item != null) {
111-
return TopLevelPresent(
112-
libraryUri: libraryUri,
113-
name: name,
114-
);
115-
}
116-
} else {
117-
if (item == null) {
118-
return TopLevelMissing(
119-
libraryUri: libraryUri,
120-
name: name,
121-
);
122-
}
123-
if (item.id != topLevelEntry.value) {
124-
return TopLevelIdMismatch(
125-
libraryUri: libraryUri,
126-
name: name,
127-
expectedId: topLevelEntry.value,
128-
actualId: item.id,
129-
);
130-
}
109+
if (topLevelEntry.value != item?.id) {
110+
return TopLevelIdMismatch(
111+
libraryUri: libraryUri,
112+
name: name,
113+
expectedId: topLevelEntry.value,
114+
actualId: item?.id,
115+
);
131116
}
132117
}
133118
}
@@ -147,31 +132,22 @@ class BundleRequirementsManifest {
147132
if (interfaceItem is! ClassItem) {
148133
return TopLevelNotClass(
149134
libraryUri: libraryUri,
135+
name: interfaceName,
150136
);
151137
}
152138

153139
for (var memberEntry in interfaceEntry.value.entries) {
154140
var memberName = memberEntry.key;
155141
var memberItem = interfaceItem.members[memberName];
156142
var expectedId = memberEntry.value;
157-
if (expectedId == null) {
158-
if (memberItem != null) {
159-
return InstanceMemberPresent();
160-
}
161-
} else {
162-
if (memberItem == null) {
163-
return InstanceMemberMissing();
164-
}
165-
var actualId = memberItem.id;
166-
if (actualId != expectedId) {
167-
return InstanceMemberIdMismatch(
168-
libraryUri: libraryUri,
169-
interfaceName: interfaceName,
170-
memberName: memberName,
171-
expectedId: expectedId,
172-
actualId: actualId,
173-
);
174-
}
143+
if (expectedId != memberItem?.id) {
144+
return InstanceMemberIdMismatch(
145+
libraryUri: libraryUri,
146+
interfaceName: interfaceName,
147+
memberName: memberName,
148+
expectedId: expectedId,
149+
actualId: memberItem?.id,
150+
);
175151
}
176152
}
177153
}
@@ -203,7 +179,8 @@ class BundleRequirementsManifest {
203179
var libraryElement = element.library2 as LibraryElementImpl;
204180
var manifest = libraryElement.manifest;
205181

206-
// TODO(scheglov): can this happen?
182+
// If we are linking the library, its manifest is not set yet.
183+
// But then we also don't care about this dependency.
207184
if (manifest == null) {
208185
return;
209186
}
@@ -303,7 +280,8 @@ class BundleRequirementsManifest {
303280
for (var fragment in libraryElement.fragments) {
304281
for (var export in fragment.libraryExports) {
305282
var exportedLibrary = export.exportedLibrary;
306-
// TODO(scheglov): record this
283+
284+
// If no library, then there is nothing to re-export.
307285
if (exportedLibrary == null) {
308286
continue;
309287
}

0 commit comments

Comments
 (0)