Index: pkg/smoke/lib/static.dart |
diff --git a/pkg/smoke/lib/static.dart b/pkg/smoke/lib/static.dart |
index a5ccf1321002b252fd80f963602b4c388414eaa1..f7f74286974c8b5c24262934cbe34662b5f12f8a 100644 |
--- a/pkg/smoke/lib/static.dart |
+++ b/pkg/smoke/lib/static.dart |
@@ -37,14 +37,47 @@ class StaticConfiguration { |
/// A map from symbol to strings. |
final Map<Symbol, String> names; |
+ /// A map from strings to symbols (the reverse of [names]). |
+ final Map<String, Symbol> _symbols = {}; |
+ |
+ |
/// Whether to check for missing declarations, otherwise, return default |
/// values (for example a missing parent class can be treated as Object) |
final bool checkedMode; |
StaticConfiguration({ |
- this.getters: const {}, this.setters: const {}, this.parents: const {}, |
- this.declarations: const {}, this.staticMethods: const {}, |
- this.names: const {}, this.checkedMode: true}); |
+ Map<Symbol, Getter> getters, |
+ Map<Symbol, Setter> setters, |
+ Map<Type, Type> parents, |
+ Map<Type, Map<Symbol, Declaration>> declarations, |
+ Map<Type, Map<Symbol, Function>> staticMethods, |
+ Map<Symbol, String> names, |
+ this.checkedMode: true}) |
+ : getters = getters != null ? getters : {}, |
+ setters = setters != null ? setters : {}, |
+ parents = parents != null ? parents : {}, |
+ declarations = declarations != null ? declarations : {}, |
+ staticMethods = staticMethods != null ? staticMethods : {}, |
+ names = names != null ? names : {} { |
+ this.names.forEach((k, v) { _symbols[v] = k; }); |
+ } |
+ |
+ void addAll(StaticConfiguration other) { |
+ getters.addAll(other.getters); |
+ setters.addAll(other.setters); |
+ parents.addAll(other.parents); |
+ _nestedAddAll(declarations, other.declarations); |
+ _nestedAddAll(staticMethods, other.staticMethods); |
+ names.addAll(other.names); |
+ other.names.forEach((k, v) { _symbols[v] = k; }); |
+ } |
+ |
+ static _nestedAddAll(Map a, Map b) { |
+ for (var key in b.keys) { |
+ a.putIfAbsent(key, () => {}); |
jakemac
2014/07/23 20:05:02
So is this not inserting a null? It seems like the
Siggi Cherem (dart-lang)
2014/07/23 20:37:13
Yeah, it's confusing because we have both => and {
jakemac
2014/07/23 20:40:51
haha tricky, I figured it had to be something I wa
|
+ a[key].addAll(b[key]); |
+ } |
+ } |
} |
/// Set up the smoke package to use a static implementation based on the given |
@@ -57,14 +90,13 @@ useGeneratedCode(StaticConfiguration configuration) { |
/// Implements [ObjectAccessorService] using a static configuration. |
class GeneratedObjectAccessorService implements ObjectAccessorService { |
- final Map<Symbol, Getter> _getters; |
- final Map<Symbol, Setter> _setters; |
- final Map<Type, Map<Symbol, Function>> _staticMethods; |
+ final StaticConfiguration _configuration; |
+ Map<Symbol, Getter> get _getters => _configuration.getters; |
+ Map<Symbol, Setter> get _setters => _configuration.setters; |
+ Map<Type, Map<Symbol, Function>> get _staticMethods => |
+ _configuration.staticMethods; |
- GeneratedObjectAccessorService(StaticConfiguration configuration) |
- : _getters = configuration.getters, |
- _setters = configuration.setters, |
- _staticMethods = configuration.staticMethods; |
+ GeneratedObjectAccessorService(this._configuration); |
read(Object object, Symbol name) { |
var getter = _getters[name]; |
@@ -127,14 +159,15 @@ class GeneratedObjectAccessorService implements ObjectAccessorService { |
/// Implements [TypeInspectorService] using a static configuration. |
class GeneratedTypeInspectorService implements TypeInspectorService { |
- final Map<Type, Type> _parents; |
- final Map<Type, Map<Symbol, Declaration>> _declarations; |
- final bool _checkedMode; |
- |
- GeneratedTypeInspectorService(StaticConfiguration configuration) |
- : _parents = configuration.parents, |
- _declarations = configuration.declarations, |
- _checkedMode = configuration.checkedMode; |
+ final StaticConfiguration _configuration; |
+ |
+ Map<Type, Type> get _parents => _configuration.parents; |
+ Map<Type, Map<Symbol, Declaration>> get _declarations => |
+ _configuration.declarations; |
+ bool get _checkedMode => _configuration.checkedMode; |
+ |
+ GeneratedTypeInspectorService(this._configuration); |
+ |
bool isSubclassOf(Type type, Type supertype) { |
if (type == supertype || supertype == Object) return true; |
while (type != Object) { |
@@ -237,16 +270,11 @@ class GeneratedTypeInspectorService implements TypeInspectorService { |
/// Implements [SymbolConverterService] using a static configuration. |
class GeneratedSymbolConverterService implements SymbolConverterService { |
- Map<Symbol, String> _names; |
+ final StaticConfiguration _configuration; |
+ Map<Symbol, String> get _names => _configuration.names; |
+ Map<String, Symbol> get _symbols => _configuration._symbols; |
- /// A map from strings to symbols (the reverse of [names]). |
- final Map<String, Symbol> _symbols; |
- |
- GeneratedSymbolConverterService(StaticConfiguration configuration) |
- : _names = configuration.names, |
- _symbols = {} { |
- _names.forEach((k, v) { _symbols[v] = k; }); |
- } |
+ GeneratedSymbolConverterService(this._configuration); |
String symbolToName(Symbol symbol) => _names[symbol]; |
Symbol nameToSymbol(String name) => _symbols[name]; |