| Index: pkg/smoke/lib/mirrors.dart
|
| diff --git a/pkg/smoke/lib/mirrors.dart b/pkg/smoke/lib/mirrors.dart
|
| index d30baa2ef90df4df998d6cbf1fedc2faf314a9aa..c49c536adcffe6dd6bb2ce6ee66739088261aced 100644
|
| --- a/pkg/smoke/lib/mirrors.dart
|
| +++ b/pkg/smoke/lib/mirrors.dart
|
| @@ -218,7 +218,18 @@ Symbol _setterName(Symbol getter) =>
|
|
|
| ClassMirror _safeSuperclass(ClassMirror type) {
|
| try {
|
| - return type.superclass;
|
| + var t = type.superclass;
|
| + // TODO(sigmund): workaround for darbug.com/17779.
|
| + // Interceptor is leaked by dart2js. It has the same methods as Object
|
| + // (including noSuchMethod), and our code above assumes that it doesn't
|
| + // exist. Most queries exclude Object, so they should exclude Interceptor
|
| + // too. We don't check for t.simpleName == #Interceptor because depending on
|
| + // dart2js optimizations it may be #Interceptor or #num/Interceptor.
|
| + // Checking for a private library seems to reliably filter this out.
|
| + if (t != null && t.owner != null && t.owner.isPrivate) {
|
| + t = _objectType;
|
| + }
|
| + return t;
|
| } on UnsupportedError catch (e) {
|
| // Note: dart2js throws UnsupportedError when the type is not reflectable.
|
| return _objectType;
|
|
|