Don't include declarations of the library itself.
These declarations are already available through the library element
model.
R=brianwilkerson@google.com
Change-Id: I9d3d274a8bf4ad28c10f04afc30fa11436cd0f6a
Reviewed-on: https://dart-review.googlesource.com/c/92848
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index 0dea690..a9056f4 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -175,7 +175,11 @@
}
var contextLibraries = <Library>[];
- _addLibrariesWithPaths(contextLibraries, contextPathList);
+ _addLibrariesWithPaths(
+ contextLibraries,
+ contextPathList,
+ excludingLibraryOfPath: path,
+ );
return Libraries(sdkLibraries, dependencyLibraries, contextLibraries);
}
@@ -225,8 +229,14 @@
}
}
- void _addLibrariesWithPaths(List<Library> libraries, List<String> pathList) {
+ void _addLibrariesWithPaths(List<Library> libraries, List<String> pathList,
+ {String excludingLibraryOfPath}) {
+ var excludedFile = _tracker._pathToFile[excludingLibraryOfPath];
+ var excludedLibraryPath = (excludedFile?.library ?? excludedFile)?.path;
+
for (var path in pathList) {
+ if (path == excludedLibraryPath) continue;
+
var file = _tracker._pathToFile[path];
if (file != null && file.isLibrary) {
var library = _tracker._idToLibrary[file.id];
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index 9b07610..2f03798 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -1658,6 +1658,63 @@
}
}
+ test_excludeSelf() async {
+ var a = convertPath('/home/test/lib/a.dart');
+ var b = convertPath('/home/test/lib/b.dart');
+ var c = convertPath('/home/test/lib/c.dart');
+
+ newFile(a);
+ newFile(b);
+ newFile(c);
+
+ var context = tracker.addContext(testAnalysisContext);
+ await _doAllTrackerWork();
+
+ var aList = _uriListOfContextLibraries(context, a);
+ expect(
+ aList,
+ unorderedEquals([
+ 'package:test/b.dart',
+ 'package:test/c.dart',
+ ]),
+ );
+
+ var bList = _uriListOfContextLibraries(context, b);
+ expect(
+ bList,
+ unorderedEquals([
+ 'package:test/a.dart',
+ 'package:test/c.dart',
+ ]),
+ );
+ }
+
+ test_excludeSelf_part() async {
+ var a = convertPath('/home/test/lib/a.dart');
+ var b = convertPath('/home/test/lib/b.dart');
+ var c = convertPath('/home/test/lib/c.dart');
+
+ newFile(a, content: r'''
+part 'b.dart';
+''');
+ newFile(b, content: r'''
+part of 'a.dart';
+''');
+ newFile(c);
+
+ var context = tracker.addContext(testAnalysisContext);
+ await _doAllTrackerWork();
+
+ var aList = _uriListOfContextLibraries(context, a);
+ expect(aList, unorderedEquals(['package:test/c.dart']));
+
+ var bList = _uriListOfContextLibraries(context, b);
+ expect(bList, unorderedEquals(['package:test/c.dart']));
+
+ var cList = _uriListOfContextLibraries(context, c);
+ expect(cList, unorderedEquals(['package:test/a.dart']));
+ }
+
test_pub() async {
newFile('/home/aaa/lib/a.dart', content: 'class A {}');
newFile('/home/aaa/lib/src/a2.dart', content: 'class A2 {}');
@@ -2012,6 +2069,13 @@
expect(actualUriList, containsAll(uriList));
}
}
+
+ static List<String> _uriListOfContextLibraries(
+ DeclarationsContext context,
+ String path,
+ ) {
+ return context.getLibraries(path).context.map((l) => l.uriStr).toList();
+ }
}
class _Base extends AbstractContextTest {