| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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_cli.src.analyzer_impl; | 5 library analyzer_cli.src.analyzer_impl; |
| 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/element/element.dart'; | 10 import 'package:analyzer/dart/element/element.dart'; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 static final PerformanceTag _prepareErrorsTag = | 33 static final PerformanceTag _prepareErrorsTag = |
| 34 new PerformanceTag("AnalyzerImpl.prepareErrors"); | 34 new PerformanceTag("AnalyzerImpl.prepareErrors"); |
| 35 static final PerformanceTag _resolveLibraryTag = | 35 static final PerformanceTag _resolveLibraryTag = |
| 36 new PerformanceTag("AnalyzerImpl._resolveLibrary"); | 36 new PerformanceTag("AnalyzerImpl._resolveLibrary"); |
| 37 | 37 |
| 38 final CommandLineOptions options; | 38 final CommandLineOptions options; |
| 39 final int startTime; | 39 final int startTime; |
| 40 | 40 |
| 41 final AnalysisContext context; | 41 final AnalysisContext context; |
| 42 | 42 |
| 43 /// Accumulated analysis statistics. |
| 44 final AnalysisStats stats; |
| 45 |
| 43 final Source librarySource; | 46 final Source librarySource; |
| 44 | 47 |
| 45 /// All [Source]s references by the analyzed library. | 48 /// All [Source]s references by the analyzed library. |
| 46 final Set<Source> sources = new Set<Source>(); | 49 final Set<Source> sources = new Set<Source>(); |
| 47 | 50 |
| 48 /// All [AnalysisErrorInfo]s in the analyzed library. | 51 /// All [AnalysisErrorInfo]s in the analyzed library. |
| 49 final List<AnalysisErrorInfo> errorInfos = new List<AnalysisErrorInfo>(); | 52 final List<AnalysisErrorInfo> errorInfos = new List<AnalysisErrorInfo>(); |
| 50 | 53 |
| 51 /// [HashMap] between sources and analysis error infos. | 54 /// [HashMap] between sources and analysis error infos. |
| 52 final HashMap<Source, AnalysisErrorInfo> sourceErrorsMap = | 55 final HashMap<Source, AnalysisErrorInfo> sourceErrorsMap = |
| 53 new HashMap<Source, AnalysisErrorInfo>(); | 56 new HashMap<Source, AnalysisErrorInfo>(); |
| 54 | 57 |
| 55 /// If the file specified on the command line is part of a package, the name | 58 /// If the file specified on the command line is part of a package, the name |
| 56 /// of that package. Otherwise `null`. This allows us to analyze the file | 59 /// of that package. Otherwise `null`. This allows us to analyze the file |
| 57 /// specified on the command line as though it is reached via a "package:" | 60 /// specified on the command line as though it is reached via a "package:" |
| 58 /// URI, but avoid suppressing its output in the event that the user has not | 61 /// URI, but avoid suppressing its output in the event that the user has not |
| 59 /// specified the "--package-warnings" option. | 62 /// specified the "--package-warnings" option. |
| 60 String _selfPackageName; | 63 String _selfPackageName; |
| 61 | 64 |
| 62 AnalyzerImpl(this.context, this.librarySource, this.options, this.startTime); | 65 AnalyzerImpl(this.context, this.librarySource, this.options, this.stats, |
| 66 this.startTime); |
| 63 | 67 |
| 64 /// Returns the maximal [ErrorSeverity] of the recorded errors. | 68 /// Returns the maximal [ErrorSeverity] of the recorded errors. |
| 65 ErrorSeverity get maxErrorSeverity { | 69 ErrorSeverity get maxErrorSeverity { |
| 66 var status = ErrorSeverity.NONE; | 70 var status = ErrorSeverity.NONE; |
| 67 for (AnalysisErrorInfo errorInfo in errorInfos) { | 71 for (AnalysisErrorInfo errorInfo in errorInfos) { |
| 68 for (AnalysisError error in errorInfo.errors) { | 72 for (AnalysisError error in errorInfo.errors) { |
| 69 if (_processError(error) == null) { | 73 if (_processError(error) == null) { |
| 70 continue; | 74 continue; |
| 71 } | 75 } |
| 72 var severity = computeSeverity(error, options); | 76 var severity = computeSeverity(error, options); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 _printErrors() { | 217 _printErrors() { |
| 214 // The following is a hack. We currently print out to stderr to ensure that | 218 // The following is a hack. We currently print out to stderr to ensure that |
| 215 // when in batch mode we print to stderr, this is because the prints from | 219 // when in batch mode we print to stderr, this is because the prints from |
| 216 // batch are made to stderr. The reason that options.shouldBatch isn't used | 220 // batch are made to stderr. The reason that options.shouldBatch isn't used |
| 217 // is because when the argument flags are constructed in BatchRunner and | 221 // is because when the argument flags are constructed in BatchRunner and |
| 218 // passed in from batch mode which removes the batch flag to prevent the | 222 // passed in from batch mode which removes the batch flag to prevent the |
| 219 // "cannot have the batch flag and source file" error message. | 223 // "cannot have the batch flag and source file" error message. |
| 220 StringSink sink = options.machineFormat ? errorSink : outSink; | 224 StringSink sink = options.machineFormat ? errorSink : outSink; |
| 221 | 225 |
| 222 // Print errors. | 226 // Print errors. |
| 223 ErrorFormatter formatter = new ErrorFormatter(sink, options, _processError); | 227 ErrorFormatter formatter = |
| 228 new ErrorFormatter(sink, options, stats, _processError); |
| 224 formatter.formatErrors(errorInfos); | 229 formatter.formatErrors(errorInfos); |
| 225 } | 230 } |
| 226 | 231 |
| 227 ProcessedSeverity _processError(AnalysisError error) => | 232 ProcessedSeverity _processError(AnalysisError error) => |
| 228 processError(error, options, context); | 233 processError(error, options, context); |
| 229 | 234 |
| 230 LibraryElement _resolveLibrary() { | 235 LibraryElement _resolveLibrary() { |
| 231 return _resolveLibraryTag.makeCurrentWhile(() { | 236 return _resolveLibraryTag.makeCurrentWhile(() { |
| 232 return context.computeLibraryElement(librarySource); | 237 return context.computeLibraryElement(librarySource); |
| 233 }); | 238 }); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 } | 328 } |
| 324 | 329 |
| 325 @override | 330 @override |
| 326 void logInformation(String message, [CaughtException exception]) { | 331 void logInformation(String message, [CaughtException exception]) { |
| 327 outSink.writeln(message); | 332 outSink.writeln(message); |
| 328 if (exception != null) { | 333 if (exception != null) { |
| 329 outSink.writeln(exception); | 334 outSink.writeln(exception); |
| 330 } | 335 } |
| 331 } | 336 } |
| 332 } | 337 } |
| OLD | NEW |