feat(dart/transform): Add debug transform parameters

Add two transform parameters to aid in debugging the transformer
- `mirror_mode`, with values {`debug`, `none`, and `verbose`}
- `init_reflector`, with values {`true`, `false`}

`mirror_mode`:
- `debug`: Allow reflective access, but log a message if it is used
- `none`: Remove reflective access, `throw` if it is used. Default value
- `verbose`: Allow reflective access, log a stack trace if it is used

`init_reflector`: Whether to generate calls to our generated
`initReflector` code.

These will be useful to reveal areas where the transformer is not generating
appropriate code and to quickly see where reflective accesses occur.

When the pub mode is `transform_dynamic`, we run in MirrorMode.debug
with `init_reflector = false`. This is used for testing purposes.
This commit is contained in:
Tim Blasi
2015-04-17 11:12:35 -07:00
parent 5b4eb0c6d7
commit 77b31ab42f
22 changed files with 343 additions and 22 deletions

View File

@ -0,0 +1,10 @@
library angular2.transform.common.mirror_mode;
/// Modes for mirror use.
/// `none` is the default value and signifies that mirror use should be
/// removed.
/// `debug` allows the use of mirrors and logs a notice whenever they are
/// accessed.
/// `verbose` allows the use of mirrors and logs a stack trace whenever they
/// are accessed.
enum MirrorMode { debug, none, verbose }

View File

@ -2,10 +2,10 @@ library angular2.transform.common.names;
const SETUP_METHOD_NAME = 'initReflector';
const REFLECTOR_VAR_NAME = 'reflector';
const TRANSFORM_DYNAMIC_MODE = 'transform_dynamic';
const DEPS_EXTENSION = '.ng_deps.dart';
const REFLECTION_CAPABILITIES_NAME = 'ReflectionCapabilities';
const REGISTER_TYPE_METHOD_NAME = 'registerType';
const REGISTER_GETTERS_METHOD_NAME = 'registerGetters';
const REGISTER_SETTERS_METHOD_NAME = 'registerSetters';
const REGISTER_METHODS_METHOD_NAME = 'registerMethods';
const TRANSFORM_MODE = 'ngstatic';

View File

@ -1,5 +1,7 @@
library angular2.transform.common.options;
import 'mirror_mode.dart';
const ENTRY_POINT_PARAM = 'entry_points';
const REFLECTION_ENTRY_POINT_PARAM = 'reflection_entry_points';
@ -15,15 +17,22 @@ class TransformerOptions {
/// The `BarbackMode#name` we are running in.
final String modeName;
TransformerOptions._internal(
this.entryPoints, this.reflectionEntryPoints, this.modeName);
/// The [MirrorMode] to use for the transformation.
final MirrorMode mirrorMode;
/// Whether to generate calls to our generated `initReflector` code
final bool initReflector;
TransformerOptions._internal(this.entryPoints, this.reflectionEntryPoints,
this.modeName, this.mirrorMode, this.initReflector);
factory TransformerOptions(List<String> entryPoints,
{List<String> reflectionEntryPoints, String modeName: 'release'}) {
{List<String> reflectionEntryPoints, String modeName: 'release',
MirrorMode mirrorMode: MirrorMode.none, bool initReflector: true}) {
if (reflectionEntryPoints == null || reflectionEntryPoints.isEmpty) {
reflectionEntryPoints = entryPoints;
}
return new TransformerOptions._internal(
entryPoints, reflectionEntryPoints, modeName);
return new TransformerOptions._internal(entryPoints, reflectionEntryPoints,
modeName, mirrorMode, initReflector);
}
}

View File

@ -1,6 +1,7 @@
library angular2.transform.common.options_reader;
import 'package:barback/barback.dart';
import 'mirror_mode.dart';
import 'options.dart';
TransformerOptions parseBarbackSettings(BarbackSettings settings) {
@ -8,9 +9,27 @@ TransformerOptions parseBarbackSettings(BarbackSettings settings) {
var entryPoints = _readFileList(config, ENTRY_POINT_PARAM);
var reflectionEntryPoints =
_readFileList(config, REFLECTION_ENTRY_POINT_PARAM);
var initReflector = !config.containsKey('init_reflector') ||
config['init_reflector'] != false;
String mirrorModeVal =
config.containsKey('mirror_mode') ? config['mirror_mode'] : '';
var mirrorMode = MirrorMode.none;
switch (mirrorModeVal) {
case 'debug':
mirrorMode = MirrorMode.debug;
break;
case 'verbose':
mirrorMode = MirrorMode.verbose;
break;
default:
mirrorMode = MirrorMode.none;
break;
}
return new TransformerOptions(entryPoints,
reflectionEntryPoints: reflectionEntryPoints,
modeName: settings.mode.name);
modeName: settings.mode.name,
mirrorMode: mirrorMode,
initReflector: initReflector);
}
/// Cribbed from the polymer project.