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

Unified Diff: dart/sdk/lib/_internal/lib/js_mirrors.dart

Issue 17376005: Correctly reflect on intercepted classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Take two Created 7 years, 6 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 | « dart/sdk/lib/_internal/lib/js_helper.dart ('k') | dart/tests/lib/lib.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/sdk/lib/_internal/lib/js_mirrors.dart
diff --git a/dart/sdk/lib/_internal/lib/js_mirrors.dart b/dart/sdk/lib/_internal/lib/js_mirrors.dart
index 59b83553f26b2610485634e1e7994d86586d587a..59d40a44ff191ca7df42424868b573be5d3e6525 100644
--- a/dart/sdk/lib/_internal/lib/js_mirrors.dart
+++ b/dart/sdk/lib/_internal/lib/js_mirrors.dart
@@ -242,12 +242,16 @@ ClassMirror reflectType(Type key) {
ClassMirror reflectClassByName(Symbol symbol) {
disableTreeShaking();
String className = n(symbol);
- var constructor = Primitives.getConstructor(className);
- if (constructor == null) {
+ var constructorOrInterceptor =
+ Primitives.getConstructorOrInterceptor(className);
+ if (constructorOrInterceptor == null) {
ngeoffray 2013/06/18 11:17:27 Is the code below still relevant?
ahe 2013/06/18 11:19:56 Yes. For native classes.
// Probably an intercepted class.
// TODO(ahe): How to handle intercepted classes?
throw new UnsupportedError('Cannot find class for: $className');
}
+ var constructor = (constructorOrInterceptor is Interceptor)
+ ? JS('', '#.constructor', constructorOrInterceptor)
+ : constructorOrInterceptor;
var descriptor = JS('', '#["@"]', constructor);
var fields;
var fieldsMetadata;
@@ -266,10 +270,11 @@ ClassMirror reflectClassByName(Symbol symbol) {
fields = '';
}
}
- var mirror = classMirrors[constructor];
+ var mirror = classMirrors[constructorOrInterceptor];
if (mirror == null) {
- mirror = new JsClassMirror(symbol, constructor, fields, fieldsMetadata);
- classMirrors[constructor] = mirror;
+ mirror = new JsClassMirror(
+ symbol, constructorOrInterceptor, fields, fieldsMetadata);
+ classMirrors[constructorOrInterceptor] = mirror;
}
return mirror;
}
@@ -352,7 +357,7 @@ class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
class JsClassMirror extends JsTypeMirror with JsObjectMirror
implements ClassMirror {
- final _jsConstructor;
+ final _jsConstructorOrInterceptor;
final String _fields;
final List _fieldsMetadata;
List _metadata;
@@ -363,7 +368,7 @@ class JsClassMirror extends JsTypeMirror with JsObjectMirror
JsLibraryMirror _owner;
JsClassMirror(Symbol simpleName,
- this._jsConstructor,
+ this._jsConstructorOrInterceptor,
this._fields,
this._fieldsMetadata)
: super(simpleName);
@@ -372,6 +377,14 @@ class JsClassMirror extends JsTypeMirror with JsObjectMirror
Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
+ get _jsConstructor {
+ if (_jsConstructorOrInterceptor is Interceptor) {
+ return JS('', '#.constructor', _jsConstructorOrInterceptor);
+ } else {
+ return _jsConstructorOrInterceptor;
+ }
+ }
+
List<JsMethodMirror> get _methods {
if (_cachedMethods != null) return _cachedMethods;
var prototype = JS('', '#.prototype', _jsConstructor);
@@ -510,7 +523,7 @@ class JsClassMirror extends JsTypeMirror with JsObjectMirror
DeclarationMirror get owner {
if (_owner == null) {
- if (_jsConstructor is Interceptor) {
+ if (_jsConstructorOrInterceptor is Interceptor) {
_owner = reflectType(Object).owner;
} else {
for (var list in JsMirrorSystem.librariesByName.values) {
« no previous file with comments | « dart/sdk/lib/_internal/lib/js_helper.dart ('k') | dart/tests/lib/lib.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698