a7c720f61b
dart2jslib.dart is deleted compiler.dart is a library containing mainly Compiler other parts of compiler.dart move according to the listing in https://codereview.chromium.org/1280343002/ R=sigmund@google.com Review URL: https://codereview.chromium.org//1284593003.
91 lines
2.4 KiB
Dart
91 lines
2.4 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
library dart2js.diagnostics.code_location;
|
|
|
|
import '../util/uri_extras.dart' as uri_extras show relativize;
|
|
|
|
/// [CodeLocation] divides uris into different classes.
|
|
///
|
|
/// These are used to group uris from user code, platform libraries and
|
|
/// packages.
|
|
abstract class CodeLocation {
|
|
/// Returns `true` if [uri] is in this code location.
|
|
bool inSameLocation(Uri uri);
|
|
|
|
/// Returns the uri of this location relative to [baseUri].
|
|
String relativize(Uri baseUri);
|
|
|
|
factory CodeLocation(Uri uri) {
|
|
if (uri.scheme == 'package') {
|
|
int slashPos = uri.path.indexOf('/');
|
|
if (slashPos != -1) {
|
|
String packageName = uri.path.substring(0, slashPos);
|
|
return new PackageLocation(packageName);
|
|
} else {
|
|
return new UriLocation(uri);
|
|
}
|
|
} else {
|
|
return new SchemeLocation(uri);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// A code location defined by the scheme of the uri.
|
|
///
|
|
/// Used for non-package uris, such as 'dart', 'file', and 'http'.
|
|
class SchemeLocation implements CodeLocation {
|
|
final Uri uri;
|
|
|
|
SchemeLocation(this.uri);
|
|
|
|
bool inSameLocation(Uri uri) {
|
|
return this.uri.scheme == uri.scheme;
|
|
}
|
|
|
|
String relativize(Uri baseUri) {
|
|
return uri_extras.relativize(baseUri, uri, false);
|
|
}
|
|
}
|
|
|
|
/// A code location defined by the package name.
|
|
///
|
|
/// Used for package uris, separated by their `package names`, that is, the
|
|
/// 'foo' of 'package:foo/bar.dart'.
|
|
class PackageLocation implements CodeLocation {
|
|
final String packageName;
|
|
|
|
PackageLocation(this.packageName);
|
|
|
|
bool inSameLocation(Uri uri) {
|
|
return uri.scheme == 'package' && uri.path.startsWith('$packageName/');
|
|
}
|
|
|
|
String relativize(Uri baseUri) => 'package:$packageName';
|
|
}
|
|
|
|
/// A code location defined by the whole uri.
|
|
///
|
|
/// Used for package uris with no package name. For instance 'package:foo.dart'.
|
|
class UriLocation implements CodeLocation {
|
|
final Uri uri;
|
|
|
|
UriLocation(this.uri);
|
|
|
|
bool inSameLocation(Uri uri) => this.uri == uri;
|
|
|
|
String relativize(Uri baseUri) {
|
|
return uri_extras.relativize(baseUri, uri, false);
|
|
}
|
|
}
|
|
|
|
/// A code location that contains any uri.
|
|
class AnyLocation implements CodeLocation {
|
|
const AnyLocation();
|
|
|
|
bool inSameLocation(Uri uri) => true;
|
|
|
|
String relativize(Uri baseUri) => '$baseUri';
|
|
}
|