Chromium Code Reviews| Index: pkg/analyzer/lib/src/dart/sdk/sdk.dart |
| diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart |
| similarity index 54% |
| copy from pkg/analyzer/lib/src/generated/sdk_io.dart |
| copy to pkg/analyzer/lib/src/dart/sdk/sdk.dart |
| index 50cb9d066fb7cf512c51c2c6c888ef6499a923f4..eccd2ba09d1ed0f95061c761659c816d66a4f6e7 100644 |
| --- a/pkg/analyzer/lib/src/generated/sdk_io.dart |
| +++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart |
| @@ -1,13 +1,14 @@ |
| -// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| +// Copyright (c) 2016, 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 analyzer.src.generated.sdk_io; |
| +library analyzer.src.generated.sdk2; |
| import 'dart:collection'; |
| -import 'dart:io'; |
| +import 'dart:io' as io; |
| import 'package:analyzer/dart/ast/ast.dart'; |
| +import 'package:analyzer/file_system/file_system.dart'; |
| import 'package:analyzer/src/context/context.dart'; |
| import 'package:analyzer/src/dart/scanner/reader.dart'; |
| import 'package:analyzer/src/dart/scanner/scanner.dart'; |
| @@ -16,13 +17,13 @@ import 'package:analyzer/src/generated/error.dart'; |
| import 'package:analyzer/src/generated/java_core.dart'; |
| import 'package:analyzer/src/generated/java_engine.dart'; |
| import 'package:analyzer/src/generated/java_engine_io.dart'; |
| -import 'package:analyzer/src/generated/java_io.dart'; |
| import 'package:analyzer/src/generated/parser.dart'; |
| import 'package:analyzer/src/generated/sdk.dart'; |
| import 'package:analyzer/src/generated/source_io.dart'; |
| import 'package:analyzer/src/summary/idl.dart' show PackageBundle; |
| import 'package:analyzer/src/summary/summary_sdk.dart'; |
| import 'package:path/path.dart' as pathos; |
| +import 'package:yaml/yaml.dart'; |
| /** |
| * An abstract implementation of a Dart SDK in which the available libraries are |
| @@ -31,6 +32,11 @@ import 'package:path/path.dart' as pathos; |
| */ |
| abstract class AbstractDartSdk implements DartSdk { |
| /** |
| + * The resource provider used to access the file system. |
| + */ |
| + ResourceProvider resourceProvider; |
| + |
| + /** |
| * A mapping from Dart library URI's to the library represented by that URI. |
| */ |
| LibraryMap libraryMap = new LibraryMap(); |
| @@ -108,30 +114,16 @@ abstract class AbstractDartSdk implements DartSdk { |
| _useSummary = use; |
| } |
| - /** |
| - * Add the extensions from one or more sdk extension files to this sdk. The |
| - * [extensions] should be a table mapping the names of extensions to the paths |
| - * where those extensions can be found. |
| - */ |
| - void addExtensions(Map<String, String> extensions) { |
| - extensions.forEach((String uri, String path) { |
| - String shortName = uri.substring(uri.indexOf(':') + 1); |
| - SdkLibraryImpl library = new SdkLibraryImpl(shortName); |
| - library.path = path; |
| - libraryMap.setLibrary(uri, library); |
| - }); |
| - } |
| - |
| @override |
| Source fromFileUri(Uri uri) { |
| - JavaFile file = new JavaFile.fromUri(uri); |
| + File file = resourceProvider.getFile(uri.toFilePath(windows: false)); |
| String path = _getPath(file); |
| if (path == null) { |
| return null; |
| } |
| try { |
| - return new FileBasedSource(file, parseUriWithException(path)); |
| + return file.createSource(parseUriWithException(path)); |
| } on URISyntaxException catch (exception, stackTrace) { |
| AnalysisEngine.instance.logger.logInformation( |
| "Failed to create URI: $path", |
| @@ -140,7 +132,7 @@ abstract class AbstractDartSdk implements DartSdk { |
| return null; |
| } |
| - String getRelativePathFromFile(JavaFile file); |
| + String getRelativePathFromFile(File file); |
| @override |
| SdkLibrary getSdkLibrary(String dartUri) => libraryMap.getLibrary(dartUri); |
| @@ -152,7 +144,7 @@ abstract class AbstractDartSdk implements DartSdk { |
| */ |
| PackageBundle getSummarySdkBundle(bool strongMode); |
| - FileBasedSource internalMapDartUri(String dartUri) { |
| + Source internalMapDartUri(String dartUri) { |
| // TODO(brianwilkerson) Figure out how to unify the implementations in the |
| // two subclasses. |
| String libraryName; |
| @@ -174,7 +166,7 @@ abstract class AbstractDartSdk implements DartSdk { |
| srcPath = library.path; |
| } else { |
| String libraryPath = library.path; |
| - int index = libraryPath.lastIndexOf(JavaFile.separator); |
| + int index = libraryPath.lastIndexOf(pathos.separator); |
|
scheglov
2016/08/03 15:54:52
Do we have tests for this code?
I was not able to
Brian Wilkerson
2016/08/03 17:16:10
No. This method is overridden by both of the subcl
|
| if (index == -1) { |
| index = libraryPath.lastIndexOf('/'); |
| if (index == -1) { |
| @@ -184,10 +176,10 @@ abstract class AbstractDartSdk implements DartSdk { |
| String prefix = libraryPath.substring(0, index + 1); |
| srcPath = '$prefix$relativePath'; |
| } |
| - String filePath = srcPath.replaceAll('/', JavaFile.separator); |
| + String filePath = srcPath.replaceAll('/', pathos.separator); |
| try { |
| - JavaFile file = new JavaFile(filePath); |
| - return new FileBasedSource(file, parseUriWithException(dartUri)); |
| + File file = resourceProvider.getFile(filePath); |
| + return file.createSource(parseUriWithException(dartUri)); |
| } on URISyntaxException { |
| return null; |
| } |
| @@ -203,7 +195,7 @@ abstract class AbstractDartSdk implements DartSdk { |
| return source; |
| } |
| - String _getPath(JavaFile file) { |
| + String _getPath(File file) { |
| List<SdkLibrary> libraries = libraryMap.sdkLibraries; |
| int length = libraries.length; |
| List<String> paths = new List(length); |
| @@ -213,7 +205,7 @@ abstract class AbstractDartSdk implements DartSdk { |
| } |
| for (int i = 0; i < length; i++) { |
| SdkLibrary library = libraries[i]; |
| - String libraryPath = library.path.replaceAll('/', JavaFile.separator); |
| + String libraryPath = library.path.replaceAll('/', pathos.separator); |
| if (filePath == libraryPath) { |
| return library.shortName; |
| } |
| @@ -222,13 +214,13 @@ abstract class AbstractDartSdk implements DartSdk { |
| for (int i = 0; i < length; i++) { |
| SdkLibrary library = libraries[i]; |
| String libraryPath = paths[i]; |
| - int index = libraryPath.lastIndexOf(JavaFile.separator); |
| + int index = libraryPath.lastIndexOf(pathos.separator); |
| if (index >= 0) { |
| String prefix = libraryPath.substring(0, index + 1); |
| if (filePath.startsWith(prefix)) { |
| String relPath = filePath |
| .substring(prefix.length) |
| - .replaceAll(JavaFile.separator, '/'); |
| + .replaceAll(pathos.separator, '/'); |
| return '${library.shortName}/$relPath'; |
| } |
| } |
| @@ -238,6 +230,111 @@ abstract class AbstractDartSdk implements DartSdk { |
| } |
| /** |
| + * An SDK backed by URI mappings derived from an `_embedder.yaml` file. |
| + */ |
| +class EmbedderSdk extends AbstractDartSdk { |
| + static const String _DART_COLON_PREFIX = 'dart:'; |
| + |
| + static const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs'; |
| + final Map<String, String> _urlMappings = new HashMap<String, String>(); |
| + |
| + EmbedderSdk( |
| + ResourceProvider resourceProvider, Map<Folder, YamlMap> embedderYamls) { |
| + this.resourceProvider = resourceProvider; |
| + embedderYamls?.forEach(_processEmbedderYaml); |
| + } |
| + |
| + @override |
| + // TODO(danrubel) Determine SDK version |
| + String get sdkVersion => '0'; |
| + |
| + /** |
| + * The url mappings for this SDK. |
| + */ |
| + Map<String, String> get urlMappings => _urlMappings; |
| + |
| + @override |
| + String getRelativePathFromFile(File file) => file.path; |
| + |
| + @override |
| + PackageBundle getSummarySdkBundle(bool strongMode) => null; |
| + |
| + @override |
| + Source internalMapDartUri(String dartUri) { |
| + String libraryName; |
| + String relativePath; |
| + int index = dartUri.indexOf('/'); |
| + if (index >= 0) { |
| + libraryName = dartUri.substring(0, index); |
| + relativePath = dartUri.substring(index + 1); |
| + } else { |
| + libraryName = dartUri; |
| + relativePath = ""; |
| + } |
| + SdkLibrary library = getSdkLibrary(libraryName); |
| + if (library == null) { |
| + return null; |
| + } |
| + String srcPath; |
| + if (relativePath.isEmpty) { |
| + srcPath = library.path; |
| + } else { |
| + String libraryPath = library.path; |
| + int index = libraryPath.lastIndexOf(pathos.separator); |
| + if (index == -1) { |
| + index = libraryPath.lastIndexOf('/'); |
| + if (index == -1) { |
| + return null; |
| + } |
| + } |
| + String prefix = libraryPath.substring(0, index + 1); |
| + srcPath = '$prefix$relativePath'; |
| + } |
| + String filePath = srcPath.replaceAll('/', pathos.separator); |
| + try { |
| + File file = resourceProvider.getFile(filePath); |
| + return file.createSource(parseUriWithException(dartUri)); |
| + } on URISyntaxException { |
| + return null; |
| + } |
| + } |
| + |
| + /** |
| + * Install the mapping from [name] to [libDir]/[file]. |
| + */ |
| + void _processEmbeddedLibs(String name, String file, Folder libDir) { |
| + if (!name.startsWith(_DART_COLON_PREFIX)) { |
| + // SDK libraries must begin with 'dart:'. |
| + return; |
| + } |
| + String libPath = libDir.canonicalizePath(file); |
| + _urlMappings[name] = libPath; |
| + SdkLibraryImpl library = new SdkLibraryImpl(name); |
| + library.path = libPath; |
| + libraryMap.setLibrary(name, library); |
| + } |
| + |
| + /** |
| + * Given the 'embedderYamls' from [EmbedderYamlLocator] check each one for the |
| + * top level key 'embedded_libs'. Under the 'embedded_libs' key are key value |
| + * pairs. Each key is a 'dart:' library uri and each value is a path |
| + * (relative to the directory containing `_embedder.yaml`) to a dart script |
| + * for the given library. For example: |
| + * |
| + * embedded_libs: |
| + * 'dart:io': '../../sdk/io/io.dart' |
| + * |
| + * If a key doesn't begin with `dart:` it is ignored. |
| + */ |
| + void _processEmbedderYaml(Folder libDir, YamlMap map) { |
| + YamlNode embedded_libs = map[_EMBEDDED_LIB_MAP_KEY]; |
| + if (embedded_libs is YamlMap) { |
| + embedded_libs.forEach((k, v) => _processEmbeddedLibs(k, v, libDir)); |
| + } |
| + } |
| +} |
| + |
| +/** |
| * A Dart SDK installed in a specified directory. Typical Dart SDK layout is |
| * something like... |
| * |
| @@ -253,55 +350,49 @@ abstract class AbstractDartSdk implements DartSdk { |
| * ... Dart utilities ... |
| * Chromium/ <-- Dartium typically exists in a sibling directory |
| */ |
| -class DirectoryBasedDartSdk extends AbstractDartSdk { |
| - /** |
| - * The default SDK, or `null` if the default SDK either has not yet been |
| - * created or cannot be created for some reason. |
| - */ |
| - static DirectoryBasedDartSdk _DEFAULT_SDK; |
| - |
| +class FolderBasedDartSdk extends AbstractDartSdk { |
| /** |
| * The name of the directory within the SDK directory that contains |
| * executables. |
| */ |
| static String _BIN_DIRECTORY_NAME = "bin"; |
| - /** |
| - * The name of the directory on non-Mac that contains dartium. |
| - */ |
| - static String _DARTIUM_DIRECTORY_NAME = "chromium"; |
| - |
| - /** |
| - * The name of the dart2js executable on non-windows operating systems. |
| - */ |
| - static String _DART2JS_EXECUTABLE_NAME = "dart2js"; |
| - |
| - /** |
| - * The name of the file containing the dart2js executable on Windows. |
| - */ |
| - static String _DART2JS_EXECUTABLE_NAME_WIN = "dart2js.bat"; |
| - |
| - /** |
| - * The name of the file containing the Dartium executable on Linux. |
| - */ |
| - static String _DARTIUM_EXECUTABLE_NAME_LINUX = "chrome"; |
| - |
| - /** |
| - * The name of the file containing the Dartium executable on Macintosh. |
| - */ |
| - static String _DARTIUM_EXECUTABLE_NAME_MAC = |
| - "Chromium.app/Contents/MacOS/Chromium"; |
| - |
| - /** |
| - * The name of the file containing the Dartium executable on Windows. |
| - */ |
| - static String _DARTIUM_EXECUTABLE_NAME_WIN = "Chrome.exe"; |
| - |
| - /** |
| - * The name of the [System] property whose value is the path to the default |
| - * Dart SDK directory. |
| - */ |
| - static String _DEFAULT_DIRECTORY_PROPERTY_NAME = "com.google.dart.sdk"; |
| +// /** |
| +// * The name of the directory on non-Mac that contains dartium. |
| +// */ |
| +// static String _DARTIUM_DIRECTORY_NAME = "chromium"; |
| +// |
| +// /** |
| +// * The name of the dart2js executable on non-windows operating systems. |
| +// */ |
| +// static String _DART2JS_EXECUTABLE_NAME = "dart2js"; |
| +// |
| +// /** |
| +// * The name of the file containing the dart2js executable on Windows. |
| +// */ |
| +// static String _DART2JS_EXECUTABLE_NAME_WIN = "dart2js.bat"; |
| +// |
| +// /** |
| +// * The name of the file containing the Dartium executable on Linux. |
| +// */ |
| +// static String _DARTIUM_EXECUTABLE_NAME_LINUX = "chrome"; |
| +// |
| +// /** |
| +// * The name of the file containing the Dartium executable on Macintosh. |
| +// */ |
| +// static String _DARTIUM_EXECUTABLE_NAME_MAC = |
| +// "Chromium.app/Contents/MacOS/Chromium"; |
| +// |
| +// /** |
| +// * The name of the file containing the Dartium executable on Windows. |
| +// */ |
| +// static String _DARTIUM_EXECUTABLE_NAME_WIN = "Chrome.exe"; |
| +// |
| +// /** |
| +// * The name of the [System] property whose value is the path to the default |
| +// * Dart SDK directory. |
| +// */ |
| +// static String _DEFAULT_DIRECTORY_PROPERTY_NAME = "com.google.dart.sdk"; |
|
scheglov
2016/08/03 15:54:52
Did you want to remove this code, or you will need
Brian Wilkerson
2016/08/03 17:16:10
I think I can remove it because I think that I can
|
| /** |
| * The name of the directory within the SDK directory that contains |
| @@ -309,11 +400,11 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| */ |
| static String _DOCS_DIRECTORY_NAME = "docs"; |
| - /** |
| - * The suffix added to the name of a library to derive the name of the file |
| - * containing the documentation for that library. |
| - */ |
| - static String _DOC_FILE_SUFFIX = "_api.json"; |
| +// /** |
| +// * The suffix added to the name of a library to derive the name of the file |
| +// * containing the documentation for that library. |
| +// */ |
| +// static String _DOC_FILE_SUFFIX = "_api.json"; |
| /** |
| * The name of the directory within the SDK directory that contains the |
| @@ -360,60 +451,27 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| */ |
| static String _VERSION_FILE_NAME = "version"; |
| - /** |
| - * The name of the file containing the VM executable on the Windows operating |
| - * system. |
| - */ |
| - static String _VM_EXECUTABLE_NAME_WIN = "dart.exe"; |
| - |
| - /** |
| - * The name of the file containing the VM executable on non-Windows operating |
| - * systems. |
| - */ |
| - static String _VM_EXECUTABLE_NAME = "dart"; |
| - |
| - /** |
| - * Return the default Dart SDK, or `null` if the directory containing the |
| - * default SDK cannot be determined (or does not exist). |
| - */ |
| - static DirectoryBasedDartSdk get defaultSdk { |
| - if (_DEFAULT_SDK == null) { |
| - JavaFile sdkDirectory = defaultSdkDirectory; |
| - if (sdkDirectory == null) { |
| - return null; |
| - } |
| - _DEFAULT_SDK = new DirectoryBasedDartSdk(sdkDirectory); |
| - } |
| - return _DEFAULT_SDK; |
| - } |
| - |
| - /** |
| - * Return the default directory for the Dart SDK, or `null` if the directory |
| - * cannot be determined (or does not exist). The default directory is provided |
| - * by a system property named `com.google.dart.sdk`. |
| - */ |
| - static JavaFile get defaultSdkDirectory { |
| - String sdkProperty = |
| - JavaSystemIO.getProperty(_DEFAULT_DIRECTORY_PROPERTY_NAME); |
| - if (sdkProperty == null) { |
| - return null; |
| - } |
| - JavaFile sdkDirectory = new JavaFile(sdkProperty); |
| - if (!sdkDirectory.exists()) { |
| - return null; |
| - } |
| - return sdkDirectory; |
| - } |
| +// /** |
| +// * The name of the file containing the VM executable on the Windows operating |
| +// * system. |
| +// */ |
| +// static String _VM_EXECUTABLE_NAME_WIN = "dart.exe"; |
| +// |
| +// /** |
| +// * The name of the file containing the VM executable on non-Windows operating |
| +// * systems. |
| +// */ |
| +// static String _VM_EXECUTABLE_NAME = "dart"; |
| /** |
| * The directory containing the SDK. |
| */ |
| - JavaFile _sdkDirectory; |
| + Folder _sdkDirectory; |
| /** |
| * The directory within the SDK directory that contains the libraries. |
| */ |
| - JavaFile _libraryDirectory; |
| + Folder _libraryDirectory; |
| /** |
| * The revision number of this SDK, or `"0"` if the revision number cannot be |
| @@ -421,111 +479,112 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| */ |
| String _sdkVersion; |
| - /** |
| - * The file containing the dart2js executable. |
| - */ |
| - JavaFile _dart2jsExecutable; |
| - |
| - /** |
| - * The file containing the Dartium executable. |
| - */ |
| - JavaFile _dartiumExecutable; |
| +// /** |
| +// * The file containing the dart2js executable. |
| +// */ |
| +// File _dart2jsExecutable; |
| +// |
| +// /** |
| +// * The file containing the Dartium executable. |
| +// */ |
| +// File _dartiumExecutable; |
| /** |
| * The file containing the pub executable. |
| */ |
| - JavaFile _pubExecutable; |
| + File _pubExecutable; |
| - /** |
| - * The file containing the VM executable. |
| - */ |
| - JavaFile _vmExecutable; |
| +// /** |
| +// * The file containing the VM executable. |
| +// */ |
| +// File _vmExecutable; |
| /** |
| * Initialize a newly created SDK to represent the Dart SDK installed in the |
| * [sdkDirectory]. The flag [useDart2jsPaths] is `true` if the dart2js path |
| * should be used when it is available |
| */ |
| - DirectoryBasedDartSdk(JavaFile sdkDirectory, [bool useDart2jsPaths = false]) { |
| - this._sdkDirectory = sdkDirectory.getAbsoluteFile(); |
| + FolderBasedDartSdk(ResourceProvider resourceProvider, this._sdkDirectory, |
| + [bool useDart2jsPaths = false]) { |
| + this.resourceProvider = resourceProvider; |
| libraryMap = initialLibraryMap(useDart2jsPaths); |
| } |
| - /** |
| - * Return the file containing the dart2js executable, or `null` if it does not |
| - * exist. |
| - */ |
| - JavaFile get dart2JsExecutable { |
| - if (_dart2jsExecutable == null) { |
| - _dart2jsExecutable = _verifyExecutable(new JavaFile.relative( |
| - new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), |
| - OSUtilities.isWindows() |
| - ? _DART2JS_EXECUTABLE_NAME_WIN |
| - : _DART2JS_EXECUTABLE_NAME)); |
| - } |
| - return _dart2jsExecutable; |
| - } |
| - |
| - /** |
| - * Return the name of the file containing the Dartium executable. |
| - */ |
| - String get dartiumBinaryName { |
| - if (OSUtilities.isWindows()) { |
| - return _DARTIUM_EXECUTABLE_NAME_WIN; |
| - } else if (OSUtilities.isMac()) { |
| - return _DARTIUM_EXECUTABLE_NAME_MAC; |
| - } else { |
| - return _DARTIUM_EXECUTABLE_NAME_LINUX; |
| - } |
| - } |
| - |
| - /** |
| - * Return the file containing the Dartium executable, or `null` if it does not |
| - * exist. |
| - */ |
| - JavaFile get dartiumExecutable { |
| - if (_dartiumExecutable == null) { |
| - _dartiumExecutable = _verifyExecutable( |
| - new JavaFile.relative(dartiumWorkingDirectory, dartiumBinaryName)); |
| - } |
| - return _dartiumExecutable; |
| - } |
| - |
| - /** |
| - * Return the directory where dartium can be found (the directory that will be |
| - * the working directory is Dartium is invoked without changing the default). |
| - */ |
| - JavaFile get dartiumWorkingDirectory => |
| - getDartiumWorkingDirectory(_sdkDirectory.getParentFile()); |
| +// /** |
| +// * Return the file containing the dart2js executable, or `null` if it does not |
| +// * exist. |
| +// */ |
| +// File get dart2JsExecutable { |
| +// if (_dart2jsExecutable == null) { |
| +// _dart2jsExecutable = _verifyExecutable(_sdkDirectory |
| +// .getChildAssumingFolder(_BIN_DIRECTORY_NAME) |
| +// .getChildAssumingFile(OSUtilities.isWindows() |
| +// ? _DART2JS_EXECUTABLE_NAME_WIN |
| +// : _DART2JS_EXECUTABLE_NAME)); |
| +// } |
| +// return _dart2jsExecutable; |
| +// } |
| +// |
| +// /** |
| +// * Return the name of the file containing the Dartium executable. |
| +// */ |
| +// String get dartiumBinaryName { |
| +// if (OSUtilities.isWindows()) { |
| +// return _DARTIUM_EXECUTABLE_NAME_WIN; |
| +// } else if (OSUtilities.isMac()) { |
| +// return _DARTIUM_EXECUTABLE_NAME_MAC; |
| +// } else { |
| +// return _DARTIUM_EXECUTABLE_NAME_LINUX; |
| +// } |
| +// } |
| +// |
| +// /** |
| +// * Return the file containing the Dartium executable, or `null` if it does not |
| +// * exist. |
| +// */ |
| +// File get dartiumExecutable { |
| +// if (_dartiumExecutable == null) { |
| +// _dartiumExecutable = _verifyExecutable( |
| +// dartiumWorkingDirectory.getChildAssumingFile(dartiumBinaryName)); |
| +// } |
| +// return _dartiumExecutable; |
| +// } |
| +// |
| +// /** |
| +// * Return the directory where dartium can be found (the directory that will be |
| +// * the working directory is Dartium is invoked without changing the default). |
| +// */ |
| +// Folder get dartiumWorkingDirectory => |
| +// getDartiumWorkingDirectory(_sdkDirectory.parent); |
| /** |
| * Return the directory containing the SDK. |
| */ |
| - JavaFile get directory => _sdkDirectory; |
| + Folder get directory => _sdkDirectory; |
| /** |
| * Return the directory containing documentation for the SDK. |
| */ |
| - JavaFile get docDirectory => |
| - new JavaFile.relative(_sdkDirectory, _DOCS_DIRECTORY_NAME); |
| - |
| - /** |
| - * Return `true` if this SDK includes documentation. |
| - */ |
| - bool get hasDocumentation => docDirectory.exists(); |
| + Folder get docDirectory => |
| + _sdkDirectory.getChildAssumingFolder(_DOCS_DIRECTORY_NAME); |
| - /** |
| - * Return `true` if the Dartium binary is available. |
| - */ |
| - bool get isDartiumInstalled => dartiumExecutable != null; |
| +// /** |
| +// * Return `true` if this SDK includes documentation. |
| +// */ |
| +// bool get hasDocumentation => docDirectory.exists; |
| +// |
| +// /** |
| +// * Return `true` if the Dartium binary is available. |
| +// */ |
| +// bool get isDartiumInstalled => dartiumExecutable != null; |
| /** |
| * Return the directory within the SDK directory that contains the libraries. |
| */ |
| - JavaFile get libraryDirectory { |
| + Folder get libraryDirectory { |
| if (_libraryDirectory == null) { |
| _libraryDirectory = |
| - new JavaFile.relative(_sdkDirectory, _LIB_DIRECTORY_NAME); |
| + _sdkDirectory.getChildAssumingFolder(_LIB_DIRECTORY_NAME); |
| } |
| return _libraryDirectory; |
| } |
| @@ -533,13 +592,13 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| /** |
| * Return the file containing the Pub executable, or `null` if it does not exist. |
| */ |
| - JavaFile get pubExecutable { |
| + File get pubExecutable { |
| if (_pubExecutable == null) { |
| - _pubExecutable = _verifyExecutable(new JavaFile.relative( |
| - new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), |
| - OSUtilities.isWindows() |
| + _pubExecutable = _sdkDirectory |
| + .getChildAssumingFolder(_BIN_DIRECTORY_NAME) |
| + .getChildAssumingFile(OSUtilities.isWindows() |
| ? _PUB_EXECUTABLE_NAME_WIN |
| - : _PUB_EXECUTABLE_NAME)); |
| + : _PUB_EXECUTABLE_NAME); |
| } |
| return _pubExecutable; |
| } |
| @@ -552,8 +611,8 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| String get sdkVersion { |
| if (_sdkVersion == null) { |
| _sdkVersion = DartSdk.DEFAULT_VERSION; |
| - JavaFile revisionFile = |
| - new JavaFile.relative(_sdkDirectory, _VERSION_FILE_NAME); |
| + File revisionFile = |
| + _sdkDirectory.getChildAssumingFile(_VERSION_FILE_NAME); |
| try { |
| String revision = revisionFile.readAsStringSync(); |
| if (revision != null) { |
| @@ -566,77 +625,70 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| return _sdkVersion; |
| } |
| - /** |
| - * Return the name of the file containing the VM executable. |
| - */ |
| - String get vmBinaryName { |
| - if (OSUtilities.isWindows()) { |
| - return _VM_EXECUTABLE_NAME_WIN; |
| - } else { |
| - return _VM_EXECUTABLE_NAME; |
| - } |
| - } |
| - |
| - /** |
| - * Return the file containing the VM executable, or `null` if it does not |
| - * exist. |
| - */ |
| - JavaFile get vmExecutable { |
| - if (_vmExecutable == null) { |
| - _vmExecutable = _verifyExecutable(new JavaFile.relative( |
| - new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), |
| - vmBinaryName)); |
| - } |
| - return _vmExecutable; |
| - } |
| +// /** |
| +// * Return the name of the file containing the VM executable. |
| +// */ |
| +// String get vmBinaryName { |
| +// if (OSUtilities.isWindows()) { |
| +// return _VM_EXECUTABLE_NAME_WIN; |
| +// } else { |
| +// return _VM_EXECUTABLE_NAME; |
| +// } |
| +// } |
| +// |
| +// /** |
| +// * Return the file containing the VM executable, or `null` if it does not |
| +// * exist. |
| +// */ |
| +// File get vmExecutable { |
| +// if (_vmExecutable == null) { |
| +// _vmExecutable = _verifyExecutable(_sdkDirectory |
| +// .getChildAssumingFolder(_BIN_DIRECTORY_NAME) |
| +// .getChildAssumingFile(vmBinaryName)); |
| +// } |
| +// return _vmExecutable; |
| +// } |
| /** |
| * Determine the search order for trying to locate the [_LIBRARIES_FILE]. |
| */ |
| - Iterable<JavaFile> get _libraryMapLocations sync* { |
| - yield new JavaFile.relative( |
| - new JavaFile.relative( |
| - new JavaFile.relative( |
| - new JavaFile.relative(libraryDirectory, _INTERNAL_DIR), |
| - _SDK_LIBRARY_METADATA_DIR), |
| - _SDK_LIBRARY_METADATA_LIB_DIR), |
| - _LIBRARIES_FILE); |
| - yield new JavaFile.relative( |
| - new JavaFile.relative(libraryDirectory, _INTERNAL_DIR), |
| - _LIBRARIES_FILE); |
| + Iterable<File> get _libraryMapLocations sync* { |
| + yield libraryDirectory |
| + .getChildAssumingFolder(_INTERNAL_DIR) |
| + .getChildAssumingFolder(_SDK_LIBRARY_METADATA_DIR) |
| + .getChildAssumingFolder(_SDK_LIBRARY_METADATA_LIB_DIR) |
| + .getChildAssumingFile(_LIBRARIES_FILE); |
| + yield libraryDirectory |
| + .getChildAssumingFolder(_INTERNAL_DIR) |
| + .getChildAssumingFile(_LIBRARIES_FILE); |
| } |
| - /** |
| - * Return the directory where dartium can be found (the directory that will be |
| - * the working directory if Dartium is invoked without changing the default), |
| - * assuming that the Editor was installed in the [installDir]. |
| - */ |
| - JavaFile getDartiumWorkingDirectory(JavaFile installDir) => |
| - new JavaFile.relative(installDir, _DARTIUM_DIRECTORY_NAME); |
| - |
| - /** |
| - * Return the auxiliary documentation file for the library with the given |
| - * [libraryName], or `null` if no such file exists. |
| - */ |
| - JavaFile getDocFileFor(String libraryName) { |
| - JavaFile dir = docDirectory; |
| - if (!dir.exists()) { |
| - return null; |
| - } |
| - JavaFile libDir = new JavaFile.relative(dir, libraryName); |
| - JavaFile docFile = |
| - new JavaFile.relative(libDir, "$libraryName$_DOC_FILE_SUFFIX"); |
| - if (docFile.exists()) { |
| - return docFile; |
| - } |
| - return null; |
| - } |
| +// /** |
| +// * Return the directory where dartium can be found (the directory that will be |
| +// * the working directory if Dartium is invoked without changing the default), |
| +// * assuming that the Editor was installed in the [installDir]. |
| +// */ |
| +// Folder getDartiumWorkingDirectory(Folder installDir) => |
| +// installDir.getChildAssumingFolder(_DARTIUM_DIRECTORY_NAME); |
| +// |
| +// /** |
| +// * Return the auxiliary documentation file for the library with the given |
| +// * [libraryName], or `null` if no such file exists. |
| +// */ |
| +// File getDocFileFor(String libraryName) { |
| +// Folder libDir = docDirectory.getChildAssumingFolder(libraryName); |
| +// File docFile = libDir.getChildAssumingFile("$libraryName$_DOC_FILE_SUFFIX"); |
| +// if (docFile.exists) { |
| +// return docFile; |
| +// } |
| +// return null; |
| +// } |
| @override |
| - String getRelativePathFromFile(JavaFile file) { |
| - String filePath = file.getAbsolutePath(); |
| - String libPath = libraryDirectory.getAbsolutePath(); |
| - if (!filePath.startsWith("$libPath${JavaFile.separator}")) { |
| + String getRelativePathFromFile(File file) { |
| + String filePath = file.path; |
| + String libPath = libraryDirectory.path; |
| + if (!filePath.startsWith("$libPath${pathos.separator}")) { |
| return null; |
| } |
| return filePath.substring(libPath.length + 1); |
| @@ -648,12 +700,12 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| * packages. |
| */ |
| PackageBundle getSummarySdkBundle(bool strongMode) { |
| - String rootPath = directory.getAbsolutePath(); |
| + String rootPath = directory.path; |
| String name = strongMode ? 'strong.sum' : 'spec.sum'; |
| String path = pathos.join(rootPath, 'lib', '_internal', name); |
| try { |
| - File file = new File(path); |
| - if (file.existsSync()) { |
| + File file = resourceProvider.getFile(path); |
| + if (file.exists) { |
| List<int> bytes = file.readAsBytesSync(); |
| return new PackageBundle.fromBuffer(bytes); |
| } |
| @@ -674,13 +726,13 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| List<String> searchedPaths = <String>[]; |
| var lastStackTrace = null; |
| var lastException = null; |
| - for (JavaFile librariesFile in _libraryMapLocations) { |
| + for (File librariesFile in _libraryMapLocations) { |
| try { |
| String contents = librariesFile.readAsStringSync(); |
| return new SdkLibrariesReader(useDart2jsPaths) |
| .readFromFile(librariesFile, contents); |
| } catch (exception, stackTrace) { |
| - searchedPaths.add(librariesFile.getAbsolutePath()); |
| + searchedPaths.add(librariesFile.path); |
| lastException = exception; |
| lastStackTrace = stackTrace; |
| } |
| @@ -692,7 +744,7 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| } |
| @override |
| - FileBasedSource internalMapDartUri(String dartUri) { |
| + Source internalMapDartUri(String dartUri) { |
| String libraryName; |
| String relativePath; |
| int index = dartUri.indexOf('/'); |
| @@ -708,23 +760,51 @@ class DirectoryBasedDartSdk extends AbstractDartSdk { |
| return null; |
| } |
| try { |
| - JavaFile file = new JavaFile.relative(libraryDirectory, library.path); |
| + File file = libraryDirectory.getChildAssumingFile(library.path); |
| if (!relativePath.isEmpty) { |
| - file = file.getParentFile(); |
| - file = new JavaFile.relative(file, relativePath); |
| + file = file.parent.getChildAssumingFile(relativePath); |
| } |
| - return new FileBasedSource(file, parseUriWithException(dartUri)); |
| + return file.createSource(parseUriWithException(dartUri)); |
| } on URISyntaxException { |
| return null; |
| } |
| } |
| /** |
| - * Return the given [file] if it exists and is executable, or `null` if it |
| - * does not exist or is not executable. |
| + * Return the default directory for the Dart SDK, or `null` if the directory |
| + * cannot be determined (or does not exist). The default directory is provided |
| + * by a system property named `com.google.dart.sdk`. |
| */ |
| - JavaFile _verifyExecutable(JavaFile file) => |
| - file.isExecutable() ? file : null; |
| + static Folder defaultSdkDirectory(ResourceProvider resourceProvider) { |
| + // TODO(brianwilkerson) This is currently only being used in the analysis |
| + // server's Driver class to find the default SDK. The command-line analyzer |
| + // uses cli_utils to find the SDK. Not sure why they're different. |
| + String sdkProperty = getSdkProperty(resourceProvider); |
| + if (sdkProperty == null) { |
| + return null; |
| + } |
| + Folder sdkDirectory = resourceProvider.getFolder(sdkProperty); |
| + if (!sdkDirectory.exists) { |
| + return null; |
| + } |
| + return sdkDirectory; |
| + } |
| + |
| + static String getSdkProperty(ResourceProvider resourceProvider) { |
| + String exec = io.Platform.executable; |
| + if (exec.length == 0) { |
| + return null; |
| + } |
| + pathos.Context pathContext = resourceProvider.pathContext; |
| + // Might be "xcodebuild/ReleaseIA32/dart" with "sdk" sibling |
| + String outDir = pathContext.dirname(pathContext.dirname(exec)); |
| + String sdkPath = pathContext.join(pathContext.dirname(outDir), "sdk"); |
| + if (resourceProvider.getFolder(sdkPath).exists) { |
| + return sdkPath; |
| + } |
| + // probably be "dart-sdk/bin/dart" |
| + return pathContext.dirname(pathContext.dirname(exec)); |
| + } |
| } |
| /** |
| @@ -767,8 +847,8 @@ class SdkLibrariesReader { |
| * Return the library map read from the given [file], given that the content |
| * of the file is already known to be [libraryFileContents]. |
| */ |
| - LibraryMap readFromFile(JavaFile file, String libraryFileContents) => |
| - readFromSource(new FileBasedSource(file), libraryFileContents); |
| + LibraryMap readFromFile(File file, String libraryFileContents) => |
| + readFromSource(file.createSource(), libraryFileContents); |
| /** |
| * Return the library map read from the given [source], given that the content |