Chromium Code Reviews| 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 /// Encapsulates how to invoke the analyzer resolver and overrides how it | 5 /// Encapsulates how to invoke the analyzer resolver and overrides how it |
| 6 /// computes types on expressions to use our restricted set of types. | 6 /// computes types on expressions to use our restricted set of types. |
| 7 library dev_compiler.src.checker.resolver; | 7 library dev_compiler.src.checker.resolver; |
| 8 | 8 |
| 9 import 'package:analyzer/analyzer.dart'; | 9 import 'package:analyzer/analyzer.dart'; |
| 10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
| 11 import 'package:analyzer/src/generated/element.dart'; | 11 import 'package:analyzer/src/generated/element.dart'; |
| 12 import 'package:analyzer/src/generated/engine.dart'; | 12 import 'package:analyzer/src/generated/engine.dart'; |
| 13 import 'package:analyzer/src/generated/error.dart'; | 13 import 'package:analyzer/src/generated/error.dart' as analyzer; |
| 14 import 'package:analyzer/src/generated/java_io.dart' show JavaFile; | 14 import 'package:analyzer/src/generated/java_io.dart' show JavaFile; |
| 15 import 'package:analyzer/src/generated/resolver.dart'; | 15 import 'package:analyzer/src/generated/resolver.dart'; |
| 16 import 'package:analyzer/src/generated/static_type_analyzer.dart'; | 16 import 'package:analyzer/src/generated/static_type_analyzer.dart'; |
| 17 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; | 17 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; |
| 18 import 'package:analyzer/src/generated/source.dart' show DartUriResolver; | 18 import 'package:analyzer/src/generated/source.dart' show DartUriResolver; |
| 19 import 'package:analyzer/src/generated/source.dart' show Source; | 19 import 'package:analyzer/src/generated/source.dart' show Source; |
| 20 import 'package:analyzer/src/generated/source_io.dart'; | 20 import 'package:analyzer/src/generated/source_io.dart'; |
| 21 import 'package:logging/logging.dart' as logger; | 21 import 'package:logging/logging.dart' as logger; |
| 22 | 22 |
| 23 import 'package:dev_compiler/src/options.dart'; | 23 import 'package:dev_compiler/src/options.dart'; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 /// Find the corresponding [Source] for [uri]. | 67 /// Find the corresponding [Source] for [uri]. |
| 68 Source findSource(Uri uri) { | 68 Source findSource(Uri uri) { |
| 69 var source = _sources[uri]; | 69 var source = _sources[uri]; |
| 70 if (source != null) return source; | 70 if (source != null) return source; |
| 71 return _sources[uri] = context.sourceFactory.forUri('$uri'); | 71 return _sources[uri] = context.sourceFactory.forUri('$uri'); |
| 72 } | 72 } |
| 73 | 73 |
| 74 /// Log any errors encountered when resolving [source] and return whether any | 74 /// Log any errors encountered when resolving [source] and return whether any |
| 75 /// errors were found. | 75 /// errors were found. |
| 76 bool logErrors(Source source, CheckerReporter reporter) { | 76 bool logErrors(Source source, CheckerReporter reporter) { |
| 77 List<AnalysisError> errors = context.getErrors(source).errors; | 77 List<analyzer.AnalysisError> errors = context.getErrors(source).errors; |
| 78 bool failure = false; | 78 bool failure = false; |
| 79 if (errors.isNotEmpty) { | 79 if (errors.isNotEmpty) { |
| 80 for (var error in errors) { | 80 for (var error in errors) { |
| 81 var severity = error.errorCode.errorSeverity; | 81 var message = new AnalyzerError.from(error); |
| 82 var isError = severity == ErrorSeverity.ERROR; | 82 if (message.level == logger.Level.SEVERE) failure = true; |
| 83 if (isError) failure = true; | 83 reporter.log(message); |
|
Siggi Cherem (dart-lang)
2015/03/07 02:43:01
I am unifying the error reporting using the new [M
vsm
2015/03/09 15:14:36
Nice!
| |
| 84 var level = isError ? logger.Level.SEVERE : logger.Level.WARNING; | |
| 85 reporter.logAnalyzerError( | |
| 86 error.message, level, error.offset, error.offset + error.length); | |
| 87 } | 84 } |
| 88 } | 85 } |
| 89 return failure; | 86 return failure; |
| 90 } | 87 } |
| 91 } | 88 } |
| 92 | 89 |
| 90 class AnalyzerError extends Message { | |
| 91 factory AnalyzerError.from(analyzer.AnalysisError error) { | |
| 92 var severity = error.errorCode.errorSeverity; | |
| 93 var isError = severity == analyzer.ErrorSeverity.ERROR; | |
| 94 var level = isError ? logger.Level.SEVERE : logger.Level.WARNING; | |
| 95 int begin = error.offset; | |
| 96 int end = begin + error.length; | |
| 97 return new AnalyzerError(error.message, level, begin, end); | |
| 98 } | |
| 99 | |
| 100 const AnalyzerError(String message, logger.Level level, int begin, int end) | |
| 101 : super('[from analyzer]: $message', level, begin, end); | |
| 102 } | |
| 103 | |
| 93 /// Creates an analysis context that contains our restricted typing rules. | 104 /// Creates an analysis context that contains our restricted typing rules. |
| 94 InternalAnalysisContext _initContext(ResolverOptions options) { | 105 InternalAnalysisContext _initContext(ResolverOptions options) { |
| 95 var analysisOptions = new AnalysisOptionsImpl()..cacheSize = 512; | 106 var analysisOptions = new AnalysisOptionsImpl()..cacheSize = 512; |
| 96 AnalysisContextImpl res = AnalysisEngine.instance.createAnalysisContext(); | 107 AnalysisContextImpl res = AnalysisEngine.instance.createAnalysisContext(); |
| 97 res.analysisOptions = analysisOptions; | 108 res.analysisOptions = analysisOptions; |
| 98 res.resolverVisitorFactory = RestrictedResolverVisitor.constructor(options); | 109 res.resolverVisitorFactory = RestrictedResolverVisitor.constructor(options); |
| 99 if (options.inferFromOverrides) { | 110 if (options.inferFromOverrides) { |
| 100 res.typeResolverVisitorFactory = RestrictedTypeResolverVisitor.constructor; | 111 res.typeResolverVisitorFactory = RestrictedTypeResolverVisitor.constructor; |
| 101 } | 112 } |
| 102 return res; | 113 return res; |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 438 element.returnType.isDynamic && | 449 element.returnType.isDynamic && |
| 439 node.returnType == null) { | 450 node.returnType == null) { |
| 440 var type = searchTypeFor(element.enclosingElement.type, element); | 451 var type = searchTypeFor(element.enclosingElement.type, element); |
| 441 if (type != null && !type.returnType.isDynamic) { | 452 if (type != null && !type.returnType.isDynamic) { |
| 442 element.returnType = type.returnType; | 453 element.returnType = type.returnType; |
| 443 } | 454 } |
| 444 } | 455 } |
| 445 return res; | 456 return res; |
| 446 } | 457 } |
| 447 } | 458 } |
| OLD | NEW |