| Index: lib/build/initializer_plugin.dart
 | 
| diff --git a/lib/build/initializer_plugin.dart b/lib/build/initializer_plugin.dart
 | 
| index 035161ea427d3ceb138ddb4d127bb4103bd1cbc8..f70e885b51c80c48a2c1b2360fa82e1f1b2bbd14 100644
 | 
| --- a/lib/build/initializer_plugin.dart
 | 
| +++ b/lib/build/initializer_plugin.dart
 | 
| @@ -92,8 +92,6 @@ class DefaultInitializerPlugin implements InitializerPlugin {
 | 
|      var constructor = annotation.constructorName == null
 | 
|          ? ''
 | 
|          : '.${annotation.constructorName}';
 | 
| -    // TODO(jakemac): Support more than raw values here
 | 
| -    // https://github.com/dart-lang/static_init/issues/5
 | 
|      var args = buildArgumentList(annotation.arguments, pluginData);
 | 
|      return 'const $metaPrefix.${clazz}$constructor$args';
 | 
|    }
 | 
| @@ -202,14 +200,8 @@ class DefaultInitializerPlugin implements InitializerPlugin {
 | 
|      var logger = pluginData.logger;
 | 
|      var libraryPrefixes = pluginData.libraryPrefixes;
 | 
|      var buffer = new StringBuffer();
 | 
| -    if (expression is StringLiteral) {
 | 
| -      var value = expression.stringValue;
 | 
| -      if (value == null) {
 | 
| -        logger.error('Only const strings are allowed in initializer '
 | 
| -            'expressions, found $expression');
 | 
| -      }
 | 
| -      value = value.replaceAll(r'\', r'\\').replaceAll(r"'", r"\'");
 | 
| -      buffer.write("'$value'");
 | 
| +    if (expression is StringLiteral && expression.stringValue != null) {
 | 
| +      buffer.write(_stringValue(expression.stringValue));
 | 
|      } else if (expression is BooleanLiteral ||
 | 
|          expression is DoubleLiteral ||
 | 
|          expression is IntegerLiteral ||
 | 
| @@ -239,7 +231,7 @@ class DefaultInitializerPlugin implements InitializerPlugin {
 | 
|        var element = expression.bestElement;
 | 
|        if (element == null || !element.isPublic) {
 | 
|          logger.error('Private constants are not supported in intializer '
 | 
| -            'constructors, found $element.');
 | 
| +        'constructors, found $element.');
 | 
|        }
 | 
|        libraryPrefixes.putIfAbsent(
 | 
|            element.library, () => 'i${libraryPrefixes.length}');
 | 
| @@ -256,10 +248,38 @@ class DefaultInitializerPlugin implements InitializerPlugin {
 | 
|        } else {
 | 
|          logger.error('Unsupported argument to initializer constructor.');
 | 
|        }
 | 
| +    } else if (expression is PropertyAccess) {
 | 
| +      buffer.write(buildExpression(expression.target, pluginData));
 | 
| +      buffer.write('.${expression.propertyName}');
 | 
| +    } else if (expression is InstanceCreationExpression) {
 | 
| +      logger.error('Unsupported expression in initializer, found $expression. '
 | 
| +          'Instance creation expressions are not supported (yet). Instead, '
 | 
| +          'please assign it to a const variable and use that instead.');
 | 
|      } else {
 | 
| -      logger.error('Only literals and identifiers are allowed for initializer '
 | 
| -          'expressions, found $expression.');
 | 
| +      // Try to evaluate the constant and use that.
 | 
| +      var result = pluginData.resolver.evaluateConstant(
 | 
| +          pluginData.initializer.targetElement.library, expression);
 | 
| +      if (!result.isValid) {
 | 
| +        logger.error('Invalid expression in initializer, found $expression. '
 | 
| +            'And got the following errors: ${result.errors}.');
 | 
| +      }
 | 
| +      var value = result.value.value;
 | 
| +      if (value == null) {
 | 
| +        logger.error('Unsupported expression in initializer, found '
 | 
| +            '$expression. Please file a bug at '
 | 
| +            'https://github.com/dart-lang/initialize/issues');
 | 
| +      }
 | 
| +
 | 
| +      if (value is String) value = _stringValue(value);
 | 
| +      buffer.write(value);
 | 
|      }
 | 
|      return buffer.toString();
 | 
|    }
 | 
| +
 | 
| +  // Returns an expression for a string value. Wraps it in single quotes and
 | 
| +  // escapes existing single quotes and escapes.
 | 
| +  _stringValue(String value) {
 | 
| +    value = value.replaceAll(r'\', r'\\').replaceAll(r"'", r"\'");
 | 
| +    return "'$value'";
 | 
| +  }
 | 
|  }
 | 
| 
 |