Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit e6e2a19

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Issue 36667. Check for unresolved URI in getLibraryByUri().
R=brianwilkerson@google.com Bug: dart-lang/sdk#36667 Change-Id: If35719b350c2f26edbb7cbe42f51af896aa41fe7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99713 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent 6ac38a9 commit e6e2a19

4 files changed

Lines changed: 34 additions & 4 deletions

File tree

pkg/analysis_server/lib/src/domain_completion.dart

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import 'package:analysis_server/src/services/completion/dart/completion_manager.
1919
import 'package:analysis_server/src/services/completion/token_details/token_detail_builder.dart';
2020
import 'package:analyzer/dart/analysis/results.dart';
2121
import 'package:analyzer/dart/analysis/session.dart';
22+
import 'package:analyzer/dart/element/element.dart' as analyzer;
2223
import 'package:analyzer/src/dart/analysis/driver.dart';
2324
import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
2425
import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -202,9 +203,20 @@ class CompletionDomainHandler extends AbstractRequestHandler {
202203
var libraryPath = fileElement.element.librarySource.fullName;
203204

204205
var resolvedLibrary = await session.getResolvedLibrary(libraryPath);
205-
var requestedLibraryElement = await session.getLibraryByUri(
206-
library.uriStr,
207-
);
206+
207+
analyzer.LibraryElement requestedLibraryElement;
208+
try {
209+
requestedLibraryElement = await session.getLibraryByUri(
210+
library.uriStr,
211+
);
212+
} on ArgumentError catch (e) {
213+
server.sendResponse(Response.invalidParameter(
214+
request,
215+
'uri',
216+
'Invalid URI: ${library.uriStr}\n$e',
217+
));
218+
return;
219+
}
208220

209221
var requestedElement =
210222
requestedLibraryElement.exportNamespace.get(requestedName);
@@ -344,7 +356,7 @@ class CompletionDomainHandler extends AbstractRequestHandler {
344356
request,
345357
'params.offset',
346358
'Expected offset between 0 and source length inclusive,'
347-
' but found $offset'));
359+
' but found $offset'));
348360
return;
349361
}
350362

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,12 +745,18 @@ class AnalysisDriver implements AnalysisDriverGeneric {
745745
* [uri], which is either resynthesized from the provided external summary
746746
* store, or built for a file to which the given [uri] is resolved.
747747
*
748+
* Throw [ArgumentError] if the [uri] does not correspond to a file.
749+
*
748750
* Throw [ArgumentError] if the [uri] corresponds to a part.
749751
*/
750752
Future<LibraryElement> getLibraryByUri(String uri) async {
751753
var uriObj = Uri.parse(uri);
752754
var file = _fsState.getFileForUri(uriObj);
753755

756+
if (file.isUnresolved) {
757+
throw ArgumentError('$uri cannot be resolved to a file.');
758+
}
759+
754760
if (file.isExternalLibrary) {
755761
return _createLibraryContext(file).getLibraryElement(file);
756762
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,6 +1527,12 @@ class B {}
15271527
expect(coreLibrary.getType('Object'), isNotNull);
15281528
}
15291529

1530+
test_getLibraryByUri_unresolvedUri() async {
1531+
expect(() async {
1532+
await driver.getLibraryByUri('package:foo/foo.dart');
1533+
}, throwsArgumentError);
1534+
}
1535+
15301536
test_getParsedLibrary_external() async {
15311537
var a1 = convertPath('/aaa/lib/a1.dart');
15321538
var a2 = convertPath('/aaa/lib/a2.dart');

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ class B {}
7373
expect(library.getType('C'), isNull);
7474
}
7575

76+
test_getLibraryByUri_unresolvedUri() async {
77+
expect(() async {
78+
await session.getLibraryByUri('package:foo/foo.dart');
79+
}, throwsArgumentError);
80+
}
81+
7682
test_getParsedLibrary() async {
7783
newFile(testPath, content: r'''
7884
class A {}

0 commit comments

Comments
 (0)