fix up value retrieval
diff --git a/lib/build/initializer_plugin.dart b/lib/build/initializer_plugin.dart
index ba3099a..efca427 100644
--- a/lib/build/initializer_plugin.dart
+++ b/lib/build/initializer_plugin.dart
@@ -4,6 +4,7 @@
library initialize.build.initializer_plugin;
import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/constant.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:barback/barback.dart';
import 'package:code_transformers/resolver.dart';
@@ -58,10 +59,8 @@
/// [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) {
@@ -275,16 +274,7 @@
return null;
}
- var value = result.value.toStringValue();
- if (value != null) value = _stringValue(value);
-
- if (value == null) value = result.value.toBoolValue();
- if (value == null) value = result.value.toIntValue();
- if (value == null) value = result.value.toDoubleValue();
- if (value == null) value = result.value.toListValue();
- if (value == null) value = result.value.toMapValue();
- if (value == null) value = result.value.toSymbolValue();
- if (value == null) value = result.value.toTypeValue();
+ var value = _getValue(result.value);
if (value == null) {
logger.error('Unsupported expression in initializer, found '
@@ -292,6 +282,8 @@
'https://github.com/dart-lang/initialize/issues');
}
+ if (value is String) value = _stringValue(value);
+
return value;
}
@@ -301,4 +293,31 @@
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;
+ }
}