Deprecate LibraryElement.parts
Change-Id: Iade5a3c2e60901de6b10b690d95a605d96eab2c0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/250788
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 17a94f3..c84f8ed 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,5 +1,6 @@
## 4.3.0-dev
* Deprecated `Directive.keyword`, use corresponding `xyzToken` in specific directives.
+* Deprecated `LibraryElement.parts`, use `parts2` instead.
## 4.2.0
* Update SDK constraints to `>=2.17.0 <3.0.0`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 74d7622..6f64355 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1393,6 +1393,7 @@
/// Return a list containing all of the compilation units that are included in
/// this library using a `part` directive. This does not include the defining
/// compilation unit that contains the `part` directives.
+ @Deprecated('Use parts2 instead')
List<CompilationUnitElement> get parts;
/// Returns the list of `part` directives of this library.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index f1f04d8..41d1897 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3929,6 +3929,7 @@
@override
String get name => super.name!;
+ @Deprecated('Use parts2 instead')
@override
List<CompilationUnitElement> get parts {
return _parts2
@@ -3991,10 +3992,10 @@
@override
List<CompilationUnitElement> get units {
- List<CompilationUnitElement> units = <CompilationUnitElement>[];
- units.add(_definingCompilationUnit);
- units.addAll(parts);
- return units;
+ return [
+ _definingCompilationUnit,
+ ...parts2.whereType<PartElementWithPart>().map((e) => e.includedUnit),
+ ];
}
@override
@@ -4011,12 +4012,8 @@
}
ClassElement? getEnum(String name) {
- var element = _definingCompilationUnit.getEnum(name);
- if (element != null) {
- return element;
- }
- for (CompilationUnitElement part in parts) {
- element = part.getEnum(name);
+ for (final unitElement in units) {
+ final element = unitElement.getEnum(name);
if (element != null) {
return element;
}
@@ -4031,8 +4028,14 @@
}
@override
- ClassElement? getType(String className) {
- return getTypeFromParts(className, _definingCompilationUnit, parts);
+ ClassElement? getType(String name) {
+ for (final unitElement in units) {
+ final element = unitElement.getType(name);
+ if (element != null) {
+ return element;
+ }
+ }
+ return null;
}
/// Indicates whether it is unnecessary to report an undefined identifier
@@ -4110,7 +4113,7 @@
@override
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
- safelyVisitChildren(parts, visitor);
+ safelyVisitChildren(parts2, visitor);
}
static List<PrefixElement> buildPrefixesFromImports(
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 9a76055..84552fb 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -180,9 +180,8 @@
/// [library].
Namespace createPublicNamespaceForLibrary(LibraryElement library) {
Map<String, Element> definedNames = HashMap<String, Element>();
- _addPublicNames(definedNames, library.definingCompilationUnit);
- for (CompilationUnitElement compilationUnit in library.parts) {
- _addPublicNames(definedNames, compilationUnit);
+ for (final unitElement in library.units) {
+ _addPublicNames(definedNames, unitElement);
}
// For libraries that import `dart:core` with a prefix, we have to add
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 14775ba..55cd57b4 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -327,11 +327,11 @@
CompilationUnitElement element = node.declaredElement!;
if (element != _currentLibrary.definingCompilationUnit) {
addWithoutChecking(_currentLibrary.definingCompilationUnit);
- for (CompilationUnitElement part in _currentLibrary.parts) {
- if (element == part) {
+ for (final unitElement in _currentLibrary.units) {
+ if (element == unitElement) {
break;
}
- addWithoutChecking(part);
+ addWithoutChecking(unitElement);
}
}
for (CompilationUnitMember member in node.declarations) {
diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart
index 0c572a2..29ff647 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_element.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart
@@ -216,19 +216,22 @@
}
CompilationUnitElement part(String targetUri) {
- CompilationUnitElement? partElement;
+ CompilationUnitElement? result;
- for (var part in libraryElement.parts) {
- if (part.uri == targetUri) {
- if (partElement != null) {
- throw StateError('Not unique: $targetUri');
+ for (final part in libraryElement.parts2) {
+ if (part is PartElementWithPart) {
+ final unitElement = part.includedUnit;
+ if ('${unitElement.source.uri}' == targetUri) {
+ if (result != null) {
+ throw StateError('Not unique: $targetUri');
+ }
+ result = unitElement;
}
- partElement = part;
}
}
- if (partElement != null) {
- return partElement;
+ if (result != null) {
+ return result;
}
throw StateError('Not found: $targetUri');
}
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 405cd7b..9714635 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -1292,8 +1292,10 @@
part 'unitB.dart';
''');
LibraryElement element = result.libraryElement;
- CompilationUnitElement unitElementA = element.parts[0];
- CompilationUnitElement unitElementB = element.parts[1];
+ CompilationUnitElement unitElementA =
+ (element.parts2[0] as PartElementWithPart).includedUnit;
+ CompilationUnitElement unitElementB =
+ (element.parts2[1] as PartElementWithPart).includedUnit;
var expected = [
ExpectedResult(unitElementA, SearchResultKind.REFERENCE,
codeA.indexOf('lib; // A'), 'lib'.length),
@@ -1328,8 +1330,10 @@
part 'unitB.dart';
''');
LibraryElement element = result.libraryElement;
- CompilationUnitElement unitElementA = element.parts[0];
- CompilationUnitElement unitElementB = element.parts[1];
+ CompilationUnitElement unitElementA =
+ (element.parts2[0] as PartElementWithPart).includedUnit;
+ CompilationUnitElement unitElementB =
+ (element.parts2[1] as PartElementWithPart).includedUnit;
var expected = [
ExpectedResult(unitElementA, SearchResultKind.REFERENCE,
codeA.indexOf('lib; // A'), 'lib'.length),
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index aeabc2c..b49c61b 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -29856,7 +29856,7 @@
// The difference with the test above is that we ask the part first.
// There was a bug that we were not loading library directives.
- expect(library.parts[0].metadata, isEmpty);
+ expect(library.parts2[0].metadata, isEmpty);
}
test_metadata_prefixed_variable() async {
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
index 0f417e7..2a23acf 100644
--- a/pkg/analyzer/test/src/summary/macro_test.dart
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -1806,7 +1806,8 @@
}
if (expected != null) {
- final x = library.parts.single.topLevelVariables.single;
+ final partElement = library.parts2.single as PartElementWithPart;
+ final x = partElement.includedUnit.topLevelVariables.single;
expect(x.name, 'x');
x as ConstTopLevelVariableElementImpl;
final actual = (x.constantInitializer as SimpleStringLiteral).value;
@@ -1868,7 +1869,8 @@
library.definingCompilationUnit.getType('A'),
);
- var x = library.parts.single.topLevelVariables.single;
+ final partElement = library.parts2.single as PartElementWithPart;
+ final x = partElement.includedUnit.topLevelVariables.single;
expect(x.name, 'x');
x as ConstTopLevelVariableElementImpl;
var x_literal = x.constantInitializer as SimpleStringLiteral;
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index fbcc7a7..06fe1f4 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -67,9 +67,8 @@
return;
}
// Add compilation units.
- addCompilationUnitSource(library.definingCompilationUnit, units);
- for (var child in library.parts) {
- addCompilationUnitSource(child, units);
+ for (final unitElement in library.units) {
+ addCompilationUnitSource(unitElement, units);
}
// Add referenced libraries.
for (var child in library.importedLibraries) {