| 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 engine; | 5 library engine; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:math' as math; | 9 import 'dart:math' as math; |
| 10 | 10 |
| (...skipping 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1126 void set analysisOptions(AnalysisOptions options) { | 1126 void set analysisOptions(AnalysisOptions options) { |
| 1127 bool needsRecompute = this._options.analyzeFunctionBodiesPredicate != | 1127 bool needsRecompute = this._options.analyzeFunctionBodiesPredicate != |
| 1128 options.analyzeFunctionBodiesPredicate || | 1128 options.analyzeFunctionBodiesPredicate || |
| 1129 this._options.generateImplicitErrors != | 1129 this._options.generateImplicitErrors != |
| 1130 options.generateImplicitErrors || | 1130 options.generateImplicitErrors || |
| 1131 this._options.generateSdkErrors != options.generateSdkErrors || | 1131 this._options.generateSdkErrors != options.generateSdkErrors || |
| 1132 this._options.dart2jsHint != options.dart2jsHint || | 1132 this._options.dart2jsHint != options.dart2jsHint || |
| 1133 (this._options.hint && !options.hint) || | 1133 (this._options.hint && !options.hint) || |
| 1134 this._options.preserveComments != options.preserveComments || | 1134 this._options.preserveComments != options.preserveComments || |
| 1135 this._options.strongMode != options.strongMode || | 1135 this._options.strongMode != options.strongMode || |
| 1136 this._options.enableAssertMessage != options.enableAssertMessage || |
| 1136 this._options.enableStrictCallChecks != | 1137 this._options.enableStrictCallChecks != |
| 1137 options.enableStrictCallChecks || | 1138 options.enableStrictCallChecks || |
| 1138 this._options.enableSuperMixins != options.enableSuperMixins; | 1139 this._options.enableSuperMixins != options.enableSuperMixins; |
| 1139 int cacheSize = options.cacheSize; | 1140 int cacheSize = options.cacheSize; |
| 1140 if (this._options.cacheSize != cacheSize) { | 1141 if (this._options.cacheSize != cacheSize) { |
| 1141 this._options.cacheSize = cacheSize; | 1142 this._options.cacheSize = cacheSize; |
| 1142 //cache.setMaxCacheSize(cacheSize); | 1143 //cache.setMaxCacheSize(cacheSize); |
| 1143 _privatePartition.maxCacheSize = cacheSize; | 1144 _privatePartition.maxCacheSize = cacheSize; |
| 1144 // | 1145 // |
| 1145 // Cap the size of the priority list to being less than the cache size. | 1146 // Cap the size of the priority list to being less than the cache size. |
| 1146 // Failure to do so can result in an infinite loop in | 1147 // Failure to do so can result in an infinite loop in |
| 1147 // performAnalysisTask() because re-caching one AST structure | 1148 // performAnalysisTask() because re-caching one AST structure |
| 1148 // can cause another priority source's AST structure to be flushed. | 1149 // can cause another priority source's AST structure to be flushed. |
| 1149 // | 1150 // |
| 1150 // TODO(brianwilkerson) Remove this constraint when the new task model is | 1151 // TODO(brianwilkerson) Remove this constraint when the new task model is |
| 1151 // implemented. | 1152 // implemented. |
| 1152 // | 1153 // |
| 1153 int maxPriorityOrderSize = cacheSize - _PRIORITY_ORDER_SIZE_DELTA; | 1154 int maxPriorityOrderSize = cacheSize - _PRIORITY_ORDER_SIZE_DELTA; |
| 1154 if (_priorityOrder.length > maxPriorityOrderSize) { | 1155 if (_priorityOrder.length > maxPriorityOrderSize) { |
| 1155 _priorityOrder = _priorityOrder.sublist(0, maxPriorityOrderSize); | 1156 _priorityOrder = _priorityOrder.sublist(0, maxPriorityOrderSize); |
| 1156 } | 1157 } |
| 1157 } | 1158 } |
| 1158 this._options.analyzeFunctionBodiesPredicate = | 1159 this._options.analyzeFunctionBodiesPredicate = |
| 1159 options.analyzeFunctionBodiesPredicate; | 1160 options.analyzeFunctionBodiesPredicate; |
| 1160 this._options.generateImplicitErrors = options.generateImplicitErrors; | 1161 this._options.generateImplicitErrors = options.generateImplicitErrors; |
| 1161 this._options.generateSdkErrors = options.generateSdkErrors; | 1162 this._options.generateSdkErrors = options.generateSdkErrors; |
| 1162 this._options.dart2jsHint = options.dart2jsHint; | 1163 this._options.dart2jsHint = options.dart2jsHint; |
| 1164 this._options.enableAssertMessage = options.enableAssertMessage; |
| 1163 this._options.enableStrictCallChecks = options.enableStrictCallChecks; | 1165 this._options.enableStrictCallChecks = options.enableStrictCallChecks; |
| 1164 this._options.enableSuperMixins = options.enableSuperMixins; | 1166 this._options.enableSuperMixins = options.enableSuperMixins; |
| 1165 this._options.hint = options.hint; | 1167 this._options.hint = options.hint; |
| 1166 this._options.incremental = options.incremental; | 1168 this._options.incremental = options.incremental; |
| 1167 this._options.incrementalApi = options.incrementalApi; | 1169 this._options.incrementalApi = options.incrementalApi; |
| 1168 this._options.incrementalValidation = options.incrementalValidation; | 1170 this._options.incrementalValidation = options.incrementalValidation; |
| 1169 this._options.lint = options.lint; | 1171 this._options.lint = options.lint; |
| 1170 this._options.preserveComments = options.preserveComments; | 1172 this._options.preserveComments = options.preserveComments; |
| 1171 this._options.strongMode = options.strongMode; | 1173 this._options.strongMode = options.strongMode; |
| 1172 _generateImplicitErrors = options.generateImplicitErrors; | 1174 _generateImplicitErrors = options.generateImplicitErrors; |
| (...skipping 5022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6195 * kept in the cache. | 6197 * kept in the cache. |
| 6196 */ | 6198 */ |
| 6197 int get cacheSize; | 6199 int get cacheSize; |
| 6198 | 6200 |
| 6199 /** | 6201 /** |
| 6200 * Return `true` if analysis is to generate dart2js related hint results. | 6202 * Return `true` if analysis is to generate dart2js related hint results. |
| 6201 */ | 6203 */ |
| 6202 bool get dart2jsHint; | 6204 bool get dart2jsHint; |
| 6203 | 6205 |
| 6204 /** | 6206 /** |
| 6207 * Return `true` to enable custom assert messages (DEP 37). |
| 6208 */ |
| 6209 bool get enableAssertMessage; |
| 6210 |
| 6211 /** |
| 6205 * Return `true` if analysis is to include the new async support. | 6212 * Return `true` if analysis is to include the new async support. |
| 6206 */ | 6213 */ |
| 6207 @deprecated // Always true | 6214 @deprecated // Always true |
| 6208 bool get enableAsync; | 6215 bool get enableAsync; |
| 6209 | 6216 |
| 6210 /** | 6217 /** |
| 6211 * Return `true` if analysis is to include the new deferred loading support. | 6218 * Return `true` if analysis is to include the new deferred loading support. |
| 6212 */ | 6219 */ |
| 6213 @deprecated // Always true | 6220 @deprecated // Always true |
| 6214 bool get enableDeferredLoading; | 6221 bool get enableDeferredLoading; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6328 */ | 6335 */ |
| 6329 int cacheSize = DEFAULT_CACHE_SIZE; | 6336 int cacheSize = DEFAULT_CACHE_SIZE; |
| 6330 | 6337 |
| 6331 /** | 6338 /** |
| 6332 * A flag indicating whether analysis is to generate dart2js related hint | 6339 * A flag indicating whether analysis is to generate dart2js related hint |
| 6333 * results. | 6340 * results. |
| 6334 */ | 6341 */ |
| 6335 bool dart2jsHint = false; | 6342 bool dart2jsHint = false; |
| 6336 | 6343 |
| 6337 /** | 6344 /** |
| 6345 * A flag indicating whether custom assert messages are to be supported (DEP |
| 6346 * 37). |
| 6347 */ |
| 6348 bool enableAssertMessage = false; |
| 6349 |
| 6350 /** |
| 6338 * A flag indicating whether generic methods are to be supported (DEP 22). | 6351 * A flag indicating whether generic methods are to be supported (DEP 22). |
| 6339 */ | 6352 */ |
| 6340 bool enableGenericMethods = false; | 6353 bool enableGenericMethods = false; |
| 6341 | 6354 |
| 6342 /** | 6355 /** |
| 6343 * A flag indicating whether analysis is to strictly follow the specification | 6356 * A flag indicating whether analysis is to strictly follow the specification |
| 6344 * when generating warnings on "call" methods (fixes dartbug.com/21938). | 6357 * when generating warnings on "call" methods (fixes dartbug.com/21938). |
| 6345 */ | 6358 */ |
| 6346 bool enableStrictCallChecks = false; | 6359 bool enableStrictCallChecks = false; |
| 6347 | 6360 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6409 | 6422 |
| 6410 /** | 6423 /** |
| 6411 * Initialize a newly created set of analysis options to have the same values | 6424 * Initialize a newly created set of analysis options to have the same values |
| 6412 * as those in the given set of analysis [options]. | 6425 * as those in the given set of analysis [options]. |
| 6413 */ | 6426 */ |
| 6414 @deprecated // Use new AnalysisOptionsImpl.from(options) | 6427 @deprecated // Use new AnalysisOptionsImpl.from(options) |
| 6415 AnalysisOptionsImpl.con1(AnalysisOptions options) { | 6428 AnalysisOptionsImpl.con1(AnalysisOptions options) { |
| 6416 analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate; | 6429 analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate; |
| 6417 cacheSize = options.cacheSize; | 6430 cacheSize = options.cacheSize; |
| 6418 dart2jsHint = options.dart2jsHint; | 6431 dart2jsHint = options.dart2jsHint; |
| 6432 enableAssertMessage = options.enableAssertMessage; |
| 6419 enableStrictCallChecks = options.enableStrictCallChecks; | 6433 enableStrictCallChecks = options.enableStrictCallChecks; |
| 6420 enableSuperMixins = options.enableSuperMixins; | 6434 enableSuperMixins = options.enableSuperMixins; |
| 6421 generateImplicitErrors = options.generateImplicitErrors; | 6435 generateImplicitErrors = options.generateImplicitErrors; |
| 6422 generateSdkErrors = options.generateSdkErrors; | 6436 generateSdkErrors = options.generateSdkErrors; |
| 6423 hint = options.hint; | 6437 hint = options.hint; |
| 6424 incremental = options.incremental; | 6438 incremental = options.incremental; |
| 6425 incrementalApi = options.incrementalApi; | 6439 incrementalApi = options.incrementalApi; |
| 6426 incrementalValidation = options.incrementalValidation; | 6440 incrementalValidation = options.incrementalValidation; |
| 6427 lint = options.lint; | 6441 lint = options.lint; |
| 6428 preserveComments = options.preserveComments; | 6442 preserveComments = options.preserveComments; |
| 6429 strongMode = options.strongMode; | 6443 strongMode = options.strongMode; |
| 6430 } | 6444 } |
| 6431 | 6445 |
| 6432 /** | 6446 /** |
| 6433 * Initialize a newly created set of analysis options to have the same values | 6447 * Initialize a newly created set of analysis options to have the same values |
| 6434 * as those in the given set of analysis [options]. | 6448 * as those in the given set of analysis [options]. |
| 6435 */ | 6449 */ |
| 6436 AnalysisOptionsImpl.from(AnalysisOptions options) { | 6450 AnalysisOptionsImpl.from(AnalysisOptions options) { |
| 6437 analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate; | 6451 analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate; |
| 6438 cacheSize = options.cacheSize; | 6452 cacheSize = options.cacheSize; |
| 6439 dart2jsHint = options.dart2jsHint; | 6453 dart2jsHint = options.dart2jsHint; |
| 6454 enableAssertMessage = options.enableAssertMessage; |
| 6440 enableStrictCallChecks = options.enableStrictCallChecks; | 6455 enableStrictCallChecks = options.enableStrictCallChecks; |
| 6441 enableSuperMixins = options.enableSuperMixins; | 6456 enableSuperMixins = options.enableSuperMixins; |
| 6442 generateImplicitErrors = options.generateImplicitErrors; | 6457 generateImplicitErrors = options.generateImplicitErrors; |
| 6443 generateSdkErrors = options.generateSdkErrors; | 6458 generateSdkErrors = options.generateSdkErrors; |
| 6444 hint = options.hint; | 6459 hint = options.hint; |
| 6445 incremental = options.incremental; | 6460 incremental = options.incremental; |
| 6446 incrementalApi = options.incrementalApi; | 6461 incrementalApi = options.incrementalApi; |
| 6447 incrementalValidation = options.incrementalValidation; | 6462 incrementalValidation = options.incrementalValidation; |
| 6448 lint = options.lint; | 6463 lint = options.lint; |
| 6449 preserveComments = options.preserveComments; | 6464 preserveComments = options.preserveComments; |
| (...skipping 2038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8488 // ConstantVerifier constantVerifier = new ConstantVerifier(errorReporter,
libraryElement, typeProvider); | 8503 // ConstantVerifier constantVerifier = new ConstantVerifier(errorReporter,
libraryElement, typeProvider); |
| 8489 // _unit.accept(constantVerifier); | 8504 // _unit.accept(constantVerifier); |
| 8490 // | 8505 // |
| 8491 // Use the ErrorVerifier to compute the rest of the errors. | 8506 // Use the ErrorVerifier to compute the rest of the errors. |
| 8492 // | 8507 // |
| 8493 ErrorVerifier errorVerifier = new ErrorVerifier( | 8508 ErrorVerifier errorVerifier = new ErrorVerifier( |
| 8494 errorReporter, | 8509 errorReporter, |
| 8495 libraryElement, | 8510 libraryElement, |
| 8496 typeProvider, | 8511 typeProvider, |
| 8497 new InheritanceManager(libraryElement), | 8512 new InheritanceManager(libraryElement), |
| 8498 context.analysisOptions.enableSuperMixins); | 8513 context.analysisOptions.enableSuperMixins, |
| 8514 context.analysisOptions.enableAssertMessage); |
| 8499 _unit.accept(errorVerifier); | 8515 _unit.accept(errorVerifier); |
| 8500 _errors = errorListener.getErrorsForSource(source); | 8516 _errors = errorListener.getErrorsForSource(source); |
| 8501 }); | 8517 }); |
| 8502 } | 8518 } |
| 8503 | 8519 |
| 8504 /** | 8520 /** |
| 8505 * Check each directive in the given compilation unit to see if the referenced
source exists and | 8521 * Check each directive in the given compilation unit to see if the referenced
source exists and |
| 8506 * report an error if it does not. | 8522 * report an error if it does not. |
| 8507 * | 8523 * |
| 8508 * @param context the context in which the library exists | 8524 * @param context the context in which the library exists |
| (...skipping 2431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10940 // | 10956 // |
| 10941 // Perform additional error checking. | 10957 // Perform additional error checking. |
| 10942 // | 10958 // |
| 10943 PerformanceStatistics.errors.makeCurrentWhile(() { | 10959 PerformanceStatistics.errors.makeCurrentWhile(() { |
| 10944 ErrorReporter errorReporter = new ErrorReporter(errorListener, source); | 10960 ErrorReporter errorReporter = new ErrorReporter(errorListener, source); |
| 10945 ErrorVerifier errorVerifier = new ErrorVerifier( | 10961 ErrorVerifier errorVerifier = new ErrorVerifier( |
| 10946 errorReporter, | 10962 errorReporter, |
| 10947 _libraryElement, | 10963 _libraryElement, |
| 10948 typeProvider, | 10964 typeProvider, |
| 10949 inheritanceManager, | 10965 inheritanceManager, |
| 10950 context.analysisOptions.enableSuperMixins); | 10966 context.analysisOptions.enableSuperMixins, |
| 10967 context.analysisOptions.enableAssertMessage); |
| 10951 unit.accept(errorVerifier); | 10968 unit.accept(errorVerifier); |
| 10952 // TODO(paulberry): as a temporary workaround for issue 21572, | 10969 // TODO(paulberry): as a temporary workaround for issue 21572, |
| 10953 // ConstantVerifier is being run right after ConstantValueComputer, so we | 10970 // ConstantVerifier is being run right after ConstantValueComputer, so we |
| 10954 // don't need to run it here. Once issue 21572 is fixed, re-enable the | 10971 // don't need to run it here. Once issue 21572 is fixed, re-enable the |
| 10955 // call to ConstantVerifier. | 10972 // call to ConstantVerifier. |
| 10956 // ConstantVerifier constantVerifier = new ConstantVerifier(errorReporter,
_libraryElement, typeProvider); | 10973 // ConstantVerifier constantVerifier = new ConstantVerifier(errorReporter,
_libraryElement, typeProvider); |
| 10957 // unit.accept(constantVerifier); | 10974 // unit.accept(constantVerifier); |
| 10958 }); | 10975 }); |
| 10959 // | 10976 // |
| 10960 // Capture the results. | 10977 // Capture the results. |
| (...skipping 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12034 PendingFuture pendingFuture = | 12051 PendingFuture pendingFuture = |
| 12035 new PendingFuture<T>(_context, source, computeValue); | 12052 new PendingFuture<T>(_context, source, computeValue); |
| 12036 if (!pendingFuture.evaluate(sourceEntry)) { | 12053 if (!pendingFuture.evaluate(sourceEntry)) { |
| 12037 _context._pendingFutureSources | 12054 _context._pendingFutureSources |
| 12038 .putIfAbsent(source, () => <PendingFuture>[]) | 12055 .putIfAbsent(source, () => <PendingFuture>[]) |
| 12039 .add(pendingFuture); | 12056 .add(pendingFuture); |
| 12040 } | 12057 } |
| 12041 return pendingFuture.future; | 12058 return pendingFuture.future; |
| 12042 } | 12059 } |
| 12043 } | 12060 } |
| OLD | NEW |