| Index: packages/initialize/lib/build/initializer_plugin.dart
|
| diff --git a/packages/initialize/lib/build/initializer_plugin.dart b/packages/initialize/lib/build/initializer_plugin.dart
|
| index 8822dc4f7e397b7daa741de704f023c25c19ea0a..f049df0aa51b2f7542a6a4de154361d4a568d927 100644
|
| --- a/packages/initialize/lib/build/initializer_plugin.dart
|
| +++ b/packages/initialize/lib/build/initializer_plugin.dart
|
| @@ -3,8 +3,9 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
| library initialize.build.initializer_plugin;
|
|
|
| -import 'package:analyzer/src/generated/ast.dart';
|
| -import 'package:analyzer/src/generated/element.dart';
|
| +import 'package:analyzer/dart/ast/ast.dart';
|
| +import 'package:analyzer/dart/element/element.dart';
|
| +import 'package:analyzer/src/generated/constant.dart';
|
| import 'package:barback/barback.dart';
|
| import 'package:code_transformers/resolver.dart';
|
| import 'package:initialize/transformer.dart';
|
| @@ -58,10 +59,8 @@ class DefaultInitializerPlugin implements InitializerPlugin {
|
| /// [ElementAnnotation] that was found.
|
| String buildMeta(InitializerPluginData pluginData) {
|
| var logger = pluginData.logger;
|
| - var element = pluginData.initializer.targetElement;
|
| var elementAnnotation = pluginData.initializer.annotationElement;
|
| var elementAnnotationElement = elementAnnotation.element;
|
| - var libraryPrefixes = pluginData.libraryPrefixes;
|
| if (elementAnnotationElement is ConstructorElement) {
|
| return buildConstructorMeta(elementAnnotation, pluginData);
|
| } else if (elementAnnotationElement is PropertyAccessorElement) {
|
| @@ -264,7 +263,8 @@ class DefaultInitializerPlugin implements InitializerPlugin {
|
| return buffer.toString();
|
| }
|
|
|
| - _evaluateExpression(Expression expression, InitializerPluginData pluginData) {
|
| + _evaluateExpression(
|
| + Expression expression, InitializerPluginData pluginData) {
|
| var logger = pluginData.logger;
|
| var result = pluginData.resolver.evaluateConstant(
|
| pluginData.initializer.targetElement.library, expression);
|
| @@ -273,15 +273,17 @@ class DefaultInitializerPlugin implements InitializerPlugin {
|
| 'And got the following errors: ${result.errors}.');
|
| return null;
|
| }
|
| - var value = result.value.value;
|
| +
|
| + var value = _getValue(result.value);
|
| +
|
| if (value == null) {
|
| logger.error('Unsupported expression in initializer, found '
|
| '$expression. Please file a bug at '
|
| 'https://github.com/dart-lang/initialize/issues');
|
| - return null;
|
| }
|
|
|
| if (value is String) value = _stringValue(value);
|
| +
|
| return value;
|
| }
|
|
|
| @@ -291,4 +293,31 @@ class DefaultInitializerPlugin implements InitializerPlugin {
|
| value = value.replaceAll(r'\', r'\\').replaceAll(r"'", r"\'");
|
| return "'$value'";
|
| }
|
| +
|
| + // Gets an actual value for a [DartObject].
|
| + _getValue(DartObject object) {
|
| + if (object == null) return null;
|
| + var value = object.toBoolValue() ??
|
| + object.toDoubleValue() ??
|
| + object.toIntValue() ??
|
| + object.toStringValue();
|
| + if (value == null) {
|
| + value = object.toListValue();
|
| + if (value != null) {
|
| + return value.map((DartObject element) => _getValue(element)).toList();
|
| + }
|
| + Map<DartObject, DartObject> map = object.toMapValue();
|
| + if (map != null) {
|
| + Map result = {};
|
| + map.forEach((DartObject key, DartObject value) {
|
| + dynamic mappedKey = _getValue(key);
|
| + if (mappedKey != null) {
|
| + result[mappedKey] = _getValue(value);
|
| + }
|
| + });
|
| + return result;
|
| + }
|
| + }
|
| + return value;
|
| + }
|
| }
|
|
|