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 /// Static implementation of smoke services using code-generated data. | 5 /// Static implementation of smoke services using code-generated data. |
6 library smoke.static; | 6 library smoke.static; |
7 | 7 |
8 import 'dart:math' as math; | 8 import 'dart:math' as math; |
9 | 9 |
10 import 'package:logging/logging.dart'; | 10 import 'package:logging/logging.dart'; |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 // we should wrap `e` as a new exception (what's the best way to let users | 107 // we should wrap `e` as a new exception (what's the best way to let users |
108 // know about this tentativeError?) | 108 // know about this tentativeError?) |
109 if (tentativeError != null) print(tentativeError); | 109 if (tentativeError != null) print(tentativeError); |
110 rethrow; | 110 rethrow; |
111 } | 111 } |
112 } | 112 } |
113 } | 113 } |
114 | 114 |
115 /// Implements [TypeInspectorService] using a static configuration. | 115 /// Implements [TypeInspectorService] using a static configuration. |
116 class _GeneratedTypeInspectorService implements TypeInspectorService { | 116 class _GeneratedTypeInspectorService implements TypeInspectorService { |
| 117 bool isSubclassOf(Type type, Type supertype) { |
| 118 if (type == supertype || supertype == Object) return true; |
| 119 while (type != Object) { |
| 120 var parentType = _configuration.parents[type]; |
| 121 if (parentType == supertype) return true; |
| 122 if (parentType == null) { |
| 123 throw new MissingCodeException('superclass of "$type" ($parentType)'); |
| 124 } |
| 125 type = parentType; |
| 126 } |
| 127 return false; |
| 128 } |
| 129 |
117 bool hasGetter(Type type, Symbol name) { | 130 bool hasGetter(Type type, Symbol name) { |
118 var decl = _findDeclaration(type, name); | 131 var decl = _findDeclaration(type, name); |
119 // No need to check decl.isProperty because methods are also automatically | 132 // No need to check decl.isProperty because methods are also automatically |
120 // considered getters (auto-closures). | 133 // considered getters (auto-closures). |
121 return decl != null && !decl.isStatic; | 134 return decl != null && !decl.isStatic; |
122 } | 135 } |
123 | 136 |
124 bool hasSetter(Type type, Symbol name) { | 137 bool hasSetter(Type type, Symbol name) { |
125 var decl = _findDeclaration(type, name); | 138 var decl = _findDeclaration(type, name); |
126 return decl != null && !decl.isMethod && !decl.isFinal && !decl.isStatic; | 139 return decl != null && !decl.isMethod && !decl.isFinal && !decl.isStatic; |
(...skipping 21 matching lines...) Expand all Loading... |
148 return decl; | 161 return decl; |
149 } | 162 } |
150 | 163 |
151 List<Declaration> query(Type type, QueryOptions options) { | 164 List<Declaration> query(Type type, QueryOptions options) { |
152 var result; | 165 var result; |
153 if (options.includeInherited) { | 166 if (options.includeInherited) { |
154 var superclass = _configuration.parents[type]; | 167 var superclass = _configuration.parents[type]; |
155 if (superclass == null) { | 168 if (superclass == null) { |
156 throw new MissingCodeException('superclass of "$type"'); | 169 throw new MissingCodeException('superclass of "$type"'); |
157 } | 170 } |
158 result = (superclass == Object) ? [] : query(superclass, options); | 171 result = (superclass == options.includeUpTo) ? [] |
| 172 : query(superclass, options); |
159 } else { | 173 } else { |
160 result = []; | 174 result = []; |
161 } | 175 } |
162 var map = _configuration.declarations[type]; | 176 var map = _configuration.declarations[type]; |
163 if (map == null) { | 177 if (map == null) { |
164 throw new MissingCodeException('declarations for $type'); | 178 throw new MissingCodeException('declarations for $type'); |
165 } | 179 } |
166 for (var decl in map.values) { | 180 for (var decl in map.values) { |
167 if (!options.includeFields && decl.isField) continue; | 181 if (!options.includeFields && decl.isField) continue; |
168 if (!options.includeProperties && decl.isProperty) continue; | 182 if (!options.includeProperties && decl.isProperty) continue; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 if (declaration != null) return declaration; | 217 if (declaration != null) return declaration; |
204 } | 218 } |
205 var parentType = _configuration.parents[type]; | 219 var parentType = _configuration.parents[type]; |
206 if (parentType == null) { | 220 if (parentType == null) { |
207 throw new MissingCodeException('superclass of "$type"'); | 221 throw new MissingCodeException('superclass of "$type"'); |
208 } | 222 } |
209 type = parentType; | 223 type = parentType; |
210 } | 224 } |
211 return null; | 225 return null; |
212 } | 226 } |
OLD | NEW |