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

Side by Side Diff: pkg/analyzer/lib/src/generated/sdk_io.dart

Issue 2069483002: Refactor common portions of the two SDK implementations into a base class (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: clean-up Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/source/embedder.dart ('k') | pkg/analyzer/test/source/embedder_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 analyzer.src.generated.sdk_io; 5 library analyzer.src.generated.sdk_io;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:analyzer/dart/ast/ast.dart'; 10 import 'package:analyzer/dart/ast/ast.dart';
11 import 'package:analyzer/src/context/context.dart'; 11 import 'package:analyzer/src/context/context.dart';
12 import 'package:analyzer/src/dart/scanner/reader.dart'; 12 import 'package:analyzer/src/dart/scanner/reader.dart';
13 import 'package:analyzer/src/dart/scanner/scanner.dart'; 13 import 'package:analyzer/src/dart/scanner/scanner.dart';
14 import 'package:analyzer/src/generated/engine.dart'; 14 import 'package:analyzer/src/generated/engine.dart';
15 import 'package:analyzer/src/generated/error.dart'; 15 import 'package:analyzer/src/generated/error.dart';
16 import 'package:analyzer/src/generated/java_core.dart'; 16 import 'package:analyzer/src/generated/java_core.dart';
17 import 'package:analyzer/src/generated/java_engine.dart'; 17 import 'package:analyzer/src/generated/java_engine.dart';
18 import 'package:analyzer/src/generated/java_engine_io.dart'; 18 import 'package:analyzer/src/generated/java_engine_io.dart';
19 import 'package:analyzer/src/generated/java_io.dart'; 19 import 'package:analyzer/src/generated/java_io.dart';
20 import 'package:analyzer/src/generated/parser.dart'; 20 import 'package:analyzer/src/generated/parser.dart';
21 import 'package:analyzer/src/generated/sdk.dart'; 21 import 'package:analyzer/src/generated/sdk.dart';
22 import 'package:analyzer/src/generated/source_io.dart'; 22 import 'package:analyzer/src/generated/source_io.dart';
23 import 'package:analyzer/src/summary/idl.dart' show PackageBundle; 23 import 'package:analyzer/src/summary/idl.dart' show PackageBundle;
24 import 'package:analyzer/src/summary/summary_sdk.dart'; 24 import 'package:analyzer/src/summary/summary_sdk.dart';
25 import 'package:path/path.dart' as pathos; 25 import 'package:path/path.dart' as pathos;
26 26
27 /** 27 /**
28 * An abstract implementation of a Dart SDK in which the available libraries are
29 * stored in a library map. Subclasses are responsible for populating the
30 * library map.
31 */
32 abstract class AbstractDartSdk implements DartSdk {
33 /**
34 * A mapping from Dart library URI's to the library represented by that URI.
35 */
36 LibraryMap libraryMap = new LibraryMap();
pquitslund 2016/06/14 17:50:59 Any reason not to make this final?
Brian Wilkerson 2016/06/14 20:53:03 Yes. Unless we change it, DirectoryBasedDartSdk cr
37
38 /**
39 * The [AnalysisOptions] to use to create the [context].
40 */
41 AnalysisOptions _analysisOptions;
42
43 /**
44 * The flag that specifies whether an SDK summary should be used. This is a
45 * temporary flag until summaries are enabled by default.
46 */
47 bool _useSummary = false;
48
49 /**
50 * The [AnalysisContext] which is used for all of the sources in this sdk.
pquitslund 2016/06/14 17:50:59 sdk => SDK ?
Brian Wilkerson 2016/06/14 20:53:03 Done
51 */
52 InternalAnalysisContext _analysisContext;
53
54 /**
55 * The mapping from Dart URI's to the corresponding sources.
56 */
57 Map<String, Source> _uriToSourceMap = new HashMap<String, Source>();
58
59 /**
60 * Set the [options] for this SDK analysis context. Throw [StateError] if the
61 * context has been already created.
62 */
63 void set analysisOptions(AnalysisOptions options) {
64 if (_analysisContext != null) {
65 throw new StateError(
66 'Analysis options cannot be changed after context creation.');
67 }
68 _analysisOptions = options;
69 }
70
71 @override
72 AnalysisContext get context {
73 if (_analysisContext == null) {
74 _analysisContext = new SdkAnalysisContext(_analysisOptions);
75 SourceFactory factory = new SourceFactory([new DartUriResolver(this)]);
76 _analysisContext.sourceFactory = factory;
77 if (_useSummary) {
78 bool strongMode = _analysisOptions?.strongMode ?? false;
79 PackageBundle sdkBundle = getSummarySdkBundle(strongMode);
80 if (sdkBundle != null) {
81 _analysisContext.resultProvider = new SdkSummaryResultProvider(
82 _analysisContext, sdkBundle, strongMode);
83 }
84 }
85 }
86 return _analysisContext;
87 }
88
89 @override
90 List<SdkLibrary> get sdkLibraries => libraryMap.sdkLibraries;
91
92 @override
93 List<String> get uris => libraryMap.uris;
94
95 /**
96 * Return `true` if the SDK summary will be used when available.
97 */
98 bool get useSummary => _useSummary;
99
100 /**
101 * Specify whether SDK summary should be used.
102 */
103 void set useSummary(bool use) {
104 if (_analysisContext != null) {
105 throw new StateError(
106 'The "useSummary" flag cannot be changed after context creation.');
107 }
108 _useSummary = use;
109 }
110
111 @override
112 Source fromFileUri(Uri uri) {
113 JavaFile file = new JavaFile.fromUri(uri);
114
115 String path = _getPath(file);
116 if (path == null) {
117 return null;
118 }
119 try {
120 return new FileBasedSource(file, parseUriWithException(path));
121 } on URISyntaxException catch (exception, stackTrace) {
122 AnalysisEngine.instance.logger.logInformation(
123 "Failed to create URI: $path",
124 new CaughtException(exception, stackTrace));
125 }
126 return null;
127 }
128
129 String getRelativePathFromFile(JavaFile file);
130
131 @override
132 SdkLibrary getSdkLibrary(String dartUri) => libraryMap.getLibrary(dartUri);
133
134 /**
135 * Return the [PackageBundle] for this SDK, if it exists, or `null` otherwise.
136 * This method should not be used outside of `analyzer` and `analyzer_cli`
137 * packages.
138 */
139 PackageBundle getSummarySdkBundle(bool strongMode);
140
141 FileBasedSource internalMapDartUri(String dartUri) {
142 // TODO(brianwilkerson) Figure out how to unify the implementations in the
143 // two subclasses.
144 String libraryName;
145 String relativePath;
146 int index = dartUri.indexOf('/');
147 if (index >= 0) {
148 libraryName = dartUri.substring(0, index);
149 relativePath = dartUri.substring(index + 1);
150 } else {
151 libraryName = dartUri;
152 relativePath = "";
153 }
154 SdkLibrary library = getSdkLibrary(libraryName);
155 if (library == null) {
156 return null;
157 }
158 String srcPath;
159 if (relativePath.isEmpty) {
160 srcPath = library.path;
161 } else {
162 String libraryPath = library.path;
163 int index = libraryPath.lastIndexOf(JavaFile.separator);
164 if (index == -1) {
165 index = libraryPath.lastIndexOf('/');
166 if (index == -1) {
167 return null;
168 }
169 }
170 String prefix = libraryPath.substring(0, index + 1);
171 srcPath = '$prefix$relativePath';
172 }
173 String filePath = srcPath.replaceAll('/', JavaFile.separator);
174 try {
175 JavaFile file = new JavaFile(filePath);
176 return new FileBasedSource(file, parseUriWithException(dartUri));
177 } on URISyntaxException {
178 return null;
179 }
180 }
181
182 @override
183 Source mapDartUri(String dartUri) {
184 Source source = _uriToSourceMap[dartUri];
185 if (source == null) {
186 source = internalMapDartUri(dartUri);
187 _uriToSourceMap[dartUri] = source;
188 }
189 return source;
190 }
191
192 String _getPath(JavaFile file) {
193 List<SdkLibrary> libraries = libraryMap.sdkLibraries;
194 int length = libraries.length;
195 List<String> paths = new List(length);
196 String filePath = getRelativePathFromFile(file);
197 if (filePath == null) {
198 return null;
199 }
200 for (int i = 0; i < length; i++) {
201 SdkLibrary library = libraries[i];
202 String libraryPath = library.path.replaceAll('/', JavaFile.separator);
203 if (filePath == libraryPath) {
204 return library.shortName;
205 }
206 paths[i] = libraryPath;
207 }
208 for (int i = 0; i < length; i++) {
209 SdkLibrary library = libraries[i];
210 String libraryPath = paths[i];
211 int index = libraryPath.lastIndexOf(JavaFile.separator);
212 if (index >= 0) {
213 String prefix = libraryPath.substring(0, index + 1);
214 if (filePath.startsWith(prefix)) {
215 String relPath = filePath
216 .substring(prefix.length)
217 .replaceAll(JavaFile.separator, '/');
218 return '${library.shortName}/$relPath';
219 }
220 }
221 }
222 return null;
223 }
224 }
225
226 /**
28 * A Dart SDK installed in a specified directory. Typical Dart SDK layout is 227 * A Dart SDK installed in a specified directory. Typical Dart SDK layout is
29 * something like... 228 * something like...
30 * 229 *
31 * dart-sdk/ 230 * dart-sdk/
32 * bin/ 231 * bin/
33 * dart[.exe] <-- VM 232 * dart[.exe] <-- VM
34 * lib/ 233 * lib/
35 * core/ 234 * core/
36 * core.dart 235 * core.dart
37 * ... other core library files ... 236 * ... other core library files ...
38 * ... other libraries ... 237 * ... other libraries ...
39 * util/ 238 * util/
40 * ... Dart utilities ... 239 * ... Dart utilities ...
41 * Chromium/ <-- Dartium typically exists in a sibling directory 240 * Chromium/ <-- Dartium typically exists in a sibling directory
42 */ 241 */
43 class DirectoryBasedDartSdk implements DartSdk { 242 class DirectoryBasedDartSdk extends AbstractDartSdk {
44 /** 243 /**
45 * The default SDK, or `null` if the default SDK either has not yet been 244 * The default SDK, or `null` if the default SDK either has not yet been
46 * created or cannot be created for some reason. 245 * created or cannot be created for some reason.
47 */ 246 */
48 static DirectoryBasedDartSdk _DEFAULT_SDK; 247 static DirectoryBasedDartSdk _DEFAULT_SDK;
49 248
50 /** 249 /**
51 * The name of the directory within the SDK directory that contains 250 * The name of the directory within the SDK directory that contains
52 * executables. 251 * executables.
53 */ 252 */
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 return null; 385 return null;
187 } 386 }
188 JavaFile sdkDirectory = new JavaFile(sdkProperty); 387 JavaFile sdkDirectory = new JavaFile(sdkProperty);
189 if (!sdkDirectory.exists()) { 388 if (!sdkDirectory.exists()) {
190 return null; 389 return null;
191 } 390 }
192 return sdkDirectory; 391 return sdkDirectory;
193 } 392 }
194 393
195 /** 394 /**
196 * The [AnalysisContext] which is used for all of the sources in this sdk.
197 */
198 InternalAnalysisContext _analysisContext;
199
200 /**
201 * The directory containing the SDK. 395 * The directory containing the SDK.
202 */ 396 */
203 JavaFile _sdkDirectory; 397 JavaFile _sdkDirectory;
204 398
205 /** 399 /**
206 * The directory within the SDK directory that contains the libraries. 400 * The directory within the SDK directory that contains the libraries.
207 */ 401 */
208 JavaFile _libraryDirectory; 402 JavaFile _libraryDirectory;
209 403
210 /** 404 /**
211 * The flag that specifies whether SDK summary should be used.
212 */
213 bool _useSummary = false;
214
215 /**
216 * The revision number of this SDK, or `"0"` if the revision number cannot be 405 * The revision number of this SDK, or `"0"` if the revision number cannot be
217 * discovered. 406 * discovered.
218 */ 407 */
219 String _sdkVersion; 408 String _sdkVersion;
220 409
221 /** 410 /**
222 * The file containing the dart2js executable. 411 * The file containing the dart2js executable.
223 */ 412 */
224 JavaFile _dart2jsExecutable; 413 JavaFile _dart2jsExecutable;
225 414
226 /** 415 /**
227 * The file containing the Dartium executable. 416 * The file containing the Dartium executable.
228 */ 417 */
229 JavaFile _dartiumExecutable; 418 JavaFile _dartiumExecutable;
230 419
231 /** 420 /**
232 * The file containing the pub executable. 421 * The file containing the pub executable.
233 */ 422 */
234 JavaFile _pubExecutable; 423 JavaFile _pubExecutable;
235 424
236 /** 425 /**
237 * The file containing the VM executable. 426 * The file containing the VM executable.
238 */ 427 */
239 JavaFile _vmExecutable; 428 JavaFile _vmExecutable;
240 429
241 /** 430 /**
242 * A mapping from Dart library URI's to the library represented by that URI.
243 */
244 LibraryMap _libraryMap;
245
246 /**
247 * The mapping from Dart URI's to the corresponding sources.
248 */
249 Map<String, Source> _uriToSourceMap = new HashMap<String, Source>();
250
251 /**
252 * The [AnalysisOptions] to use to create the [context].
253 */
254 AnalysisOptions _analysisOptions;
255
256 /**
257 * Initialize a newly created SDK to represent the Dart SDK installed in the 431 * Initialize a newly created SDK to represent the Dart SDK installed in the
258 * [sdkDirectory]. The flag [useDart2jsPaths] is `true` if the dart2js path 432 * [sdkDirectory]. The flag [useDart2jsPaths] is `true` if the dart2js path
259 * should be used when it is available 433 * should be used when it is available
260 */ 434 */
261 DirectoryBasedDartSdk(JavaFile sdkDirectory, [bool useDart2jsPaths = false]) { 435 DirectoryBasedDartSdk(JavaFile sdkDirectory, [bool useDart2jsPaths = false]) {
262 this._sdkDirectory = sdkDirectory.getAbsoluteFile(); 436 this._sdkDirectory = sdkDirectory.getAbsoluteFile();
263 _libraryMap = initialLibraryMap(useDart2jsPaths); 437 libraryMap = initialLibraryMap(useDart2jsPaths);
264 } 438 }
265 439
266 /** 440 /**
267 * Set the [options] for this SDK analysis context. Throw [StateError] if the
268 * context has been already created.
269 */
270 void set analysisOptions(AnalysisOptions options) {
271 if (_analysisContext != null) {
272 throw new StateError(
273 'Analysis options cannot be changed after context creation.');
274 }
275 _analysisOptions = options;
276 }
277
278 @override
279 AnalysisContext get context {
280 if (_analysisContext == null) {
281 _analysisContext = new SdkAnalysisContext(_analysisOptions);
282 SourceFactory factory = new SourceFactory([new DartUriResolver(this)]);
283 _analysisContext.sourceFactory = factory;
284 if (_useSummary) {
285 PackageBundle sdkBundle = getSummarySdkBundle();
286 if (sdkBundle != null) {
287 bool strongMode = _analysisOptions?.strongMode ?? false;
288 _analysisContext.resultProvider = new SdkSummaryResultProvider(
289 _analysisContext, sdkBundle, strongMode);
290 }
291 }
292 }
293 return _analysisContext;
294 }
295
296 /**
297 * Return the file containing the dart2js executable, or `null` if it does not 441 * Return the file containing the dart2js executable, or `null` if it does not
298 * exist. 442 * exist.
299 */ 443 */
300 JavaFile get dart2JsExecutable { 444 JavaFile get dart2JsExecutable {
301 if (_dart2jsExecutable == null) { 445 if (_dart2jsExecutable == null) {
302 _dart2jsExecutable = _verifyExecutable(new JavaFile.relative( 446 _dart2jsExecutable = _verifyExecutable(new JavaFile.relative(
303 new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), 447 new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
304 OSUtilities.isWindows() 448 OSUtilities.isWindows()
305 ? _DART2JS_EXECUTABLE_NAME_WIN 449 ? _DART2JS_EXECUTABLE_NAME_WIN
306 : _DART2JS_EXECUTABLE_NAME)); 450 : _DART2JS_EXECUTABLE_NAME));
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 if (_pubExecutable == null) { 523 if (_pubExecutable == null) {
380 _pubExecutable = _verifyExecutable(new JavaFile.relative( 524 _pubExecutable = _verifyExecutable(new JavaFile.relative(
381 new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), 525 new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME),
382 OSUtilities.isWindows() 526 OSUtilities.isWindows()
383 ? _PUB_EXECUTABLE_NAME_WIN 527 ? _PUB_EXECUTABLE_NAME_WIN
384 : _PUB_EXECUTABLE_NAME)); 528 : _PUB_EXECUTABLE_NAME));
385 } 529 }
386 return _pubExecutable; 530 return _pubExecutable;
387 } 531 }
388 532
389 @override
390 List<SdkLibrary> get sdkLibraries => _libraryMap.sdkLibraries;
391
392 /** 533 /**
393 * Return the revision number of this SDK, or `"0"` if the revision number 534 * Return the revision number of this SDK, or `"0"` if the revision number
394 * cannot be discovered. 535 * cannot be discovered.
395 */ 536 */
396 @override 537 @override
397 String get sdkVersion { 538 String get sdkVersion {
398 if (_sdkVersion == null) { 539 if (_sdkVersion == null) {
399 _sdkVersion = DartSdk.DEFAULT_VERSION; 540 _sdkVersion = DartSdk.DEFAULT_VERSION;
400 JavaFile revisionFile = 541 JavaFile revisionFile =
401 new JavaFile.relative(_sdkDirectory, _VERSION_FILE_NAME); 542 new JavaFile.relative(_sdkDirectory, _VERSION_FILE_NAME);
402 try { 543 try {
403 String revision = revisionFile.readAsStringSync(); 544 String revision = revisionFile.readAsStringSync();
404 if (revision != null) { 545 if (revision != null) {
405 _sdkVersion = revision.trim(); 546 _sdkVersion = revision.trim();
406 } 547 }
407 } on FileSystemException { 548 } on FileSystemException {
408 // Fall through to return the default. 549 // Fall through to return the default.
409 } 550 }
410 } 551 }
411 return _sdkVersion; 552 return _sdkVersion;
412 } 553 }
413 554
414 @override
415 List<String> get uris => _libraryMap.uris;
416
417 /**
418 * Whether an SDK summary should be used.
419 */
420 bool get useSummary => _useSummary;
421
422 /**
423 * Specify whether SDK summary should be used.
424 */
425 void set useSummary(bool use) {
426 if (_analysisContext != null) {
427 throw new StateError(
428 'The "useSummary" flag cannot be changed after context creation.');
429 }
430 _useSummary = use;
431 }
432
433 /** 555 /**
434 * Return the name of the file containing the VM executable. 556 * Return the name of the file containing the VM executable.
435 */ 557 */
436 String get vmBinaryName { 558 String get vmBinaryName {
437 if (OSUtilities.isWindows()) { 559 if (OSUtilities.isWindows()) {
438 return _VM_EXECUTABLE_NAME_WIN; 560 return _VM_EXECUTABLE_NAME_WIN;
439 } else { 561 } else {
440 return _VM_EXECUTABLE_NAME; 562 return _VM_EXECUTABLE_NAME;
441 } 563 }
442 } 564 }
(...skipping 20 matching lines...) Expand all
463 new JavaFile.relative( 585 new JavaFile.relative(
464 new JavaFile.relative(libraryDirectory, _INTERNAL_DIR), 586 new JavaFile.relative(libraryDirectory, _INTERNAL_DIR),
465 _SDK_LIBRARY_METADATA_DIR), 587 _SDK_LIBRARY_METADATA_DIR),
466 _SDK_LIBRARY_METADATA_LIB_DIR), 588 _SDK_LIBRARY_METADATA_LIB_DIR),
467 _LIBRARIES_FILE); 589 _LIBRARIES_FILE);
468 yield new JavaFile.relative( 590 yield new JavaFile.relative(
469 new JavaFile.relative(libraryDirectory, _INTERNAL_DIR), 591 new JavaFile.relative(libraryDirectory, _INTERNAL_DIR),
470 _LIBRARIES_FILE); 592 _LIBRARIES_FILE);
471 } 593 }
472 594
473 @override
474 Source fromFileUri(Uri uri) {
475 JavaFile file = new JavaFile.fromUri(uri);
476 String filePath = file.getAbsolutePath();
477 String libPath = libraryDirectory.getAbsolutePath();
478 if (!filePath.startsWith("$libPath${JavaFile.separator}")) {
479 return null;
480 }
481 filePath = filePath.substring(libPath.length + 1);
482 for (SdkLibrary library in _libraryMap.sdkLibraries) {
483 String libraryPath = library.path;
484 if (filePath.replaceAll('\\', '/') == libraryPath) {
485 String path = library.shortName;
486 try {
487 return new FileBasedSource(file, parseUriWithException(path));
488 } on URISyntaxException catch (exception, stackTrace) {
489 AnalysisEngine.instance.logger.logInformation(
490 "Failed to create URI: $path",
491 new CaughtException(exception, stackTrace));
492 return null;
493 }
494 }
495 libraryPath = new JavaFile(library.path).getParent();
496 if (filePath.startsWith("$libraryPath${JavaFile.separator}")) {
497 String path =
498 "${library.shortName}/${filePath.substring(libraryPath.length + 1)}" ;
499 try {
500 return new FileBasedSource(file, parseUriWithException(path));
501 } on URISyntaxException catch (exception, stackTrace) {
502 AnalysisEngine.instance.logger.logInformation(
503 "Failed to create URI: $path",
504 new CaughtException(exception, stackTrace));
505 return null;
506 }
507 }
508 }
509 return null;
510 }
511
512 /** 595 /**
513 * Return the directory where dartium can be found (the directory that will be 596 * Return the directory where dartium can be found (the directory that will be
514 * the working directory if Dartium is invoked without changing the default), 597 * the working directory if Dartium is invoked without changing the default),
515 * assuming that the Editor was installed in the [installDir]. 598 * assuming that the Editor was installed in the [installDir].
516 */ 599 */
517 JavaFile getDartiumWorkingDirectory(JavaFile installDir) => 600 JavaFile getDartiumWorkingDirectory(JavaFile installDir) =>
518 new JavaFile.relative(installDir, _DARTIUM_DIRECTORY_NAME); 601 new JavaFile.relative(installDir, _DARTIUM_DIRECTORY_NAME);
519 602
520 /** 603 /**
521 * Return the auxiliary documentation file for the library with the given 604 * Return the auxiliary documentation file for the library with the given
522 * [libraryName], or `null` if no such file exists. 605 * [libraryName], or `null` if no such file exists.
523 */ 606 */
524 JavaFile getDocFileFor(String libraryName) { 607 JavaFile getDocFileFor(String libraryName) {
525 JavaFile dir = docDirectory; 608 JavaFile dir = docDirectory;
526 if (!dir.exists()) { 609 if (!dir.exists()) {
527 return null; 610 return null;
528 } 611 }
529 JavaFile libDir = new JavaFile.relative(dir, libraryName); 612 JavaFile libDir = new JavaFile.relative(dir, libraryName);
530 JavaFile docFile = 613 JavaFile docFile =
531 new JavaFile.relative(libDir, "$libraryName$_DOC_FILE_SUFFIX"); 614 new JavaFile.relative(libDir, "$libraryName$_DOC_FILE_SUFFIX");
532 if (docFile.exists()) { 615 if (docFile.exists()) {
533 return docFile; 616 return docFile;
534 } 617 }
535 return null; 618 return null;
536 } 619 }
537 620
538 @override 621 @override
539 SdkLibrary getSdkLibrary(String dartUri) => _libraryMap.getLibrary(dartUri); 622 String getRelativePathFromFile(JavaFile file) {
623 String filePath = file.getAbsolutePath();
624 String libPath = libraryDirectory.getAbsolutePath();
625 if (!filePath.startsWith("$libPath${JavaFile.separator}")) {
626 return null;
627 }
628 return filePath.substring(libPath.length + 1);
629 }
540 630
541 /** 631 /**
542 * Return the [PackageBundle] for this SDK, if it exists, or `null` otherwise. 632 * Return the [PackageBundle] for this SDK, if it exists, or `null` otherwise.
543 * This method should not be used outside of `analyzer` and `analyzer_cli` 633 * This method should not be used outside of `analyzer` and `analyzer_cli`
544 * packages. 634 * packages.
545 */ 635 */
546 PackageBundle getSummarySdkBundle() { 636 PackageBundle getSummarySdkBundle(bool strongMode) {
547 String rootPath = directory.getAbsolutePath(); 637 String rootPath = directory.getAbsolutePath();
548 bool strongMode = _analysisOptions?.strongMode ?? false;
549 String name = strongMode ? 'strong.sum' : 'spec.sum'; 638 String name = strongMode ? 'strong.sum' : 'spec.sum';
550 String path = pathos.join(rootPath, 'lib', '_internal', name); 639 String path = pathos.join(rootPath, 'lib', '_internal', name);
551 try { 640 try {
552 File file = new File(path); 641 File file = new File(path);
553 if (file.existsSync()) { 642 if (file.existsSync()) {
554 List<int> bytes = file.readAsBytesSync(); 643 List<int> bytes = file.readAsBytesSync();
555 return new PackageBundle.fromBuffer(bytes); 644 return new PackageBundle.fromBuffer(bytes);
556 } 645 }
557 } catch (exception, stackTrace) { 646 } catch (exception, stackTrace) {
558 AnalysisEngine.instance.logger.logError( 647 AnalysisEngine.instance.logger.logError(
(...skipping 23 matching lines...) Expand all
582 lastStackTrace = stackTrace; 671 lastStackTrace = stackTrace;
583 } 672 }
584 } 673 }
585 AnalysisEngine.instance.logger.logError( 674 AnalysisEngine.instance.logger.logError(
586 "Could not initialize the library map from $searchedPaths", 675 "Could not initialize the library map from $searchedPaths",
587 new CaughtException(lastException, lastStackTrace)); 676 new CaughtException(lastException, lastStackTrace));
588 return new LibraryMap(); 677 return new LibraryMap();
589 } 678 }
590 679
591 @override 680 @override
592 Source mapDartUri(String dartUri) { 681 FileBasedSource internalMapDartUri(String dartUri) {
593 Source source = _uriToSourceMap[dartUri];
594 if (source == null) {
595 source = _mapDartUri(dartUri);
596 _uriToSourceMap[dartUri] = source;
597 }
598 return source;
599 }
600
601 FileBasedSource _mapDartUri(String dartUri) {
602 String libraryName; 682 String libraryName;
603 String relativePath; 683 String relativePath;
604 int index = dartUri.indexOf('/'); 684 int index = dartUri.indexOf('/');
605 if (index >= 0) { 685 if (index >= 0) {
606 libraryName = dartUri.substring(0, index); 686 libraryName = dartUri.substring(0, index);
607 relativePath = dartUri.substring(index + 1); 687 relativePath = dartUri.substring(index + 1);
608 } else { 688 } else {
609 libraryName = dartUri; 689 libraryName = dartUri;
610 relativePath = ""; 690 relativePath = "";
611 } 691 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 SdkLibrariesReader_LibraryBuilder libraryBuilder = 769 SdkLibrariesReader_LibraryBuilder libraryBuilder =
690 new SdkLibrariesReader_LibraryBuilder(_useDart2jsPaths); 770 new SdkLibrariesReader_LibraryBuilder(_useDart2jsPaths);
691 // If any syntactic errors were found then don't try to visit the AST 771 // If any syntactic errors were found then don't try to visit the AST
692 // structure. 772 // structure.
693 if (!errorListener.errorReported) { 773 if (!errorListener.errorReported) {
694 unit.accept(libraryBuilder); 774 unit.accept(libraryBuilder);
695 } 775 }
696 return libraryBuilder.librariesMap; 776 return libraryBuilder.librariesMap;
697 } 777 }
698 } 778 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/source/embedder.dart ('k') | pkg/analyzer/test/source/embedder_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698