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 {