Index: pkg/analyzer_experimental/lib/src/generated/source_io.dart |
=================================================================== |
--- pkg/analyzer_experimental/lib/src/generated/source_io.dart (revision 23549) |
+++ pkg/analyzer_experimental/lib/src/generated/source_io.dart (working copy) |
@@ -11,28 +11,34 @@ |
import 'engine.dart' show AnalysisContext, AnalysisEngine; |
export 'source.dart'; |
+ |
/** |
* Instances of the class {@code FileBasedSource} implement a source that represents a file. |
* @coverage dart.engine.source |
*/ |
class FileBasedSource implements Source { |
+ |
/** |
* The content cache used to access the contents of this source if they have been overridden from |
* what is on disk or cached. |
*/ |
ContentCache _contentCache; |
+ |
/** |
* The file represented by this source. |
*/ |
JavaFile _file; |
+ |
/** |
* The cached encoding for this source. |
*/ |
String _encoding; |
+ |
/** |
* The kind of URI from which this source was originally derived. |
*/ |
UriKind _uriKind; |
+ |
/** |
* Initialize a newly created source object. The source object is assumed to not be in a system |
* library. |
@@ -40,11 +46,12 @@ |
* @param file the file represented by this source |
*/ |
FileBasedSource.con1(ContentCache contentCache, JavaFile file) { |
- _jtd_constructor_329_impl(contentCache, file); |
+ _jtd_constructor_336_impl(contentCache, file); |
} |
- _jtd_constructor_329_impl(ContentCache contentCache, JavaFile file) { |
- _jtd_constructor_330_impl(contentCache, file, UriKind.FILE_URI); |
+ _jtd_constructor_336_impl(ContentCache contentCache, JavaFile file) { |
+ _jtd_constructor_337_impl(contentCache, file, UriKind.FILE_URI); |
} |
+ |
/** |
* Initialize a newly created source object. |
* @param contentCache the content cache used to access the contents of this source |
@@ -52,9 +59,9 @@ |
* @param flags {@code true} if this source is in one of the system libraries |
*/ |
FileBasedSource.con2(ContentCache contentCache2, JavaFile file2, UriKind uriKind2) { |
- _jtd_constructor_330_impl(contentCache2, file2, uriKind2); |
+ _jtd_constructor_337_impl(contentCache2, file2, uriKind2); |
} |
- _jtd_constructor_330_impl(ContentCache contentCache2, JavaFile file2, UriKind uriKind2) { |
+ _jtd_constructor_337_impl(ContentCache contentCache2, JavaFile file2, UriKind uriKind2) { |
this._contentCache = contentCache2; |
this._file = file2; |
this._uriKind = uriKind2; |
@@ -99,6 +106,7 @@ |
} |
return _file.getAbsolutePath(); |
} |
+ |
/** |
* Return the file represented by this source. This is an internal method that is only intended to |
* be used by {@link UriResolver}. |
@@ -106,6 +114,7 @@ |
*/ |
JavaFile get file => _file; |
} |
+ |
/** |
* Instances of the class {@code PackageUriResolver} resolve {@code package} URI's in the context of |
* an application. |
@@ -116,20 +125,29 @@ |
* @coverage dart.engine.source |
*/ |
class PackageUriResolver extends UriResolver { |
+ |
/** |
* The package directories that {@code package} URI's are assumed to be relative to. |
*/ |
List<JavaFile> _packagesDirectories; |
+ |
/** |
* The name of the {@code package} scheme. |
*/ |
static String _PACKAGE_SCHEME = "package"; |
+ |
/** |
+ * Log exceptions thrown with the message "Required key not available" only once. |
+ */ |
+ static bool _CanLogRequiredKeyIoException = true; |
+ |
+ /** |
* Return {@code true} if the given URI is a {@code package} URI. |
* @param uri the URI being tested |
* @return {@code true} if the given URI is a {@code package} URI |
*/ |
- static bool isPackageUri(Uri uri) => uri.scheme == _PACKAGE_SCHEME; |
+ static bool isPackageUri(Uri uri) => _PACKAGE_SCHEME == uri.scheme; |
+ |
/** |
* Initialize a newly created resolver to resolve {@code package} URI's relative to the given |
* package directories. |
@@ -179,6 +197,28 @@ |
} |
return new FileBasedSource.con2(contentCache, getCanonicalFile(_packagesDirectories[0], pkgName, relPath), UriKind.PACKAGE_URI); |
} |
+ Uri restoreAbsolute(Source source) { |
+ if (source is FileBasedSource) { |
+ String sourcePath = ((source as FileBasedSource)).file.getPath(); |
+ for (JavaFile packagesDirectory in _packagesDirectories) { |
+ List<JavaFile> pkgFolders = packagesDirectory.listFiles(); |
+ if (pkgFolders != null) { |
+ for (JavaFile pkgFolder in pkgFolders) { |
+ try { |
+ String pkgCanonicalPath = pkgFolder.getCanonicalPath(); |
+ if (sourcePath.startsWith(pkgCanonicalPath)) { |
+ String relPath = sourcePath.substring(pkgCanonicalPath.length); |
+ return parseUriWithException("${_PACKAGE_SCHEME}:${pkgFolder.getName()}${relPath}"); |
+ } |
+ } catch (e) { |
+ } |
+ } |
+ } |
+ } |
+ } |
+ return null; |
+ } |
+ |
/** |
* Answer the canonical file for the specified package. |
* @param packagesDirectory the "packages" directory (not {@code null}) |
@@ -192,17 +232,24 @@ |
try { |
pkgDir = pkgDir.getCanonicalFile(); |
} on IOException catch (e) { |
- AnalysisEngine.instance.logger.logError2("Canonical failed: ${pkgDir}", e); |
+ if (!e.toString().contains("Required key not available")) { |
+ AnalysisEngine.instance.logger.logError2("Canonical failed: ${pkgDir}", e); |
+ } else if (_CanLogRequiredKeyIoException) { |
+ _CanLogRequiredKeyIoException = false; |
+ AnalysisEngine.instance.logger.logError2("Canonical failed: ${pkgDir}", e); |
+ } |
} |
return new JavaFile.relative(pkgDir, relPath.replaceAll('/', JavaFile.separatorChar)); |
} |
} |
+ |
/** |
* Instances of the class {@link DirectoryBasedSourceContainer} represent a source container that |
* contains all sources within a given directory. |
* @coverage dart.engine.source |
*/ |
class DirectoryBasedSourceContainer implements SourceContainer { |
+ |
/** |
* Append the system file separator to the given path unless the path already ends with a |
* separator. |
@@ -215,33 +262,37 @@ |
} |
return "${path}${JavaFile.separator}"; |
} |
+ |
/** |
* The container's path (not {@code null}). |
*/ |
String _path; |
+ |
/** |
* Construct a container representing the specified directory and containing any sources whose{@link Source#getFullName()} starts with the directory's path. This is a convenience method, |
* fully equivalent to {@link DirectoryBasedSourceContainer#DirectoryBasedSourceContainer(String)}. |
* @param directory the directory (not {@code null}) |
*/ |
DirectoryBasedSourceContainer.con1(JavaFile directory) { |
- _jtd_constructor_327_impl(directory); |
+ _jtd_constructor_334_impl(directory); |
} |
- _jtd_constructor_327_impl(JavaFile directory) { |
- _jtd_constructor_328_impl(directory.getPath()); |
+ _jtd_constructor_334_impl(JavaFile directory) { |
+ _jtd_constructor_335_impl(directory.getPath()); |
} |
+ |
/** |
* Construct a container representing the specified path and containing any sources whose{@link Source#getFullName()} starts with the specified path. |
* @param path the path (not {@code null} and not empty) |
*/ |
DirectoryBasedSourceContainer.con2(String path2) { |
- _jtd_constructor_328_impl(path2); |
+ _jtd_constructor_335_impl(path2); |
} |
- _jtd_constructor_328_impl(String path2) { |
+ _jtd_constructor_335_impl(String path2) { |
this._path = appendFileSeparator(path2); |
} |
bool contains(Source source) => source.fullName.startsWith(_path); |
bool operator ==(Object obj) => (obj is DirectoryBasedSourceContainer) && ((obj as DirectoryBasedSourceContainer)).path == path; |
+ |
/** |
* Answer the receiver's path, used to determine if a source is contained in the receiver. |
* @return the path (not {@code null}, not empty) |
@@ -250,27 +301,24 @@ |
int get hashCode => _path.hashCode; |
String toString() => "SourceContainer[${_path}]"; |
} |
+ |
/** |
* Instances of the class {@code FileUriResolver} resolve {@code file} URI's. |
* @coverage dart.engine.source |
*/ |
class FileUriResolver extends UriResolver { |
+ |
/** |
* The name of the {@code file} scheme. |
*/ |
static String _FILE_SCHEME = "file"; |
+ |
/** |
* Return {@code true} if the given URI is a {@code file} URI. |
* @param uri the URI being tested |
* @return {@code true} if the given URI is a {@code file} URI |
*/ |
static bool isFileUri(Uri uri) => uri.scheme == _FILE_SCHEME; |
- /** |
- * Initialize a newly created resolver to resolve {@code file} URI's relative to the given root |
- * directory. |
- */ |
- FileUriResolver() : super() { |
- } |
Source fromEncoding(ContentCache contentCache, UriKind kind, Uri uri) { |
if (identical(kind, UriKind.FILE_URI)) { |
return new FileBasedSource.con2(contentCache, new JavaFile.fromUri(uri), kind); |