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; |
+ } |
} |