refactor(transform): Remove reflection_entry_points parameter
Remove the now unnecessary `reflection_entry_points` parameter from the Angular 2 transformer. Support glob syntax for `entry_points`.
This commit is contained in:
parent
0f54ed0306
commit
46dd5fcbb0
@ -13,6 +13,7 @@ dependencies:
|
|||||||
barback: '^0.15.2+2'
|
barback: '^0.15.2+2'
|
||||||
code_transformers: '^0.2.8'
|
code_transformers: '^0.2.8'
|
||||||
dart_style: '>=0.1.8 <0.3.0'
|
dart_style: '>=0.1.8 <0.3.0'
|
||||||
|
glob: '^1.0.0'
|
||||||
html: '^0.12.0'
|
html: '^0.12.0'
|
||||||
intl: '^0.12.4'
|
intl: '^0.12.4'
|
||||||
logging: '>=0.9.0 <0.12.0'
|
logging: '>=0.9.0 <0.12.0'
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
library angular2.transform.common.options;
|
library angular2.transform.common.options;
|
||||||
|
|
||||||
|
import 'package:glob/glob.dart';
|
||||||
|
|
||||||
import 'annotation_matcher.dart';
|
import 'annotation_matcher.dart';
|
||||||
import 'mirror_mode.dart';
|
import 'mirror_mode.dart';
|
||||||
|
|
||||||
@ -19,13 +21,11 @@ const REFLECTION_ENTRY_POINT_PARAM = 'reflection_entry_points';
|
|||||||
|
|
||||||
/// Provides information necessary to transform an Angular2 app.
|
/// Provides information necessary to transform an Angular2 app.
|
||||||
class TransformerOptions {
|
class TransformerOptions {
|
||||||
|
final List<Glob> entryPointGlobs;
|
||||||
|
|
||||||
/// The path to the files where the application's calls to `bootstrap` are.
|
/// The path to the files where the application's calls to `bootstrap` are.
|
||||||
final List<String> entryPoints;
|
final List<String> entryPoints;
|
||||||
|
|
||||||
/// The paths to the files where the application's {@link ReflectionCapabilities}
|
|
||||||
/// are set.
|
|
||||||
final List<String> reflectionEntryPoints;
|
|
||||||
|
|
||||||
/// The `BarbackMode#name` we are running in.
|
/// The `BarbackMode#name` we are running in.
|
||||||
final String modeName;
|
final String modeName;
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ class TransformerOptions {
|
|||||||
|
|
||||||
TransformerOptions._internal(
|
TransformerOptions._internal(
|
||||||
this.entryPoints,
|
this.entryPoints,
|
||||||
this.reflectionEntryPoints,
|
this.entryPointGlobs,
|
||||||
this.modeName,
|
this.modeName,
|
||||||
this.mirrorMode,
|
this.mirrorMode,
|
||||||
this.initReflector,
|
this.initReflector,
|
||||||
@ -74,8 +74,7 @@ class TransformerOptions {
|
|||||||
this.formatCode});
|
this.formatCode});
|
||||||
|
|
||||||
factory TransformerOptions(List<String> entryPoints,
|
factory TransformerOptions(List<String> entryPoints,
|
||||||
{List<String> reflectionEntryPoints,
|
{String modeName: 'release',
|
||||||
String modeName: 'release',
|
|
||||||
MirrorMode mirrorMode: MirrorMode.none,
|
MirrorMode mirrorMode: MirrorMode.none,
|
||||||
bool initReflector: true,
|
bool initReflector: true,
|
||||||
List<ClassDescriptor> customAnnotationDescriptors: const [],
|
List<ClassDescriptor> customAnnotationDescriptors: const [],
|
||||||
@ -84,15 +83,15 @@ class TransformerOptions {
|
|||||||
bool generateChangeDetectors: true,
|
bool generateChangeDetectors: true,
|
||||||
bool reflectPropertiesAsAttributes: true,
|
bool reflectPropertiesAsAttributes: true,
|
||||||
bool formatCode: false}) {
|
bool formatCode: false}) {
|
||||||
if (reflectionEntryPoints == null || reflectionEntryPoints.isEmpty) {
|
|
||||||
reflectionEntryPoints = entryPoints;
|
|
||||||
}
|
|
||||||
var annotationMatcher = new AnnotationMatcher()
|
var annotationMatcher = new AnnotationMatcher()
|
||||||
..addAll(customAnnotationDescriptors);
|
..addAll(customAnnotationDescriptors);
|
||||||
optimizationPhases = optimizationPhases.isNegative ? 0 : optimizationPhases;
|
optimizationPhases = optimizationPhases.isNegative ? 0 : optimizationPhases;
|
||||||
|
var entryPointGlobs = entryPoints != null
|
||||||
|
? entryPoints.map((path) => new Glob(path)).toList(growable: false)
|
||||||
|
: null;
|
||||||
return new TransformerOptions._internal(
|
return new TransformerOptions._internal(
|
||||||
entryPoints,
|
entryPoints,
|
||||||
reflectionEntryPoints,
|
entryPointGlobs,
|
||||||
modeName,
|
modeName,
|
||||||
mirrorMode,
|
mirrorMode,
|
||||||
initReflector,
|
initReflector,
|
||||||
|
@ -7,9 +7,8 @@ import 'options.dart';
|
|||||||
|
|
||||||
TransformerOptions parseBarbackSettings(BarbackSettings settings) {
|
TransformerOptions parseBarbackSettings(BarbackSettings settings) {
|
||||||
var config = settings.configuration;
|
var config = settings.configuration;
|
||||||
|
_warnDeprecated(config);
|
||||||
var entryPoints = _readFileList(config, ENTRY_POINT_PARAM);
|
var entryPoints = _readFileList(config, ENTRY_POINT_PARAM);
|
||||||
var reflectionEntryPoints =
|
|
||||||
_readFileList(config, REFLECTION_ENTRY_POINT_PARAM);
|
|
||||||
var initReflector =
|
var initReflector =
|
||||||
_readBool(config, INIT_REFLECTOR_PARAM, defaultValue: true);
|
_readBool(config, INIT_REFLECTOR_PARAM, defaultValue: true);
|
||||||
var inlineViews = _readBool(config, INLINE_VIEWS_PARAM, defaultValue: true);
|
var inlineViews = _readBool(config, INLINE_VIEWS_PARAM, defaultValue: true);
|
||||||
@ -35,7 +34,6 @@ TransformerOptions parseBarbackSettings(BarbackSettings settings) {
|
|||||||
var optimizationPhases = _readInt(config, OPTIMIZATION_PHASES_PARAM,
|
var optimizationPhases = _readInt(config, OPTIMIZATION_PHASES_PARAM,
|
||||||
defaultValue: DEFAULT_OPTIMIZATION_PHASES);
|
defaultValue: DEFAULT_OPTIMIZATION_PHASES);
|
||||||
return new TransformerOptions(entryPoints,
|
return new TransformerOptions(entryPoints,
|
||||||
reflectionEntryPoints: reflectionEntryPoints,
|
|
||||||
modeName: settings.mode.name,
|
modeName: settings.mode.name,
|
||||||
mirrorMode: mirrorMode,
|
mirrorMode: mirrorMode,
|
||||||
initReflector: initReflector,
|
initReflector: initReflector,
|
||||||
@ -132,3 +130,10 @@ const CUSTOM_ANNOTATIONS_ERROR = '''
|
|||||||
- name: ...
|
- name: ...
|
||||||
import: ...
|
import: ...
|
||||||
superClass: ...''';
|
superClass: ...''';
|
||||||
|
|
||||||
|
void _warnDeprecated(Map config) {
|
||||||
|
if (config.containsKey(REFLECTION_ENTRY_POINT_PARAM)) {
|
||||||
|
print('${REFLECTION_ENTRY_POINT_PARAM} is no longer necessary for '
|
||||||
|
'Angular 2 apps. Please remove it from your pubspec.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,24 +1,18 @@
|
|||||||
library angular2.transform.reflection_remover.codegen;
|
library angular2.transform.reflection_remover.codegen;
|
||||||
|
|
||||||
import 'package:path/path.dart' as path;
|
|
||||||
|
|
||||||
import 'package:angular2/src/transform/common/names.dart';
|
import 'package:angular2/src/transform/common/names.dart';
|
||||||
|
import 'package:barback/barback.dart';
|
||||||
|
import 'package:path/path.dart' as path;
|
||||||
|
|
||||||
class Codegen {
|
class Codegen {
|
||||||
static const _PREFIX_BASE = 'ngStaticInit';
|
static const _PREFIX_BASE = 'ngStaticInit';
|
||||||
|
final AssetId reflectionEntryPoint;
|
||||||
|
|
||||||
/// The prefix used to import our generated file.
|
/// The prefix used to import our generated file.
|
||||||
final String prefix;
|
final String prefix;
|
||||||
|
|
||||||
/// The import uris
|
Codegen(this.reflectionEntryPoint, {String prefix})
|
||||||
final Iterable<String> importUris;
|
: this.prefix = prefix == null ? _PREFIX_BASE : prefix {
|
||||||
|
|
||||||
Codegen(String reflectionEntryPointPath, Iterable<String> newEntryPointPaths,
|
|
||||||
{String prefix})
|
|
||||||
: this.prefix = prefix == null ? _PREFIX_BASE : prefix,
|
|
||||||
importUris = newEntryPointPaths.map((p) => path
|
|
||||||
.relative(p, from: path.dirname(reflectionEntryPointPath))
|
|
||||||
.replaceAll('\\', '/')) {
|
|
||||||
if (this.prefix.isEmpty) throw new ArgumentError.value('(empty)', 'prefix');
|
if (this.prefix.isEmpty) throw new ArgumentError.value('(empty)', 'prefix');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,18 +22,14 @@ class Codegen {
|
|||||||
/// The code generated here should follow the example of code generated for
|
/// The code generated here should follow the example of code generated for
|
||||||
/// an {@link ImportDirective} node.
|
/// an {@link ImportDirective} node.
|
||||||
String codegenImport() {
|
String codegenImport() {
|
||||||
var count = 0;
|
var importUri = path
|
||||||
return importUris
|
.basename(reflectionEntryPoint.changeExtension(DEPS_EXTENSION).path);
|
||||||
.map((importUri) => 'import \'${importUri}\' as ${prefix}${count++};')
|
return '''import '$importUri' as $prefix;''';
|
||||||
.join('');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generates code to call the method which sets up Angular2 reflection
|
/// Generates code to call the method which sets up Angular2 reflection
|
||||||
/// statically.
|
/// statically.
|
||||||
String codegenSetupReflectionCall() {
|
String codegenSetupReflectionCall() {
|
||||||
var count = 0;
|
return '$prefix.$SETUP_METHOD_NAME();';
|
||||||
return importUris
|
|
||||||
.map((_) => '${prefix}${count++}.${SETUP_METHOD_NAME}();')
|
|
||||||
.join('');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,9 @@ library angular2.transform.reflection_remover.remove_reflection_capabilities;
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:analyzer/analyzer.dart';
|
import 'package:analyzer/analyzer.dart';
|
||||||
import 'package:barback/barback.dart';
|
|
||||||
import 'package:angular2/src/transform/common/asset_reader.dart';
|
import 'package:angular2/src/transform/common/asset_reader.dart';
|
||||||
import 'package:angular2/src/transform/common/mirror_mode.dart';
|
import 'package:angular2/src/transform/common/mirror_mode.dart';
|
||||||
|
import 'package:barback/barback.dart';
|
||||||
|
|
||||||
import 'codegen.dart';
|
import 'codegen.dart';
|
||||||
import 'rewriter.dart';
|
import 'rewriter.dart';
|
||||||
@ -15,16 +15,14 @@ import 'rewriter.dart';
|
|||||||
///
|
///
|
||||||
/// This only searches the code in `reflectionEntryPoint`, not `part`s,
|
/// This only searches the code in `reflectionEntryPoint`, not `part`s,
|
||||||
/// `import`s, `export`s, etc.
|
/// `import`s, `export`s, etc.
|
||||||
Future<String> removeReflectionCapabilities(AssetReader reader,
|
Future<String> removeReflectionCapabilities(
|
||||||
AssetId reflectionEntryPoint, Iterable<AssetId> newEntryPoints,
|
AssetReader reader, AssetId reflectionEntryPoint,
|
||||||
{MirrorMode mirrorMode: MirrorMode.none,
|
{MirrorMode mirrorMode: MirrorMode.none,
|
||||||
bool writeStaticInit: true}) async {
|
bool writeStaticInit: true}) async {
|
||||||
var code = await reader.readAsString(reflectionEntryPoint);
|
var code = await reader.readAsString(reflectionEntryPoint);
|
||||||
var reflectionEntryPointPath = reflectionEntryPoint.path;
|
|
||||||
var newEntryPointPaths = newEntryPoints.map((id) => id.path);
|
|
||||||
|
|
||||||
var codegen = new Codegen(reflectionEntryPointPath, newEntryPointPaths);
|
var codegen = new Codegen(reflectionEntryPoint);
|
||||||
return new Rewriter(code, codegen,
|
return new Rewriter(code, codegen,
|
||||||
mirrorMode: mirrorMode, writeStaticInit: writeStaticInit)
|
mirrorMode: mirrorMode, writeStaticInit: writeStaticInit)
|
||||||
.rewrite(parseCompilationUnit(code, name: reflectionEntryPointPath));
|
.rewrite(parseCompilationUnit(code, name: reflectionEntryPoint.path));
|
||||||
}
|
}
|
||||||
|
@ -25,18 +25,12 @@ class ReflectionRemover extends Transformer {
|
|||||||
ReflectionRemover(this.options);
|
ReflectionRemover(this.options);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool isPrimary(AssetId id) => options.reflectionEntryPoints != null &&
|
bool isPrimary(AssetId id) => options.entryPointGlobs != null &&
|
||||||
options.reflectionEntryPoints.contains(id.path);
|
options.entryPointGlobs.any((g) => g.matches(id.path));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future apply(Transform transform) async {
|
Future apply(Transform transform) async {
|
||||||
await log.initZoned(transform, () async {
|
await log.initZoned(transform, () async {
|
||||||
var newEntryPoints = options.entryPoints.map((entryPoint) {
|
|
||||||
return new AssetId(transform.primaryInput.id.package, entryPoint)
|
|
||||||
.changeExtension(DEPS_EXTENSION);
|
|
||||||
});
|
|
||||||
var reader = new AssetReader.fromTransform(transform);
|
|
||||||
|
|
||||||
var mirrorMode = options.mirrorMode;
|
var mirrorMode = options.mirrorMode;
|
||||||
var writeStaticInit = options.initReflector;
|
var writeStaticInit = options.initReflector;
|
||||||
if (options.modeName == TRANSFORM_DYNAMIC_MODE) {
|
if (options.modeName == TRANSFORM_DYNAMIC_MODE) {
|
||||||
@ -48,7 +42,7 @@ class ReflectionRemover extends Transformer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var transformedCode = await removeReflectionCapabilities(
|
var transformedCode = await removeReflectionCapabilities(
|
||||||
reader, transform.primaryInput.id, newEntryPoints,
|
new AssetReader.fromTransform(transform), transform.primaryInput.id,
|
||||||
mirrorMode: mirrorMode, writeStaticInit: writeStaticInit);
|
mirrorMode: mirrorMode, writeStaticInit: writeStaticInit);
|
||||||
transform.addOutput(
|
transform.addOutput(
|
||||||
new Asset.fromString(transform.primaryInput.id, transformedCode));
|
new Asset.fromString(transform.primaryInput.id, transformedCode));
|
||||||
|
@ -14,7 +14,6 @@ main() {
|
|||||||
var formatter = new DartFormatter();
|
var formatter = new DartFormatter();
|
||||||
var transform = new AngularTransformerGroup(new TransformerOptions(
|
var transform = new AngularTransformerGroup(new TransformerOptions(
|
||||||
['web/index.dart'],
|
['web/index.dart'],
|
||||||
reflectionEntryPoints: ['web/index.dart'],
|
|
||||||
formatCode: true));
|
formatCode: true));
|
||||||
|
|
||||||
class IntegrationTestConfig {
|
class IntegrationTestConfig {
|
||||||
|
@ -4,7 +4,7 @@ import 'index.dart';
|
|||||||
export 'index.dart';
|
export 'index.dart';
|
||||||
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
|
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
|
||||||
import 'package:angular2/bootstrap_static.dart';
|
import 'package:angular2/bootstrap_static.dart';
|
||||||
import 'index.ng_deps.dart' as ngStaticInit0;
|
import 'index.ng_deps.dart' as ngStaticInit;
|
||||||
import 'package:angular2/src/core/reflection/reflection.dart';
|
import 'package:angular2/src/core/reflection/reflection.dart';
|
||||||
import 'bar.dart';
|
import 'bar.dart';
|
||||||
import 'bar.ng_deps.dart' as i0;
|
import 'bar.ng_deps.dart' as i0;
|
||||||
|
@ -4,6 +4,7 @@ import 'package:analyzer/analyzer.dart';
|
|||||||
import 'package:angular2/src/transform/common/mirror_mode.dart';
|
import 'package:angular2/src/transform/common/mirror_mode.dart';
|
||||||
import 'package:angular2/src/transform/reflection_remover/codegen.dart';
|
import 'package:angular2/src/transform/reflection_remover/codegen.dart';
|
||||||
import 'package:angular2/src/transform/reflection_remover/rewriter.dart';
|
import 'package:angular2/src/transform/reflection_remover/rewriter.dart';
|
||||||
|
import 'package:barback/barback.dart';
|
||||||
import 'package:guinness/guinness.dart';
|
import 'package:guinness/guinness.dart';
|
||||||
|
|
||||||
import 'reflection_remover_files/expected/index.dart' as expected;
|
import 'reflection_remover_files/expected/index.dart' as expected;
|
||||||
@ -16,7 +17,8 @@ import '../common/read_file.dart';
|
|||||||
main() => allTests();
|
main() => allTests();
|
||||||
|
|
||||||
void allTests() {
|
void allTests() {
|
||||||
var codegen = new Codegen('web/index.dart', ['web/index.ng_deps.dart']);
|
var assetId = new AssetId('a', 'web/index.dart');
|
||||||
|
var codegen = new Codegen(assetId);
|
||||||
var code = readFile('reflection_remover/index.dart').replaceAll('\r\n', '\n');
|
var code = readFile('reflection_remover/index.dart').replaceAll('\r\n', '\n');
|
||||||
var bootstrapCode = readFile('reflection_remover/bootstrap_files/index.dart')
|
var bootstrapCode = readFile('reflection_remover/bootstrap_files/index.dart')
|
||||||
.replaceAll('\r\n', '\n');
|
.replaceAll('\r\n', '\n');
|
||||||
|
@ -11,9 +11,9 @@ library angular2.test.transform.reflection_remover.reflection_remover_files;
|
|||||||
var code = """
|
var code = """
|
||||||
library web_foo;
|
library web_foo;
|
||||||
|
|
||||||
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit0;
|
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit;
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var appRef = await bootstrapStatic(MyComponent, null, () { ngStaticInit0.initReflector(); });
|
var appRef = await bootstrapStatic(MyComponent, null, () { ngStaticInit.initReflector(); });
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
@ -11,12 +11,12 @@ library angular2.test.transform.debug_reflection_remover_files;
|
|||||||
var code = """
|
var code = """
|
||||||
library web_foo;
|
library web_foo;
|
||||||
|
|
||||||
import 'package:angular2/bootstrap.dart';import 'index.ng_deps.dart' as ngStaticInit0;
|
import 'package:angular2/bootstrap.dart';import 'index.ng_deps.dart' as ngStaticInit;
|
||||||
import 'package:angular2/src/core/reflection/reflection.dart';
|
import 'package:angular2/src/core/reflection/reflection.dart';
|
||||||
import 'package:angular2/src/core/reflection/debug_reflection_capabilities.dart';
|
import 'package:angular2/src/core/reflection/debug_reflection_capabilities.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
reflector.reflectionCapabilities = new ReflectionCapabilities();
|
reflector.reflectionCapabilities = new ReflectionCapabilities();
|
||||||
ngStaticInit0.initReflector();bootstrap(MyComponent);
|
ngStaticInit.initReflector();bootstrap(MyComponent);
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
@ -11,12 +11,12 @@ library angular2.test.transform.reflection_remover.debug_mirrors_files.expected;
|
|||||||
var code = """
|
var code = """
|
||||||
library web_foo;
|
library web_foo;
|
||||||
|
|
||||||
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit0;
|
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit;
|
||||||
import 'package:angular2/src/core/reflection/reflection.dart';
|
import 'package:angular2/src/core/reflection/reflection.dart';
|
||||||
import 'package:angular2/src/core/reflection/debug_reflection_capabilities.dart';
|
import 'package:angular2/src/core/reflection/debug_reflection_capabilities.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
ngStaticInit0.initReflector();reflector.reflectionCapabilities = new ReflectionCapabilities();
|
ngStaticInit.initReflector();reflector.reflectionCapabilities = new ReflectionCapabilities();
|
||||||
bootstrapStatic(MyComponent);
|
bootstrapStatic(MyComponent);
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
@ -11,12 +11,12 @@ library angular2.test.transform.reflection_remover.reflection_remover_files;
|
|||||||
var code = """
|
var code = """
|
||||||
library web_foo;
|
library web_foo;
|
||||||
|
|
||||||
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit0;
|
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit;
|
||||||
import 'package:angular2/src/core/reflection/reflection.dart';
|
import 'package:angular2/src/core/reflection/reflection.dart';
|
||||||
/*import 'package:angular2/src/core/reflection/reflection_capabilities.dart';*/
|
/*import 'package:angular2/src/core/reflection/reflection_capabilities.dart';*/
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
ngStaticInit0.initReflector();/*reflector.reflectionCapabilities = new ReflectionCapabilities();*/
|
ngStaticInit.initReflector();/*reflector.reflectionCapabilities = new ReflectionCapabilities();*/
|
||||||
bootstrapStatic(MyComponent);
|
bootstrapStatic(MyComponent);
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
@ -11,12 +11,12 @@ library angular2.test.transform.reflection_remover.verbose_files.expected;
|
|||||||
var code = """
|
var code = """
|
||||||
library web_foo;
|
library web_foo;
|
||||||
|
|
||||||
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit0;
|
import 'package:angular2/bootstrap_static.dart';import 'index.ng_deps.dart' as ngStaticInit;
|
||||||
import 'package:angular2/src/core/reflection/reflection.dart';
|
import 'package:angular2/src/core/reflection/reflection.dart';
|
||||||
import 'package:angular2/src/core/reflection/debug_reflection_capabilities.dart';
|
import 'package:angular2/src/core/reflection/debug_reflection_capabilities.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
ngStaticInit0.initReflector();reflector.reflectionCapabilities = new ReflectionCapabilities(verbose: true);
|
ngStaticInit.initReflector();reflector.reflectionCapabilities = new ReflectionCapabilities(verbose: true);
|
||||||
bootstrapStatic(MyComponent);
|
bootstrapStatic(MyComponent);
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user