Skip to content

Commit 176fc82

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Fix for NPE when the subclass has missing name.
Change-Id: I103692a062d15fc856992458d04190bb7edc438c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/454340 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent b5aa5b7 commit 176fc82

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,10 +1111,11 @@ class LibraryManifestBuilder {
11111111
var classItem = declaredItems[classElement];
11121112
if (classItem != null) {
11131113
classItem as ClassItem;
1114-
var ids = (classElement.allSubtypes ?? []).map((type) {
1115-
var item = declaredItems[type.element] as InterfaceItem;
1116-
return item.id;
1117-
}).sorted();
1114+
var ids = (classElement.allSubtypes ?? [])
1115+
.map((type) => declaredItems[type.element])
1116+
.whereType<InterfaceItem>()
1117+
.map((item) => item.id)
1118+
.sorted();
11181119
classItem.allSubtypes = ManifestItemIdList(ids);
11191120
}
11201121
}

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55674,6 +55674,54 @@ class D extends B {}
5567455674
);
5567555675
}
5567655676

55677+
test_manifest_class_allSubtypes_final_missingName() async {
55678+
configuration.withElementManifests = true;
55679+
55680+
await _runLibraryManifestScenario(
55681+
initialCode: r'''
55682+
final class A {}
55683+
class extends A {}
55684+
''',
55685+
expectedInitialEvents: r'''
55686+
[operation] linkLibraryCycle SDK
55687+
[operation] linkLibraryCycle
55688+
package:test/test.dart
55689+
hashForRequirements: #H0
55690+
declaredClasses
55691+
A: #M0
55692+
flags: isFinal
55693+
supertype: Object @ dart:core
55694+
interface: #M1
55695+
exportMapId: #M2
55696+
exportMap
55697+
A: #M0
55698+
''',
55699+
updatedCode: r'''
55700+
final class A {}
55701+
class extends A {}
55702+
class C extends A {}
55703+
''',
55704+
expectedUpdatedEvents: r'''
55705+
[operation] linkLibraryCycle
55706+
package:test/test.dart
55707+
hashForRequirements: #H1
55708+
declaredClasses
55709+
A: #M0
55710+
flags: isFinal
55711+
supertype: Object @ dart:core
55712+
allSubtypes: #M3
55713+
interface: #M1
55714+
C: #M3
55715+
supertype: A @ package:test/test.dart
55716+
interface: #M4
55717+
exportMapId: #M5
55718+
exportMap
55719+
A: #M0
55720+
C: #M3
55721+
''',
55722+
);
55723+
}
55724+
5567755725
test_manifest_class_allSubtypes_final_mixin() async {
5567855726
configuration.withElementManifests = true;
5567955727

0 commit comments

Comments
 (0)