| Index: pkg/polymer/lib/src/loader.dart
|
| diff --git a/pkg/polymer/lib/src/loader.dart b/pkg/polymer/lib/src/loader.dart
|
| index 34f45671e82816f7872ee3c447db63d5f19b1329..b8196f3467c06ed9f0e51823b9138cbc982bbec6 100644
|
| --- a/pkg/polymer/lib/src/loader.dart
|
| +++ b/pkg/polymer/lib/src/loader.dart
|
| @@ -7,7 +7,9 @@ part of polymer;
|
| /** Annotation used to automatically register polymer elements. */
|
| class CustomTag {
|
| final String tagName;
|
| - const CustomTag(this.tagName);
|
| + final Type type;
|
| + // TODO(13997): Remove the type parameter.
|
| + const CustomTag(this.tagName, {this.type});
|
| }
|
|
|
| /**
|
| @@ -36,7 +38,7 @@ void initPolymer(List<String> libraries, [String srcUrl]) {
|
|
|
| // TODO(jmesserly): mdv should use initMdv instead of mdv.initialize.
|
| mdv.initialize();
|
| - registerCustomElement('polymer-element', () => new PolymerDeclaration());
|
| + document.register(PolymerDeclaration._TAG, PolymerDeclaration);
|
|
|
| for (var lib in libraries) {
|
| _loadLibrary(lib, srcUrl);
|
| @@ -90,7 +92,7 @@ void _loadLibrary(String uriString, [String srcUrl]) {
|
| for (var m in c.metadata) {
|
| var meta = m.reflectee;
|
| if (meta is CustomTag) {
|
| - Polymer._registerClassMirror(meta.tagName, c);
|
| + Polymer.register(meta.tagName, _getReflectedTypeWorkaround(c));
|
| }
|
| }
|
|
|
| @@ -103,6 +105,26 @@ void _loadLibrary(String uriString, [String srcUrl]) {
|
| }
|
| }
|
|
|
| +// 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;
|
| + }
|
| +}();
|
| +
|
| void _maybeInvoke(ObjectMirror obj, MethodMirror method) {
|
| var annotationFound = false;
|
| for (var meta in method.metadata) {
|
|
|