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

Unified Diff: lib/src/common/declarations.dart

Issue 1290643006: First cut at behaviors. This just implements the lifecycle methodsportion. We may get the rest for … (Closed) Base URL: git@github.com:dart-lang/polymer-dart.git@master
Patch Set: Created 5 years, 4 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
Index: lib/src/common/declarations.dart
diff --git a/lib/src/common/declarations.dart b/lib/src/common/declarations.dart
index 121bd8ab38e6961374ffa903acda94964f28c7a1..9a22249e1f535b3a67f795316992c7122f3481ef 100644
--- a/lib/src/common/declarations.dart
+++ b/lib/src/common/declarations.dart
@@ -1,20 +1,32 @@
library polymer.src.common.declarations;
import 'package:reflectable/reflectable.dart';
+import '../../polymer_micro.dart';
-typedef bool _WhereFn(String name, DeclarationMirror declaration);
+typedef bool _DeclarationWhereFn(String name, DeclarationMirror declaration);
Siggi Cherem (dart-lang) 2015/08/12 22:43:15 naming nit: maybe use Function or Callback instead
jakemac 2015/08/13 17:50:45 Opted for the inline type annotation, I forgot you
+typedef bool _ClassWhereFn(ClassMirror mirror);
-Map<String, DeclarationMirror> declarationsFor(
- Type type, Reflectable reflectionClass, {_WhereFn where}) {
- var typeMirror;
- try {
- typeMirror = reflectionClass.reflectType(type);
- } catch (e) {
- throw 'type $type is missing the $reflectionClass annotation';
+List<ClassMirror> mixinsFor(
+ Type type, Reflectable reflectionClass, {_ClassWhereFn where}) {
+ var typeMirror = _reflect(type, reflectionClass);
+ var mixins = [];
+ var superClass = _getSuper(typeMirror);
+ while(superClass != null && superClass.reflectedType != PolymerElement) {
Siggi Cherem (dart-lang) 2015/08/12 22:43:15 run formatter
jakemac 2015/08/13 17:50:45 Done.
+ var mixin = superClass.mixin;
+ if (mixin != superClass && (where == null || where(mixin))) {
+ mixins.add(mixin);
+ }
+ superClass = _getSuper(superClass);
}
+ return mixins.reversed.toList();
+}
+
+Map<String, DeclarationMirror> declarationsFor(
+ Type type, Reflectable reflectionClass, {_DeclarationWhereFn where}) {
+ var typeMirror = _reflect(type, reflectionClass);
var declarations = {};
var superClass = typeMirror;
- while (superClass != null && superClass.reflectedType != Object) {
+ while (superClass != null && superClass.reflectedType != PolymerElement) {
Siggi Cherem (dart-lang) 2015/08/12 22:43:15 just to double check - do we ever need to fetch so
jakemac 2015/08/13 17:50:45 Its fine to stop at PolymerElement, although I act
superClass.declarations.forEach((name, declaration) {
if (declarations.containsKey(name)) return;
if (where != null && !where(name, declaration)) return;
@@ -25,6 +37,14 @@ Map<String, DeclarationMirror> declarationsFor(
return declarations;
}
+ClassMirror _reflect(Type type, Reflectable reflectionClass) {
+ try {
+ return reflectionClass.reflectType(type);
+ } catch (e) {
+ throw 'type $type is missing the $reflectionClass annotation';
+ }
+}
+
ClassMirror _getSuper(ClassMirror clazz) {
// Currently throws post-transform if superclass isn't annotated with a
// [Reflectable] class.

Powered by Google App Engine
This is Rietveld 408576698