Chromium Code Reviews| Index: pkg/polymer/lib/src/reflected_type.dart |
| diff --git a/pkg/polymer/lib/src/reflected_type.dart b/pkg/polymer/lib/src/reflected_type.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ad11ffb61f0af33c504f97c7431c71d3470e6c1a |
| --- /dev/null |
| +++ b/pkg/polymer/lib/src/reflected_type.dart |
| @@ -0,0 +1,31 @@ |
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +library polymer.src.reflected_type; |
| + |
| +// These are used by _getReflectedTypeWorkaround, see http://dartbug.com/12607 |
| +@MirrorsUsed(targets: |
| + const ['_js_helper.createRuntimeType', 'dart._js_mirrors.JsClassMirror'], |
| + override: 'polymer.src.reflected_type') |
|
Siggi Cherem (dart-lang)
2013/10/15 21:52:18
ditto
Jennifer Messerly
2013/10/15 22:03:29
ditto :)
|
| +import 'dart:mirrors'; |
| + |
| +// Horrible hack to work around: http://dartbug.com/12607 |
| +Type getReflectedTypeWorkaround(ClassMirror cls) { |
| + // On Dart VM, just return reflectedType. |
| + if (1.0 is! int) return cls.reflectedType; |
| + |
| + var mangledName = reflect(cls).getField(_mangledNameField).reflectee; |
| + Type type = _jsHelper.invoke(#createRuntimeType, [mangledName]).reflectee; |
| + return type; |
| +} |
| + |
| +final LibraryMirror _jsHelper = |
| + currentMirrorSystem().libraries[Uri.parse('dart:_js_helper')]; |
| + |
| +final Symbol _mangledNameField = () { |
| + var jsClassMirrorMirror = reflect(reflectClass(ClassMirror)).type; |
| + for (var name in jsClassMirrorMirror.variables.keys) { |
| + if (MirrorSystem.getName(name) == '_mangledName') return name; |
| + } |
| +}(); |