Index: pkg/analyzer/lib/src/generated/utilities_dart.dart |
diff --git a/pkg/analyzer/lib/src/generated/utilities_dart.dart b/pkg/analyzer/lib/src/generated/utilities_dart.dart |
index 8dd40dffe09c8d33dafe3aa69bcb2e4ecc1705ac..b3f688a3e3fbf456190c411b9db3897a38be2aa7 100644 |
--- a/pkg/analyzer/lib/src/generated/utilities_dart.dart |
+++ b/pkg/analyzer/lib/src/generated/utilities_dart.dart |
@@ -27,12 +27,23 @@ Uri resolveRelativeUri(Uri baseUri, Uri containedUri) { |
Uri origBaseUri = baseUri; |
try { |
String scheme = baseUri.scheme; |
+ // dart:core => dart:core/core.dart |
if (scheme == DartUriResolver.DART_SCHEME) { |
String part = baseUri.path; |
if (part.indexOf('/') < 0) { |
baseUri = FastUri.parse('$scheme:$part/$part.dart'); |
} |
} |
+ // foo.dart + ../bar.dart = ../bar.dart |
+ // TODO(scheglov) Remove this temporary workaround. |
+ // Should be fixed as https://github.com/dart-lang/sdk/issues/27447 |
+ List<String> baseSegments = baseUri.pathSegments; |
+ List<String> containedSegments = containedUri.pathSegments; |
+ if (baseSegments.length == 1 && |
+ containedSegments.length > 0 && |
+ containedSegments[0] == '..') { |
+ return containedUri; |
+ } |
return baseUri.resolveUri(containedUri); |
} catch (exception, stackTrace) { |
throw new AnalysisException( |