| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library code_transformers.src.dart_sdk; | 5 library code_transformers.src.dart_sdk; |
| 6 | 6 |
| 7 import 'dart:convert' as convert; | 7 import 'dart:convert' as convert; |
| 8 import 'dart:io' show File, Platform, Process; | 8 import 'dart:io' show File, Platform, Process; |
| 9 import 'package:path/path.dart' as path; | 9 import 'package:path/path.dart' as path; |
| 10 import 'package:analyzer/src/generated/engine.dart'; | 10 import 'package:analyzer/src/generated/engine.dart'; |
| 11 import 'package:analyzer/src/generated/java_io.dart'; | 11 import 'package:analyzer/src/generated/java_io.dart'; |
| 12 import 'package:analyzer/src/generated/sdk.dart'; | 12 import 'package:analyzer/src/generated/sdk.dart'; |
| 13 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; | 13 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; |
| 14 import 'package:analyzer/src/generated/source.dart'; | 14 import 'package:analyzer/src/generated/source.dart'; |
| 15 | 15 |
| 16 | 16 |
| 17 /// Attempts to provide the current Dart SDK directory. | 17 /// Attempts to provide the current Dart SDK directory. |
| 18 /// | 18 /// |
| 19 /// This will return null if the SDK cannot be found | 19 /// This will return null if the SDK cannot be found |
| 20 /// | 20 /// |
| 21 /// Note that this may not be correct when executing outside of `pub`. | 21 /// Note that this may not be correct when executing outside of `pub`. |
| 22 String get dartSdkDirectory { | 22 String get dartSdkDirectory { |
| 23 | 23 |
| 24 bool isSdkDir(String dirname) => | 24 bool isSdkDir(String dirname) => |
| 25 new File(path.join(dirname, 'lib', '_internal', 'libraries.dart')) | 25 new File(path.join(dirname, 'lib', '_internal', 'libraries.dart')) |
| 26 .existsSync(); | 26 .existsSync(); |
| 27 | 27 |
| 28 if (path.split(Platform.executable).length == 1) { | 28 String executable = Platform.executable; |
| 29 if (path.split(executable).length == 1) { |
| 29 // TODO(blois): make this cross-platform. | 30 // TODO(blois): make this cross-platform. |
| 30 // HACK: A single part, hope it's on the path. | 31 // HACK: A single part, hope it's on the path. |
| 31 var result = Process.runSync('which', ['dart'], | 32 executable = Process.runSync('which', ['dart'], |
| 32 stdoutEncoding: convert.UTF8); | 33 stdoutEncoding: convert.UTF8).stdout.trim(); |
| 33 | 34 // In case Dart is symlinked (e.g. homebrew on Mac) follow symbolic links. |
| 34 var sdkDir = path.dirname(path.dirname(result.stdout)); | 35 var link = new Link(executable); |
| 36 if (link.existsSync()) { |
| 37 executable = link.resolveSymbolicLinksSync(); |
| 38 } |
| 39 var sdkDir = path.dirname(path.dirname(executable)); |
| 35 if (isSdkDir(sdkDir)) return sdkDir; | 40 if (isSdkDir(sdkDir)) return sdkDir; |
| 36 } | 41 } |
| 37 var dartDir = path.dirname(path.absolute(Platform.executable)); | 42 |
| 43 var dartDir = path.dirname(path.absolute(executable)); |
| 38 // If there's a sub-dir named dart-sdk then we're most likely executing from | 44 // If there's a sub-dir named dart-sdk then we're most likely executing from |
| 39 // a dart enlistment build directory. | 45 // a dart enlistment build directory. |
| 40 if (isSdkDir(path.join(dartDir, 'dart-sdk'))) { | 46 if (isSdkDir(path.join(dartDir, 'dart-sdk'))) { |
| 41 return path.join(dartDir, 'dart-sdk'); | 47 return path.join(dartDir, 'dart-sdk'); |
| 42 } | 48 } |
| 43 // If we can find libraries.dart then it's the root of the SDK. | 49 // If we can find libraries.dart then it's the root of the SDK. |
| 44 if (isSdkDir(dartDir)) return dartDir; | 50 if (isSdkDir(dartDir)) return dartDir; |
| 45 | 51 |
| 46 var parts = path.split(dartDir); | 52 var parts = path.split(dartDir); |
| 47 // If the dart executable is within the sdk dir then get the root. | 53 // If the dart executable is within the sdk dir then get the root. |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 UriKind get uriKind => UriKind.DART_URI; | 229 UriKind get uriKind => UriKind.DART_URI; |
| 224 | 230 |
| 225 bool get isInSystemLibrary => true; | 231 bool get isInSystemLibrary => true; |
| 226 | 232 |
| 227 Source resolveRelative(Uri relativeUri) => | 233 Source resolveRelative(Uri relativeUri) => |
| 228 throw new UnsupportedError('not expecting relative urls in dart: mocks'); | 234 throw new UnsupportedError('not expecting relative urls in dart: mocks'); |
| 229 | 235 |
| 230 Uri resolveRelativeUri(Uri relativeUri) => | 236 Uri resolveRelativeUri(Uri relativeUri) => |
| 231 throw new UnsupportedError('not expecting relative urls in dart: mocks'); | 237 throw new UnsupportedError('not expecting relative urls in dart: mocks'); |
| 232 } | 238 } |
| OLD | NEW |