Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: pkg/analyzer/lib/src/dart/sdk/sdk.dart

Issue 2207953002: SDK implementations based on file_system rather than java_io (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: address comments Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/src/dart/sdk/sdk_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 60%
copy from pkg/analyzer/lib/src/generated/sdk_io.dart
copy to pkg/analyzer/lib/src/dart/sdk/sdk.dart
index 50cb9d066fb7cf512c51c2c6c888ef6499a923f4..bbde2ed279e5f28b4e410a17fb88f0ca2cb049cc 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(resourceProvider.pathContext.separator);
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('/', resourceProvider.pathContext.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('/', resourceProvider.pathContext.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(resourceProvider.pathContext.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(resourceProvider.pathContext.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(resourceProvider.pathContext.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('/', resourceProvider.pathContext.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,13 +350,7 @@ 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.
@@ -267,55 +358,12 @@ class DirectoryBasedDartSdk extends AbstractDartSdk {
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 within the SDK directory that contains
* documentation for the libraries.
*/
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 name of the directory within the SDK directory that contains the
* sdk_library_metadata directory.
*/
@@ -361,59 +409,14 @@ 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 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
@@ -422,110 +425,39 @@ 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 pub executable.
*/
- JavaFile _pubExecutable;
-
- /**
- * The file containing the VM executable.
- */
- JavaFile _vmExecutable;
+ File _pubExecutable;
/**
* 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 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();
-
- /**
- * Return `true` if the Dartium binary is available.
- */
- bool get isDartiumInstalled => dartiumExecutable != null;
+ Folder get docDirectory =>
+ _sdkDirectory.getChildAssumingFolder(_DOCS_DIRECTORY_NAME);
/**
* 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 +465,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 +484,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) {
@@ -567,76 +499,24 @@ class DirectoryBasedDartSdk extends AbstractDartSdk {
}
/**
- * 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;
- }
-
- /**
* 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);
- }
-
- /**
- * 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;
+ 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);
}
@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${resourceProvider.pathContext.separator}")) {
return null;
}
return filePath.substring(libPath.length + 1);
@@ -648,12 +528,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);
+ String path = resourceProvider.pathContext.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 +554,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 +572,7 @@ class DirectoryBasedDartSdk extends AbstractDartSdk {
}
@override
- FileBasedSource internalMapDartUri(String dartUri) {
+ Source internalMapDartUri(String dartUri) {
String libraryName;
String relativePath;
int index = dartUri.indexOf('/');
@@ -708,23 +588,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 +675,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
« no previous file with comments | « no previous file | pkg/analyzer/test/src/dart/sdk/sdk_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698