Fix library name insert and access inconsistency on windows

Make naming of libraries on windows consistent with the behaivor on
linux and mac.

Fixes #27576

R=vsm@google.com

Review URL: https://codereview.chromium.org/2415653002 .
This commit is contained in:
Nicholas Shahan 2016-10-12 14:14:00 -07:00
parent dc53ea46bc
commit d8505ee264

View file

@ -31,7 +31,7 @@ import 'package:analyzer/src/summary/summarize_elements.dart'
import 'package:analyzer/src/summary/summary_sdk.dart';
import 'package:analyzer/src/task/strong/ast_properties.dart'
show isDynamicInvoke, setIsDynamicInvoke, getImplicitAssignmentCast;
import 'package:path/path.dart' show separator;
import 'package:path/path.dart' show separator, isWithin, fromUri;
import '../closure/closure_annotator.dart' show ClosureAnnotator;
import '../js_ast/js_ast.dart' as JS;
@ -5452,16 +5452,16 @@ String jsLibraryName(String libraryRoot, LibraryElement library) {
return uri.path;
}
// TODO(vsm): This is not necessarily unique if '__' appears in a file name.
var separator = '__';
var customSeparator = '__';
String qualifiedPath;
if (uri.scheme == 'package') {
// Strip the package name.
// TODO(vsm): This is not unique if an escaped '/'appears in a filename.
// E.g., "foo/bar.dart" and "foo$47bar.dart" would collide.
qualifiedPath = uri.pathSegments.skip(1).join(separator);
} else if (uri.toFilePath().startsWith(libraryRoot)) {
qualifiedPath = uri.pathSegments.skip(1).join(customSeparator);
} else if (isWithin(libraryRoot, uri.toFilePath())) {
qualifiedPath =
uri.path.substring(libraryRoot.length).replaceAll('/', separator);
fromUri(uri).substring(libraryRoot.length).replaceAll(separator, customSeparator);
} else {
// We don't have a unique name.
throw 'Invalid library root. $libraryRoot does not contain ${uri