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:
10
modules/angular2/src/transform/common/mirror_mode.dart
Normal file
10
modules/angular2/src/transform/common/mirror_mode.dart
Normal 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 }
|
@ -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';
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
Reference in New Issue
Block a user