Index: pkg/smoke/lib/codegen/generator.dart |
diff --git a/pkg/smoke/lib/codegen/generator.dart b/pkg/smoke/lib/codegen/generator.dart |
index a313e5d0588c9c184b9cc113466e959c1f31b1d4..417e9e7f291739c9222d00108fef18a04c346850 100644 |
--- a/pkg/smoke/lib/codegen/generator.dart |
+++ b/pkg/smoke/lib/codegen/generator.dart |
@@ -22,8 +22,8 @@ import 'package:smoke/src/common.dart' show compareLists, compareMaps; |
/// * [writeImports] writes a list of imports directives, |
/// * [writeTopLevelDeclarations] writes additional declarations used to |
/// represent mixin classes by name in the generated code. |
-/// * [writeInitCall] writes the actual code that allocates the static |
-/// configuration. |
+/// * [writeStaticConfiguration] writes the actual code that allocates the |
+/// static configuration. |
/// |
/// You'd need to include all three in your generated code, since the |
/// initialization code refers to symbols that are only available from the |
@@ -133,7 +133,8 @@ class SmokeCodeGenerator { |
} |
/// Writes to [buffer] a line for each import that is needed by the generated |
- /// code. The code added by [writeInitCall] depends on these imports. |
+ /// code. The code added by [writeStaticConfiguration] depends on these |
+ /// imports. |
void writeImports(StringBuffer buffer) { |
DEFAULT_IMPORTS.forEach((i) => buffer.writeln(i)); |
_libraryPrefix.forEach((url, prefix) { |
@@ -142,8 +143,9 @@ class SmokeCodeGenerator { |
} |
/// Writes to [buffer] top-level declarations that are used by the code |
- /// generated in [writeInitCall]. These are typically declarations of empty |
- /// classes that are then used as placeholders for mixin superclasses. |
+ /// generated in [writeStaticConfiguration]. These are typically declarations |
+ /// of empty classes that are then used as placeholders for mixin |
+ /// superclasses. |
void writeTopLevelDeclarations(StringBuffer buffer) { |
var types = new Set() |
..addAll(_parents.keys) |
@@ -159,16 +161,19 @@ class SmokeCodeGenerator { |
} |
} |
- /// Appends to [buffer] code that will initialize smoke's static |
- /// configuration. For example, the code might be of the form: |
+ /// Appends to [buffer] code that will create smoke's static configuration. |
+ /// For example, the code might be of the form: |
/// |
- /// useGeneratedCode(new StaticConfiguration( |
+ /// new StaticConfiguration( |
/// getters: { |
/// #i: (o) => o.i, |
/// ... |
/// names: { |
/// #i: "i", |
- /// })); |
+ /// }) |
+ /// |
+ /// Callers of this code can assign this expression to a variable, and should |
+ /// generate code that invokes `useGeneratedCode`. |
/// |
/// The optional [indent] argument is used for formatting purposes. All |
/// entries in each map (getters, setters, names, declarations, parents) are |
@@ -177,8 +182,8 @@ class SmokeCodeGenerator { |
/// **Note**: this code assumes that imports from [writeImports] and top-level |
/// declarations from [writeTopLevelDeclarations] are included in the same |
/// library where this code will live. |
- void writeInitCall(StringBuffer buffer, [int indent = 2]) { |
- final spaces = new List.filled(indent, ' ').join(''); |
+ void writeStaticConfiguration(StringBuffer buffer, [int indent = 2]) { |
+ final spaces = ' ' * (indent + 4); |
var args = {}; |
if (_getters.isNotEmpty) { |
@@ -206,14 +211,14 @@ class SmokeCodeGenerator { |
..write(type.asCode(_libraryPrefix)) |
..write(': '); |
if (members.isEmpty) { |
- sb.write('const {}'); |
+ sb.write('{}'); |
} else { |
sb.write('{\n'); |
members.forEach((name, decl) { |
var decl = members[name].asCode(_libraryPrefix); |
- sb.write('$spaces ${_symbol(name)}: $decl,\n'); |
+ sb.write('${spaces} ${_symbol(name)}: $decl,\n'); |
}); |
- sb.write('$spaces }'); |
+ sb.write('${spaces} }'); |
} |
declarations.add(sb.toString()); |
}); |
@@ -228,13 +233,13 @@ class SmokeCodeGenerator { |
..write(className) |
..write(': '); |
if (members.isEmpty) { |
- sb.write('const {}'); |
+ sb.write('{}'); |
} else { |
sb.write('{\n'); |
for (var name in members) { |
- sb.write('$spaces ${_symbol(name)}: $className.$name,\n'); |
+ sb.write('${spaces} ${_symbol(name)}: $className.$name,\n'); |
} |
- sb.write('$spaces }'); |
+ sb.write('${spaces} }'); |
} |
methods.add(sb.toString()); |
}); |
@@ -245,20 +250,19 @@ class SmokeCodeGenerator { |
args['names'] = _names.map((n) => "${_symbol(n)}: r'$n'"); |
} |
- buffer..write(spaces) |
- ..writeln('useGeneratedCode(new StaticConfiguration(') |
- ..write('$spaces checkedMode: false'); |
+ buffer..writeln('new StaticConfiguration(') |
+ ..write('${spaces}checkedMode: false'); |
args.forEach((name, mapContents) { |
buffer.writeln(','); |
// TODO(sigmund): use const map when Type can be keys (dartbug.com/17123) |
- buffer.writeln('$spaces $name: {'); |
+ buffer.writeln('${spaces}$name: {'); |
for (var entry in mapContents) { |
- buffer.writeln('$spaces $entry,'); |
+ buffer.writeln('${spaces} $entry,'); |
} |
- buffer.write('$spaces }'); |
+ buffer.write('${spaces}}'); |
}); |
- buffer.writeln('));'); |
+ buffer.write(')'); |
} |
/// Adds a library that needs to be imported. |