| Index: pkg/analyzer/lib/src/generated/source_io.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/source_io.dart b/pkg/analyzer/lib/src/generated/source_io.dart
|
| index 08c4677e7265d710493e7bfe35dc60506ad7ac75..ad2c1e9ee6cd66c6c561c20d5850c6df2e25af90 100644
|
| --- a/pkg/analyzer/lib/src/generated/source_io.dart
|
| +++ b/pkg/analyzer/lib/src/generated/source_io.dart
|
| @@ -13,6 +13,7 @@ import 'java_io.dart';
|
| import 'utilities_general.dart';
|
| import 'instrumentation.dart';
|
| import 'engine.dart';
|
| +import 'java_engine.dart';
|
| export 'source.dart';
|
|
|
| /**
|
| @@ -84,6 +85,11 @@ class DirectoryBasedSourceContainer implements SourceContainer {
|
| */
|
| class FileBasedSource implements Source {
|
| /**
|
| + * The URI from which this source was originally derived.
|
| + */
|
| + final Uri uri;
|
| +
|
| + /**
|
| * The file represented by this source.
|
| */
|
| final JavaFile file;
|
| @@ -94,25 +100,19 @@ class FileBasedSource implements Source {
|
| String _encoding;
|
|
|
| /**
|
| - * The kind of URI from which this source was originally derived.
|
| - */
|
| - final UriKind uriKind;
|
| -
|
| - /**
|
| - * Initialize a newly created source object. The source object is assumed to not be in a system
|
| - * library.
|
| + * Initialize a newly created source object.
|
| *
|
| * @param file the file represented by this source
|
| */
|
| - FileBasedSource.con1(JavaFile file) : this.con2(file, UriKind.FILE_URI);
|
| + FileBasedSource.con1(JavaFile file) : this.con2(file.toURI(), file);
|
|
|
| /**
|
| * Initialize a newly created source object.
|
| *
|
| * @param file the file represented by this source
|
| - * @param flags `true` if this source is in one of the system libraries
|
| + * @param uri the URI from which this source was originally derived
|
| */
|
| - FileBasedSource.con2(this.file, this.uriKind);
|
| + FileBasedSource.con2(this.uri, this.file);
|
|
|
| @override
|
| bool operator ==(Object object) => object != null && object is FileBasedSource && file == object.file;
|
| @@ -133,7 +133,7 @@ class FileBasedSource implements Source {
|
| @override
|
| String get encoding {
|
| if (_encoding == null) {
|
| - _encoding = "${new String.fromCharCode(uriKind.encoding)}${file.toURI().toString()}";
|
| + _encoding = uri.toString();
|
| }
|
| return _encoding;
|
| }
|
| @@ -148,19 +148,45 @@ class FileBasedSource implements Source {
|
| String get shortName => file.getName();
|
|
|
| @override
|
| + UriKind get uriKind {
|
| + String scheme = uri.scheme;
|
| + if (scheme == PackageUriResolver.PACKAGE_SCHEME) {
|
| + return UriKind.PACKAGE_URI;
|
| + } else if (scheme == DartUriResolver.DART_SCHEME) {
|
| + return UriKind.DART_URI;
|
| + } else if (scheme == FileUriResolver.FILE_SCHEME) {
|
| + return UriKind.FILE_URI;
|
| + }
|
| + return UriKind.FILE_URI;
|
| + }
|
| +
|
| + @override
|
| int get hashCode => file.hashCode;
|
|
|
| @override
|
| - bool get isInSystemLibrary => uriKind == UriKind.DART_URI;
|
| + bool get isInSystemLibrary => uri.scheme == DartUriResolver.DART_SCHEME;
|
|
|
| @override
|
| - Source resolveRelative(Uri containedUri) {
|
| + Uri resolveRelative(Uri containedUri) {
|
| try {
|
| - Uri resolvedUri = file.toURI().resolveUri(containedUri);
|
| - return new FileBasedSource.con2(new JavaFile.fromUri(resolvedUri), uriKind);
|
| - } catch (exception) {
|
| + Uri baseUri = uri;
|
| + bool isOpaque = uri.isAbsolute && !uri.path.startsWith('/');
|
| + if (isOpaque) {
|
| + String scheme = uri.scheme;
|
| + String part = uri.path;
|
| + if (scheme == DartUriResolver.DART_SCHEME && part.indexOf('/') < 0) {
|
| + part = "${part}/${part}.dart";
|
| + }
|
| + baseUri = parseUriWithException("${scheme}:/${part}");
|
| + }
|
| + Uri result = baseUri.resolveUri(containedUri);
|
| + if (isOpaque) {
|
| + result = parseUriWithException("${result.scheme}:${result.path.substring(1)}");
|
| + }
|
| + return result;
|
| + } catch (exception, stackTrace) {
|
| + throw new AnalysisException("Could not resolve URI (${containedUri}) relative to source (${uri})", new CaughtException(exception, stackTrace));
|
| }
|
| - return null;
|
| }
|
|
|
| @override
|
| @@ -221,19 +247,11 @@ class FileUriResolver extends UriResolver {
|
| static bool isFileUri(Uri uri) => uri.scheme == FILE_SCHEME;
|
|
|
| @override
|
| - Source fromEncoding(UriKind kind, Uri uri) {
|
| - if (kind == UriKind.FILE_URI) {
|
| - return new FileBasedSource.con2(new JavaFile.fromUri(uri), kind);
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - @override
|
| Source resolveAbsolute(Uri uri) {
|
| if (!isFileUri(uri)) {
|
| return null;
|
| }
|
| - return new FileBasedSource.con1(new JavaFile.fromUri(uri));
|
| + return new FileBasedSource.con2(uri, new JavaFile.fromUri(uri));
|
| }
|
| }
|
|
|
| @@ -328,14 +346,6 @@ class PackageUriResolver extends UriResolver {
|
| }
|
|
|
| @override
|
| - Source fromEncoding(UriKind kind, Uri uri) {
|
| - if (kind == UriKind.PACKAGE_URI) {
|
| - return new FileBasedSource.con2(new JavaFile.fromUri(uri), kind);
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - @override
|
| Source resolveAbsolute(Uri uri) {
|
| if (!isPackageUri(uri)) {
|
| return null;
|
| @@ -366,11 +376,13 @@ class PackageUriResolver extends UriResolver {
|
| JavaFile resolvedFile = new JavaFile.relative(packagesDirectory, path);
|
| if (resolvedFile.exists()) {
|
| JavaFile canonicalFile = getCanonicalFile(packagesDirectory, pkgName, relPath);
|
| - UriKind uriKind = _isSelfReference(packagesDirectory, canonicalFile) ? UriKind.FILE_URI : UriKind.PACKAGE_URI;
|
| - return new FileBasedSource.con2(canonicalFile, uriKind);
|
| + if (_isSelfReference(packagesDirectory, canonicalFile)) {
|
| + uri = canonicalFile.toURI();
|
| + }
|
| + return new FileBasedSource.con2(uri, canonicalFile);
|
| }
|
| }
|
| - return new FileBasedSource.con2(getCanonicalFile(_packagesDirectories[0], pkgName, relPath), UriKind.PACKAGE_URI);
|
| + return new FileBasedSource.con2(uri, getCanonicalFile(_packagesDirectories[0], pkgName, relPath));
|
| }
|
|
|
| @override
|
| @@ -469,14 +481,6 @@ class RelativeFileUriResolver extends UriResolver {
|
| RelativeFileUriResolver(this._rootDirectory, this._relativeDirectories) : super();
|
|
|
| @override
|
| - Source fromEncoding(UriKind kind, Uri uri) {
|
| - if (kind == UriKind.FILE_URI) {
|
| - return new FileBasedSource.con2(new JavaFile.fromUri(uri), kind);
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - @override
|
| Source resolveAbsolute(Uri uri) {
|
| String rootPath = _rootDirectory.toURI().path;
|
| String uriPath = uri.path;
|
| @@ -485,7 +489,7 @@ class RelativeFileUriResolver extends UriResolver {
|
| for (JavaFile dir in _relativeDirectories) {
|
| JavaFile file = new JavaFile.relative(dir, filePath);
|
| if (file.exists()) {
|
| - return new FileBasedSource.con2(file, UriKind.FILE_URI);
|
| + return new FileBasedSource.con2(uri, file);
|
| }
|
| }
|
| }
|
|
|