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

Unified Diff: lib/src/common/polymer_descriptor.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/polymer_descriptor.dart
diff --git a/lib/src/common/polymer_descriptor.dart b/lib/src/common/polymer_descriptor.dart
index f4457caeb8275be5c79b115b2f376c15e55a6d99..55cbbd78d0101141c4739a84e4c10287d65c8741 100644
--- a/lib/src/common/polymer_descriptor.dart
+++ b/lib/src/common/polymer_descriptor.dart
@@ -5,6 +5,7 @@ library polymer.src.micro.properties;
import 'dart:js';
import 'package:reflectable/reflectable.dart';
+import 'behavior.dart';
import 'declarations.dart';
import 'js_proxy.dart';
import 'property.dart';
@@ -20,9 +21,10 @@ JsObject createPolymerDescriptor(Type type, PolymerRegister annotation) {
'is': annotation.tagName,
'extends': annotation.extendsTag,
'hostAttributes': annotation.hostAttributes,
- 'properties': buildPropertiesObject(type),
+ 'properties': _buildPropertiesObject(type),
'observers': _buildObserversObject(type),
'listeners': _buildListenersObject(type),
+ 'behaviors': _buildBehaviorsList(type),
'__isPolymerDart__': true,
};
_setupLifecycleMethods(type, object);
@@ -44,7 +46,7 @@ Map<String, DeclarationMirror> propertyDeclarationsFor(Type type) {
}
// Set up the `properties` descriptor object.
-Map buildPropertiesObject(Type type) {
+Map _buildPropertiesObject(Type type) {
var declarations = propertyDeclarationsFor(type);
var properties = {};
declarations.forEach((String name, DeclarationMirror declaration) {
@@ -96,8 +98,14 @@ Map _buildListenersObject(Type type) {
return listeners;
}
-const _lifecycleMethods = const ['ready', 'attached', 'detached',
- 'attributeChanged', 'serialize', 'deserialize'];
+const _lifecycleMethods = const [
+ 'ready',
+ 'attached',
+ 'detached',
+ 'attributeChanged',
+ 'serialize',
+ 'deserialize'
+];
/// All lifecycle methods for a type.
Map<String, DeclarationMirror> _lifecycleMethodsFor(Type type) {
@@ -111,15 +119,13 @@ Map<String, DeclarationMirror> _lifecycleMethodsFor(Type type) {
void _setupLifecycleMethods(Type type, Map descriptor) {
var declarations = _lifecycleMethodsFor(type);
declarations.forEach((String name, DeclarationMirror declaration) {
- descriptor[name] = _polymerDart.callMethod(
- 'invokeDartFactory',
- [
- (dartInstance, arguments) {
- var newArgs = arguments.map((arg) => dartValue(arg)).toList();
- var instanceMirror = jsProxyReflectable.reflect(dartInstance);
- return instanceMirror.invoke(name, newArgs);
- }
- ]);
+ descriptor[name] = _polymerDart.callMethod('invokeDartFactory', [
+ (dartInstance, arguments) {
+ var newArgs = arguments.map((arg) => dartValue(arg)).toList();
+ var instanceMirror = jsProxyReflectable.reflect(dartInstance);
+ return instanceMirror.invoke(name, newArgs);
+ }
+ ]);
});
}
@@ -137,15 +143,13 @@ void _setupEventHandlerMethods(Type type, Map descriptor) {
declarations.forEach((String name, DeclarationMirror declaration) {
// TODO(jakemac): Support functions with more than 6 args? We should at
// least throw a better error in that case.
- descriptor[name] = _polymerDart.callMethod(
- 'invokeDartFactory',
- [
- (dartInstance, arguments) {
- var newArgs = arguments.map((arg) => dartValue(arg)).toList();
- var instanceMirror = jsProxyReflectable.reflect(dartInstance);
- return instanceMirror.invoke(name, newArgs);
- }
- ]);
+ descriptor[name] = _polymerDart.callMethod('invokeDartFactory', [
+ (dartInstance, arguments) {
+ var newArgs = arguments.map((arg) => dartValue(arg)).toList();
+ var instanceMirror = jsProxyReflectable.reflect(dartInstance);
+ return instanceMirror.invoke(name, newArgs);
+ }
+ ]);
});
}
@@ -187,6 +191,21 @@ Map _getPropertyInfoForType(Type type, DeclarationMirror declaration) {
return property;
}
+/// List of [JsObjects]s representing the behaviors for an element.
+List<JsObject> _buildBehaviorsList(Type type) {
+ var behaviors = <JsObject>[];
+
+ var mixins = mixinsFor(type, jsProxyReflectable);
+ for (ClassMirror mixin in mixins) {
+ BehaviorAnnotation behavior = mixin.metadata
+ .firstWhere((meta) => meta is BehaviorAnnotation, orElse: () => null);
+ if (behavior == null) continue;
+ behaviors.add(behavior.getBehavior(mixin.reflectedType));
+ }
+
+ return behaviors;
+}
+
/// Given a [Type] return the [JsObject] representation of that type.
/// TODO(jakemac): Make this more robust, specifically around Lists.
dynamic jsType(Type type) {

Powered by Google App Engine
This is Rietveld 408576698