Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(640)

Unified Diff: pkg/smoke/lib/static.dart

Issue 204143002: Changes in smoke in preparation of polymer's codegen: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/smoke/lib/src/common.dart ('k') | pkg/smoke/lib/static_debug.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/smoke/lib/static.dart
diff --git a/pkg/smoke/lib/static.dart b/pkg/smoke/lib/static.dart
index 3c8d59cc7f4adc82e49a2a6806cec746047aaefe..92339739638b153d3e962311402f519710b814de 100644
--- a/pkg/smoke/lib/static.dart
+++ b/pkg/smoke/lib/static.dart
@@ -15,8 +15,6 @@ import 'src/common.dart';
typedef T Getter<T>(object);
typedef void Setter<T>(object, value);
-StaticConfiguration _configuration;
-
class StaticConfiguration {
/// Maps symbol to a function that reads that symbol of an object. For
/// instance, `#i: (o) => o.i`.
@@ -35,9 +33,6 @@ 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;
@@ -45,32 +40,35 @@ class StaticConfiguration {
StaticConfiguration({
this.getters: const {}, this.setters: const {}, this.parents: const {},
this.declarations: const {}, this.names: const {},
- this.checkedMode: true})
- : this.symbols = {} {
- names.forEach((k, v) { symbols[v] = k; });
- }
+ this.checkedMode: true});
}
/// Set up the smoke package to use a static implementation based on the given
/// [configuration].
useGeneratedCode(StaticConfiguration configuration) {
- _configuration = configuration;
- configure(new _GeneratedObjectAccessorService(),
- new _GeneratedTypeInspectorService(),
- new _GeneratedSymbolConverterService());
+ configure(new GeneratedObjectAccessorService(configuration),
+ new GeneratedTypeInspectorService(configuration),
+ new GeneratedSymbolConverterService(configuration));
}
/// Implements [ObjectAccessorService] using a static configuration.
-class _GeneratedObjectAccessorService implements ObjectAccessorService {
+class GeneratedObjectAccessorService implements ObjectAccessorService {
+ final Map<Symbol, Getter> _getters;
+ final Map<Symbol, Setter> _setters;
+
+ GeneratedObjectAccessorService(StaticConfiguration configuration)
+ : _getters = configuration.getters,
+ _setters = configuration.setters;
+
read(Object object, Symbol name) {
- var getter = _configuration.getters[name];
+ var getter = _getters[name];
if (getter == null) {
throw new MissingCodeException('getter "$name" in $object');
}
return getter(object);
}
void write(Object object, Symbol name, value) {
- var setter = _configuration.setters[name];
+ var setter = _setters[name];
if (setter == null) {
throw new MissingCodeException('setter "$name" in $object');
}
@@ -81,7 +79,7 @@ class _GeneratedObjectAccessorService implements ObjectAccessorService {
var method;
if (object is Type) {
} else {
- var getter = _configuration.getters[name];
+ var getter = _getters[name];
method = getter == null ? null : getter(object);
}
if (method == null) {
@@ -119,14 +117,22 @@ class _GeneratedObjectAccessorService implements ObjectAccessorService {
}
/// Implements [TypeInspectorService] using a static configuration.
-class _GeneratedTypeInspectorService implements TypeInspectorService {
+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;
bool isSubclassOf(Type type, Type supertype) {
if (type == supertype || supertype == Object) return true;
while (type != Object) {
- var parentType = _configuration.parents[type];
+ var parentType = _parents[type];
if (parentType == supertype) return true;
if (parentType == null) {
- if (!_configuration.checkedMode) return false;
+ if (!_checkedMode) return false;
throw new MissingCodeException('superclass of "$type" ($parentType)');
}
type = parentType;
@@ -152,9 +158,9 @@ class _GeneratedTypeInspectorService implements TypeInspectorService {
}
bool hasStaticMethod(Type type, Symbol name) {
- final map = _configuration.declarations[type];
+ final map = _declarations[type];
if (map == null) {
- if (!_configuration.checkedMode) return false;
+ if (!_checkedMode) return false;
throw new MissingCodeException('declarations for $type');
}
final decl = map[name];
@@ -164,7 +170,7 @@ class _GeneratedTypeInspectorService implements TypeInspectorService {
Declaration getDeclaration(Type type, Symbol name) {
var decl = _findDeclaration(type, name);
if (decl == null) {
- if (!_configuration.checkedMode) return null;
+ if (!_checkedMode) return null;
throw new MissingCodeException('declaration for $type.$name');
}
return decl;
@@ -173,18 +179,18 @@ class _GeneratedTypeInspectorService implements TypeInspectorService {
List<Declaration> query(Type type, QueryOptions options) {
var result = [];
if (options.includeInherited) {
- var superclass = _configuration.parents[type];
+ var superclass = _parents[type];
if (superclass == null) {
- if (_configuration.checkedMode) {
+ if (_checkedMode) {
throw new MissingCodeException('superclass of "$type"');
}
} else if (superclass != options.includeUpTo) {
result = query(superclass, options);
}
}
- var map = _configuration.declarations[type];
+ var map = _declarations[type];
if (map == null) {
- if (!_configuration.checkedMode) return result;
+ if (!_checkedMode) return result;
throw new MissingCodeException('declarations for $type');
}
for (var decl in map.values) {
@@ -192,6 +198,7 @@ class _GeneratedTypeInspectorService implements TypeInspectorService {
if (!options.includeProperties && decl.isProperty) continue;
if (options.excludeFinal && decl.isFinal) continue;
if (!options.includeMethods && decl.isMethod) continue;
+ if (options.matches != null && !options.matches(decl.name)) continue;
if (options.withAnnotations != null &&
!matchesAnnotation(decl.annotations, options.withAnnotations)) {
continue;
@@ -200,12 +207,40 @@ class _GeneratedTypeInspectorService implements TypeInspectorService {
}
return result;
}
+
+ Declaration _findDeclaration(Type type, Symbol name) {
+ while (type != Object) {
+ final declarations = _declarations[type];
+ if (declarations != null) {
+ final declaration = declarations[name];
+ if (declaration != null) return declaration;
+ }
+ var parentType = _parents[type];
+ if (parentType == null) {
+ if (!_checkedMode) return null;
+ throw new MissingCodeException('superclass of "$type"');
+ }
+ type = parentType;
+ }
+ return null;
+ }
}
/// Implements [SymbolConverterService] using a static configuration.
-class _GeneratedSymbolConverterService implements SymbolConverterService {
- String symbolToName(Symbol symbol) => _configuration.names[symbol];
- Symbol nameToSymbol(String name) => _configuration.symbols[name];
+class GeneratedSymbolConverterService implements SymbolConverterService {
+ Map<Symbol, String> _names;
+
+ /// 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; });
+ }
+
+ String symbolToName(Symbol symbol) => _names[symbol];
+ Symbol nameToSymbol(String name) => _symbols[name];
}
@@ -218,20 +253,3 @@ class MissingCodeException implements Exception {
String toString() => 'Missing $description. '
'Code generation for the smoke package seems incomplete.';
}
-
-Declaration _findDeclaration(Type type, Symbol name) {
- while (type != Object) {
- final declarations = _configuration.declarations[type];
- if (declarations != null) {
- final declaration = declarations[name];
- if (declaration != null) return declaration;
- }
- var parentType = _configuration.parents[type];
- if (parentType == null) {
- if (!_configuration.checkedMode) return null;
- throw new MissingCodeException('superclass of "$type"');
- }
- type = parentType;
- }
- return null;
-}
« no previous file with comments | « pkg/smoke/lib/src/common.dart ('k') | pkg/smoke/lib/static_debug.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698