Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Unified Diff: pkg/analyzer/lib/src/summary/link.dart

Issue 2669863003: Handle invalid URIs in summaries. (Closed)
Patch Set: Remove uri.dart, tweak for summarize_ast_test. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/summary/link.dart
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 2d1dd55b6b88dcbc9852779ab8711ff6732afe01..c1f9f67b553335322ec528030db7408442043325 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -146,8 +146,17 @@ Map<String, LinkedLibraryBuilder> setupForLink(Set<String> libraryUris,
<String, LinkedLibraryBuilder>{};
for (String absoluteUri in libraryUris) {
Uri uri = Uri.parse(absoluteUri);
- UnlinkedUnit getRelativeUnit(String relativeUri) =>
- getUnit(resolveRelativeUri(uri, Uri.parse(relativeUri)).toString());
+
+ UnlinkedUnit getRelativeUnit(String relativeUriStr) {
+ Uri relativeUri;
+ try {
+ relativeUri = Uri.parse(relativeUriStr);
+ } on FormatException {
+ return new UnlinkedUnitBuilder();
+ }
+ return getUnit(resolveRelativeUri(uri, relativeUri).toString());
+ }
+
linkedLibraries[absoluteUri] = prelink(
getUnit(absoluteUri),
getRelativeUnit,
@@ -3312,8 +3321,11 @@ abstract class LibraryElementForLink<
Element get enclosingElement => null;
@override
- List<LibraryElementForLink> get exportedLibraries => _exportedLibraries ??=
- _linkedLibrary.exportDependencies.map(_getDependency).toList();
+ List<LibraryElementForLink> get exportedLibraries =>
+ _exportedLibraries ??= _linkedLibrary.exportDependencies
+ .map(_getDependency)
+ .where((library) => library != null)
+ .toList();
@override
String get identifier => _absoluteUri.toString();
@@ -3348,11 +3360,19 @@ abstract class LibraryElementForLink<
];
int numParts = definingUnit.parts.length;
for (int i = 0; i < numParts; i++) {
- // TODO(paulberry): make sure we handle the case where Uri.parse fails.
// TODO(paulberry): make sure we handle the case where
// resolveRelativeUri fails.
+ String partRelativeUriStr = definingUnit.publicNamespace.parts[i];
+
+ Uri partRelativeUri;
+ try {
+ partRelativeUri = Uri.parse(partRelativeUriStr);
+ } on FormatException {
+ continue;
+ }
+
String partAbsoluteUri = resolveRelativeUri(
- _absoluteUri, Uri.parse(definingUnit.publicNamespace.parts[i]))
+ _absoluteUri, partRelativeUri)
.toString();
UnlinkedUnit partUnit = _linker.getUnit(partAbsoluteUri);
_units.add(_makeUnitElement(
@@ -3395,10 +3415,18 @@ abstract class LibraryElementForLink<
LibraryElementForLink _getDependency(int index) {
LibraryElementForLink result = _dependencies[index];
if (result == null) {
- String relativeUri = _linkedLibrary.dependencies[index].uri;
- Uri absoluteUri = relativeUri.isEmpty
+ String relativeUriStr = _linkedLibrary.dependencies[index].uri;
+
+ Uri relativeUri;
+ try {
+ relativeUri = Uri.parse(relativeUriStr);
+ } on FormatException {
+ return null;
+ }
+
+ Uri absoluteUri = relativeUriStr.isEmpty
? _absoluteUri
- : resolveRelativeUri(_absoluteUri, Uri.parse(relativeUri));
+ : resolveRelativeUri(_absoluteUri, relativeUri);
result = _linker.getLibrary(absoluteUri);
_dependencies[index] = result;
}
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698