Skip to content

Commit fc7e450

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Parts. Test that nested parts show in 'units'.
Change-Id: Ic1770476439eeb93808d44e670e0cb9bc362379e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378541 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 989b5e4 commit fc7e450

File tree

2 files changed

+143
-5
lines changed

2 files changed

+143
-5
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4876,11 +4876,20 @@ class LibraryElementImpl extends LibraryOrAugmentationElementImpl
48764876
}
48774877

48784878
List<CompilationUnitElementImpl> get _partUnits {
4879-
return parts
4880-
.map((e) => e.uri)
4881-
.whereType<DirectiveUriWithUnitImpl>()
4882-
.map((e) => e.unit)
4883-
.toList();
4879+
var result = <CompilationUnitElementImpl>[];
4880+
4881+
void visitParts(CompilationUnitElementImpl unit) {
4882+
for (var part in unit.parts) {
4883+
if (part.uri case DirectiveUriWithUnitImpl uri) {
4884+
var unit = uri.unit;
4885+
result.add(unit);
4886+
visitParts(unit);
4887+
}
4888+
}
4889+
}
4890+
4891+
visitParts(definingCompilationUnit);
4892+
return result;
48844893
}
48854894

48864895
@override

pkg/analyzer/test/src/summary/elements_test.dart

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47615,6 +47615,135 @@ library
4761547615
''');
4761647616
}
4761747617

47618+
test_library_parts_nested() async {
47619+
newFile('$testPackageLibPath/a.dart', r'''
47620+
part of 'test.dart';
47621+
part 'a11.dart';
47622+
part 'a12.dart';
47623+
class A {}
47624+
''');
47625+
47626+
newFile('$testPackageLibPath/a11.dart', r'''
47627+
part of 'a.dart';
47628+
class A11 {}
47629+
''');
47630+
47631+
newFile('$testPackageLibPath/a12.dart', r'''
47632+
part of 'a.dart';
47633+
class A12 {}
47634+
''');
47635+
47636+
newFile('$testPackageLibPath/b.dart', r'''
47637+
part of 'test.dart';
47638+
part 'b11.dart';
47639+
part 'b12.dart';
47640+
''');
47641+
47642+
newFile('$testPackageLibPath/b11.dart', r'''
47643+
part of 'b.dart';
47644+
class B11 {}
47645+
''');
47646+
47647+
newFile('$testPackageLibPath/b12.dart', r'''
47648+
part of 'b.dart';
47649+
class B12 {}
47650+
''');
47651+
47652+
var library = await buildLibrary('''
47653+
part 'a.dart';
47654+
part 'b.dart';
47655+
class Z {}
47656+
''');
47657+
47658+
configuration.withConstructors = false;
47659+
checkElementText(library, r'''
47660+
library
47661+
reference: <testLibrary>
47662+
definingUnit: <testLibraryFragment>
47663+
parts
47664+
part_0
47665+
part_1
47666+
units
47667+
<testLibraryFragment>
47668+
enclosingElement: <testLibrary>
47669+
parts
47670+
part_0
47671+
uri: package:test/a.dart
47672+
enclosingElement: <testLibrary>
47673+
enclosingElement3: <testLibraryFragment>
47674+
unit: <testLibrary>::@fragment::package:test/a.dart
47675+
part_1
47676+
uri: package:test/b.dart
47677+
enclosingElement: <testLibrary>
47678+
enclosingElement3: <testLibraryFragment>
47679+
unit: <testLibrary>::@fragment::package:test/b.dart
47680+
classes
47681+
class Z @36
47682+
reference: <testLibraryFragment>::@class::Z
47683+
enclosingElement: <testLibraryFragment>
47684+
<testLibrary>::@fragment::package:test/a.dart
47685+
enclosingElement: <testLibrary>
47686+
enclosingElement3: <testLibraryFragment>
47687+
parts
47688+
part_2
47689+
uri: package:test/a11.dart
47690+
enclosingElement: <testLibrary>
47691+
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
47692+
unit: <testLibrary>::@fragment::package:test/a11.dart
47693+
part_3
47694+
uri: package:test/a12.dart
47695+
enclosingElement: <testLibrary>
47696+
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
47697+
unit: <testLibrary>::@fragment::package:test/a12.dart
47698+
classes
47699+
class A @61
47700+
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
47701+
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
47702+
<testLibrary>::@fragment::package:test/a11.dart
47703+
enclosingElement: <testLibrary>
47704+
enclosingElement3: <testLibraryFragment>
47705+
classes
47706+
class A11 @24
47707+
reference: <testLibrary>::@fragment::package:test/a11.dart::@class::A11
47708+
enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
47709+
<testLibrary>::@fragment::package:test/a12.dart
47710+
enclosingElement: <testLibrary>
47711+
enclosingElement3: <testLibraryFragment>
47712+
classes
47713+
class A12 @24
47714+
reference: <testLibrary>::@fragment::package:test/a12.dart::@class::A12
47715+
enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
47716+
<testLibrary>::@fragment::package:test/b.dart
47717+
enclosingElement: <testLibrary>
47718+
enclosingElement3: <testLibraryFragment>
47719+
parts
47720+
part_4
47721+
uri: package:test/b11.dart
47722+
enclosingElement: <testLibrary>
47723+
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
47724+
unit: <testLibrary>::@fragment::package:test/b11.dart
47725+
part_5
47726+
uri: package:test/b12.dart
47727+
enclosingElement: <testLibrary>
47728+
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
47729+
unit: <testLibrary>::@fragment::package:test/b12.dart
47730+
<testLibrary>::@fragment::package:test/b11.dart
47731+
enclosingElement: <testLibrary>
47732+
enclosingElement3: <testLibraryFragment>
47733+
classes
47734+
class B11 @24
47735+
reference: <testLibrary>::@fragment::package:test/b11.dart::@class::B11
47736+
enclosingElement: <testLibrary>::@fragment::package:test/b11.dart
47737+
<testLibrary>::@fragment::package:test/b12.dart
47738+
enclosingElement: <testLibrary>
47739+
enclosingElement3: <testLibraryFragment>
47740+
classes
47741+
class B12 @24
47742+
reference: <testLibrary>::@fragment::package:test/b12.dart::@class::B12
47743+
enclosingElement: <testLibrary>::@fragment::package:test/b12.dart
47744+
''');
47745+
}
47746+
4761847747
test_library_parts_noRelativeUriStr() async {
4761947748
var library = await buildLibrary(r'''
4762047749
part '${'foo'}.dart';

0 commit comments

Comments
 (0)