| 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 /// Defines static information collected by the type checker and used later by | 5 /// Defines static information collected by the type checker and used later by |
| 6 /// emitters to generate code. | 6 /// emitters to generate code. |
| 7 library dev_compiler.src.info; | 7 library dev_compiler.src.info; |
| 8 | 8 |
| 9 import 'dart:mirrors'; | 9 import 'dart:mirrors'; |
| 10 | 10 |
| 11 import 'package:analyzer/src/generated/ast.dart'; | 11 import 'package:analyzer/src/generated/ast.dart'; |
| 12 import 'package:analyzer/src/generated/element.dart'; | 12 import 'package:analyzer/src/generated/element.dart'; |
| 13 import 'package:analyzer/src/generated/scanner.dart' | 13 import 'package:analyzer/src/generated/scanner.dart' |
| 14 show Token, TokenType, SyntheticStringToken; | 14 show Token, TokenType, SyntheticStringToken; |
| 15 import 'package:logging/logging.dart' show Level; | 15 import 'package:logging/logging.dart' show Level; |
| 16 | 16 |
| 17 import 'package:dev_compiler/src/checker/rules.dart'; | 17 import 'package:dev_compiler/src/checker/rules.dart'; |
| 18 import 'package:dev_compiler/src/utils.dart' as utils; | 18 import 'package:dev_compiler/src/utils.dart' as utils; |
| 19 | 19 |
| 20 import 'report.dart' show Message; |
| 21 |
| 20 /// Represents a summary of the results collected by running the program | 22 /// Represents a summary of the results collected by running the program |
| 21 /// checker. | 23 /// checker. |
| 22 class CheckerResults { | 24 class CheckerResults { |
| 23 final List<LibraryInfo> libraries; | 25 final List<LibraryInfo> libraries; |
| 24 final TypeRules rules; | 26 final TypeRules rules; |
| 25 final bool failure; | 27 final bool failure; |
| 26 | 28 |
| 27 CheckerResults(this.libraries, this.rules, this.failure); | 29 CheckerResults(this.libraries, this.rules, this.failure); |
| 28 } | 30 } |
| 29 | 31 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 : super(fromType, toType); | 109 : super(fromType, toType); |
| 108 } | 110 } |
| 109 | 111 |
| 110 // The error coercion. This coercion signals that a coercion | 112 // The error coercion. This coercion signals that a coercion |
| 111 // could not be generated. The code generator should not see | 113 // could not be generated. The code generator should not see |
| 112 // these. | 114 // these. |
| 113 class CoercionError extends Coercion { | 115 class CoercionError extends Coercion { |
| 114 CoercionError() : super(null, null); | 116 CoercionError() : super(null, null); |
| 115 } | 117 } |
| 116 | 118 |
| 117 abstract class StaticInfo { | 119 abstract class StaticInfo implements Message { |
| 118 /// AST Node this info is attached to. | 120 /// AST Node this info is attached to. |
| 119 // TODO(jmesserly): this is somewhat redundant with SemanticNode. | 121 // TODO(jmesserly): this is somewhat redundant with SemanticNode. |
| 120 AstNode get node; | 122 AstNode get node; |
| 121 | 123 |
| 122 /// Log level for error messages. This is a placeholder | 124 @override |
| 123 /// for severity. | 125 int get begin => node is AnnotatedNode |
| 124 Level get level; | 126 ? (node as AnnotatedNode).firstTokenAfterCommentAndMetadata.offset |
| 127 : node.offset; |
| 125 | 128 |
| 126 /// Description / error message. | 129 @override |
| 127 String get message; | 130 int get end => node.end; |
| 128 } | 131 } |
| 129 | 132 |
| 130 /// Implicitly injected expression conversion. | 133 /// Implicitly injected expression conversion. |
| 131 // TODO(jmesserly): rename to have Expression suffix? | 134 // TODO(jmesserly): rename to have Expression suffix? |
| 132 abstract class Conversion extends Expression implements StaticInfo { | 135 abstract class Conversion extends Expression with StaticInfo { |
| 133 final TypeRules rules; | 136 final TypeRules rules; |
| 134 | 137 |
| 135 // TODO(jmesserly): should probably rename this "operand" for consistency with | 138 // TODO(jmesserly): should probably rename this "operand" for consistency with |
| 136 // analyzer's unary expressions (e.g. PrefixExpression). | 139 // analyzer's unary expressions (e.g. PrefixExpression). |
| 137 final Expression expression; | 140 final Expression expression; |
| 138 | 141 |
| 139 AstNode get node => expression; | 142 AstNode get node => expression; |
| 140 DartType _convertedType; | 143 DartType _convertedType; |
| 141 | 144 |
| 142 Conversion(this.rules, this.expression) { | 145 Conversion(this.rules, this.expression) { |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 for (var cls in declarations.where((d) => d is ClassMirror)) { | 582 for (var cls in declarations.where((d) => d is ClassMirror)) { |
| 580 if (cls.isSubtypeOf(infoMirror)) { | 583 if (cls.isSubtypeOf(infoMirror)) { |
| 581 allTypes.add(cls); | 584 allTypes.add(cls); |
| 582 baseTypes.add(cls.superclass); | 585 baseTypes.add(cls.superclass); |
| 583 } | 586 } |
| 584 } | 587 } |
| 585 allTypes.removeAll(baseTypes); | 588 allTypes.removeAll(baseTypes); |
| 586 return new List<Type>.from(allTypes.map((mirror) => mirror.reflectedType)) | 589 return new List<Type>.from(allTypes.map((mirror) => mirror.reflectedType)) |
| 587 ..sort((t1, t2) => '$t1'.compareTo('$t2')); | 590 ..sort((t1, t2) => '$t1'.compareTo('$t2')); |
| 588 }(); | 591 }(); |
| OLD | NEW |