diff --git a/modules/e2e_util/perf_util.ts b/modules/e2e_util/perf_util.ts index f49dd92475..d5673ff587 100644 --- a/modules/e2e_util/perf_util.ts +++ b/modules/e2e_util/perf_util.ts @@ -11,7 +11,7 @@ const yargs = require('yargs'); const nodeUuid = require('node-uuid'); import * as fs from 'fs-extra'; -import {SeleniumWebDriverAdapter, Options, JsonFileReporter, Validator, RegressionSlopeValidator, ConsoleReporter, SizeValidator, MultiReporter, MultiMetric, Runner, Provider} from '@angular/benchpress'; +import {SeleniumWebDriverAdapter, Options, JsonFileReporter, Validator, RegressionSlopeValidator, ConsoleReporter, SizeValidator, MultiReporter, MultiMetric, Runner, StaticProvider} from '@angular/benchpress'; import {readCommandLine as readE2eCommandLine, openBrowser} from './e2e_util'; let cmdArgs: {'sample-size': number, 'force-gc': boolean, 'dryrun': boolean, 'bundles': boolean}; @@ -59,7 +59,7 @@ function createBenchpressRunner(): Runner { } const resultsFolder = './dist/benchmark_results'; fs.ensureDirSync(resultsFolder); - const providers: Provider[] = [ + const providers: StaticProvider[] = [ SeleniumWebDriverAdapter.PROTRACTOR_PROVIDERS, {provide: Options.FORCE_GC, useValue: cmdArgs['force-gc']}, {provide: Options.DEFAULT_DESCRIPTION, useValue: {'runId': runId}}, JsonFileReporter.PROVIDERS, diff --git a/modules/playground/README.md b/modules/playground/README.md index 0f8e32d516..213a5faafb 100644 --- a/modules/playground/README.md +++ b/modules/playground/README.md @@ -1,6 +1,8 @@ # How to run the examples locally +``` $ cp -r ./modules/playground ./dist/all/ $ ./node_modules/.bin/tsc -p modules --emitDecoratorMetadata -w $ gulp serve $ open http://localhost:8000/all/playground/src/hello_world/index.html?bundles=false +``` \ No newline at end of file diff --git a/packages/benchpress/index.ts b/packages/benchpress/index.ts index f91106e540..1b11272642 100644 --- a/packages/benchpress/index.ts +++ b/packages/benchpress/index.ts @@ -9,7 +9,7 @@ // Must be imported first, because Angular decorators throw on load. import 'reflect-metadata'; -export {InjectionToken, Injector, Provider, ReflectiveInjector} from '@angular/core'; +export {InjectionToken, Injector, Provider, ReflectiveInjector, StaticProvider} from '@angular/core'; export {Options} from './src/common_options'; export {MeasureValues} from './src/measure_values'; export {Metric} from './src/metric'; diff --git a/packages/benchpress/src/metric/perflog_metric.ts b/packages/benchpress/src/metric/perflog_metric.ts index 3ef69f9061..f31fc6186d 100644 --- a/packages/benchpress/src/metric/perflog_metric.ts +++ b/packages/benchpress/src/metric/perflog_metric.ts @@ -20,7 +20,14 @@ import {PerfLogEvent, PerfLogFeatures, WebDriverExtension} from '../web_driver_e export class PerflogMetric extends Metric { static SET_TIMEOUT = new InjectionToken('PerflogMetric.setTimeout'); static PROVIDERS = [ - PerflogMetric, { + { + provide: PerflogMetric, + deps: [ + WebDriverExtension, PerflogMetric.SET_TIMEOUT, Options.MICRO_METRICS, Options.FORCE_GC, + Options.CAPTURE_FRAMES, Options.RECEIVED_DATA, Options.REQUEST_COUNT + ] + }, + { provide: PerflogMetric.SET_TIMEOUT, useValue: (fn: Function, millis: number) => setTimeout(fn, millis) } diff --git a/packages/benchpress/src/metric/user_metric.ts b/packages/benchpress/src/metric/user_metric.ts index 19b8d57dfe..fe253d913d 100644 --- a/packages/benchpress/src/metric/user_metric.ts +++ b/packages/benchpress/src/metric/user_metric.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Inject, Injectable} from '@angular/core'; +import {Inject, Injectable, StaticProvider} from '@angular/core'; import {Options} from '../common_options'; import {Metric} from '../metric'; @@ -14,7 +14,8 @@ import {WebDriverAdapter} from '../web_driver_adapter'; @Injectable() export class UserMetric extends Metric { - static PROVIDERS = [UserMetric]; + static PROVIDERS = + [{provide: UserMetric, deps: [Options.USER_METRICS, WebDriverAdapter]}]; constructor( @Inject(Options.USER_METRICS) private _userMetrics: {[key: string]: string}, diff --git a/packages/benchpress/src/reporter/console_reporter.ts b/packages/benchpress/src/reporter/console_reporter.ts index 72fd545175..1659640010 100644 --- a/packages/benchpress/src/reporter/console_reporter.ts +++ b/packages/benchpress/src/reporter/console_reporter.ts @@ -22,7 +22,11 @@ export class ConsoleReporter extends Reporter { static PRINT = new InjectionToken('ConsoleReporter.print'); static COLUMN_WIDTH = new InjectionToken('ConsoleReporter.columnWidth'); static PROVIDERS = [ - ConsoleReporter, {provide: ConsoleReporter.COLUMN_WIDTH, useValue: 18}, { + { + provide: ConsoleReporter, + deps: [ConsoleReporter.COLUMN_WIDTH, SampleDescription, ConsoleReporter.PRINT] + }, + {provide: ConsoleReporter.COLUMN_WIDTH, useValue: 18}, { provide: ConsoleReporter.PRINT, useValue: function(v: any) { // tslint:disable-next-line:no-console diff --git a/packages/benchpress/src/reporter/json_file_reporter.ts b/packages/benchpress/src/reporter/json_file_reporter.ts index 2a8d0fb629..aaca71e916 100644 --- a/packages/benchpress/src/reporter/json_file_reporter.ts +++ b/packages/benchpress/src/reporter/json_file_reporter.ts @@ -22,7 +22,13 @@ import {formatStats, sortedProps} from './util'; @Injectable() export class JsonFileReporter extends Reporter { static PATH = new InjectionToken('JsonFileReporter.path'); - static PROVIDERS = [JsonFileReporter, {provide: JsonFileReporter.PATH, useValue: '.'}]; + static PROVIDERS = [ + { + provide: JsonFileReporter, + deps: [SampleDescription, JsonFileReporter.PATH, Options.WRITE_FILE, Options.NOW] + }, + {provide: JsonFileReporter.PATH, useValue: '.'} + ]; constructor( private _description: SampleDescription, @Inject(JsonFileReporter.PATH) private _path: string, diff --git a/packages/benchpress/src/runner.ts b/packages/benchpress/src/runner.ts index 97a188f4d5..0d9a201f8d 100644 --- a/packages/benchpress/src/runner.ts +++ b/packages/benchpress/src/runner.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Provider, ReflectiveInjector} from '@angular/core'; +import {Injector, StaticProvider} from '@angular/core'; import {Options} from './common_options'; import {Metric} from './metric'; @@ -34,17 +34,17 @@ import {IOsDriverExtension} from './webdriver/ios_driver_extension'; * It provides defaults, creates the injector and calls the sampler. */ export class Runner { - constructor(private _defaultProviders: Provider[] = []) {} + constructor(private _defaultProviders: StaticProvider[] = []) {} sample({id, execute, prepare, microMetrics, providers, userMetrics}: { id: string, execute?: Function, prepare?: Function, microMetrics?: {[key: string]: string}, - providers?: Provider[], + providers?: StaticProvider[], userMetrics?: {[key: string]: string} }): Promise { - const sampleProviders: Provider[] = [ + const sampleProviders: StaticProvider[] = [ _DEFAULT_PROVIDERS, this._defaultProviders, {provide: Options.SAMPLE_ID, useValue: id}, {provide: Options.EXECUTE, useValue: execute} ]; @@ -61,7 +61,7 @@ export class Runner { sampleProviders.push(providers); } - const inj = ReflectiveInjector.resolveAndCreate(sampleProviders); + const inj = Injector.create(sampleProviders); const adapter: WebDriverAdapter = inj.get(WebDriverAdapter); return Promise @@ -75,7 +75,7 @@ export class Runner { // Only WebDriverAdapter is reused. // TODO vsavkin consider changing it when toAsyncFactory is added back or when child // injectors are handled better. - const injector = ReflectiveInjector.resolveAndCreate([ + const injector = Injector.create([ sampleProviders, {provide: Options.CAPABILITIES, useValue: capabilities}, {provide: Options.USER_AGENT, useValue: userAgent}, {provide: WebDriverAdapter, useValue: adapter} diff --git a/packages/benchpress/src/sampler.ts b/packages/benchpress/src/sampler.ts index beb190852c..bd9d0fc868 100644 --- a/packages/benchpress/src/sampler.ts +++ b/packages/benchpress/src/sampler.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Inject, Injectable} from '@angular/core'; +import {Inject, Injectable, StaticProvider} from '@angular/core'; import {Options} from './common_options'; import {MeasureValues} from './measure_values'; @@ -26,8 +26,12 @@ import {WebDriverAdapter} from './web_driver_adapter'; */ @Injectable() export class Sampler { - static PROVIDERS = [Sampler]; - + static PROVIDERS = [{ + provide: Sampler, + deps: [ + WebDriverAdapter, Metric, Reporter, Validator, Options.PREPARE, Options.EXECUTE, Options.NOW + ] + }]; constructor( private _driver: WebDriverAdapter, private _metric: Metric, private _reporter: Reporter, private _validator: Validator, @Inject(Options.PREPARE) private _prepare: Function, diff --git a/packages/benchpress/src/validator/regression_slope_validator.ts b/packages/benchpress/src/validator/regression_slope_validator.ts index f0e2fa0980..8f590e2b24 100644 --- a/packages/benchpress/src/validator/regression_slope_validator.ts +++ b/packages/benchpress/src/validator/regression_slope_validator.ts @@ -21,7 +21,11 @@ export class RegressionSlopeValidator extends Validator { static SAMPLE_SIZE = new InjectionToken('RegressionSlopeValidator.sampleSize'); static METRIC = new InjectionToken('RegressionSlopeValidator.metric'); static PROVIDERS = [ - RegressionSlopeValidator, {provide: RegressionSlopeValidator.SAMPLE_SIZE, useValue: 10}, + { + provide: RegressionSlopeValidator, + deps: [RegressionSlopeValidator.SAMPLE_SIZE, RegressionSlopeValidator.METRIC] + }, + {provide: RegressionSlopeValidator.SAMPLE_SIZE, useValue: 10}, {provide: RegressionSlopeValidator.METRIC, useValue: 'scriptTime'} ]; diff --git a/packages/benchpress/src/validator/size_validator.ts b/packages/benchpress/src/validator/size_validator.ts index 711eb9edbb..7d546c186a 100644 --- a/packages/benchpress/src/validator/size_validator.ts +++ b/packages/benchpress/src/validator/size_validator.ts @@ -17,7 +17,10 @@ import {Validator} from '../validator'; @Injectable() export class SizeValidator extends Validator { static SAMPLE_SIZE = new InjectionToken('SizeValidator.sampleSize'); - static PROVIDERS = [SizeValidator, {provide: SizeValidator.SAMPLE_SIZE, useValue: 10}]; + static PROVIDERS = [ + {provide: SizeValidator, deps: [SizeValidator.SAMPLE_SIZE]}, + {provide: SizeValidator.SAMPLE_SIZE, useValue: 10} + ]; constructor(@Inject(SizeValidator.SAMPLE_SIZE) private _sampleSize: number) { super(); } diff --git a/packages/benchpress/src/webdriver/chrome_driver_extension.ts b/packages/benchpress/src/webdriver/chrome_driver_extension.ts index 0cf41cb38d..d1ceba67b1 100644 --- a/packages/benchpress/src/webdriver/chrome_driver_extension.ts +++ b/packages/benchpress/src/webdriver/chrome_driver_extension.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Inject, Injectable} from '@angular/core'; +import {Inject, Injectable, StaticProvider} from '@angular/core'; import {Options} from '../common_options'; import {WebDriverAdapter} from '../web_driver_adapter'; @@ -21,7 +21,10 @@ import {PerfLogEvent, PerfLogFeatures, WebDriverExtension} from '../web_driver_e */ @Injectable() export class ChromeDriverExtension extends WebDriverExtension { - static PROVIDERS = [ChromeDriverExtension]; + static PROVIDERS = [{ + provide: ChromeDriverExtension, + deps: [WebDriverAdapter, Options.USER_AGENT] + }]; private _majorChromeVersion: number; private _firstRun = true; diff --git a/packages/benchpress/src/webdriver/firefox_driver_extension.ts b/packages/benchpress/src/webdriver/firefox_driver_extension.ts index 9c895259cb..2d34742505 100644 --- a/packages/benchpress/src/webdriver/firefox_driver_extension.ts +++ b/packages/benchpress/src/webdriver/firefox_driver_extension.ts @@ -13,7 +13,7 @@ import {PerfLogEvent, PerfLogFeatures, WebDriverExtension} from '../web_driver_e @Injectable() export class FirefoxDriverExtension extends WebDriverExtension { - static PROVIDERS = [FirefoxDriverExtension]; + static PROVIDERS = [{provide: FirefoxDriverExtension, deps: [WebDriverAdapter]}]; private _profilerStarted: boolean; diff --git a/packages/benchpress/src/webdriver/ios_driver_extension.ts b/packages/benchpress/src/webdriver/ios_driver_extension.ts index 8ceb3e2eeb..fefef6314c 100644 --- a/packages/benchpress/src/webdriver/ios_driver_extension.ts +++ b/packages/benchpress/src/webdriver/ios_driver_extension.ts @@ -13,7 +13,7 @@ import {PerfLogEvent, PerfLogFeatures, WebDriverExtension} from '../web_driver_e @Injectable() export class IOsDriverExtension extends WebDriverExtension { - static PROVIDERS = [IOsDriverExtension]; + static PROVIDERS = [{provide: IOsDriverExtension, deps: [WebDriverAdapter]}]; constructor(private _driver: WebDriverAdapter) { super(); } diff --git a/packages/benchpress/src/webdriver/selenium_webdriver_adapter.ts b/packages/benchpress/src/webdriver/selenium_webdriver_adapter.ts index efb1d91f4b..4aa0ad27e0 100644 --- a/packages/benchpress/src/webdriver/selenium_webdriver_adapter.ts +++ b/packages/benchpress/src/webdriver/selenium_webdriver_adapter.ts @@ -6,15 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ +import {StaticProvider} from '@angular/core'; + import {WebDriverAdapter} from '../web_driver_adapter'; + /** * Adapter for the selenium-webdriver. */ export class SeleniumWebDriverAdapter extends WebDriverAdapter { - static PROTRACTOR_PROVIDERS = [{ + static PROTRACTOR_PROVIDERS = [{ provide: WebDriverAdapter, - useFactory: () => new SeleniumWebDriverAdapter((global).browser) + useFactory: () => new SeleniumWebDriverAdapter((global).browser), + deps: [] }]; constructor(private _driver: any) { super(); } diff --git a/packages/benchpress/test/metric/multi_metric_spec.ts b/packages/benchpress/test/metric/multi_metric_spec.ts index 53f2892bbd..3d8ff95467 100644 --- a/packages/benchpress/test/metric/multi_metric_spec.ts +++ b/packages/benchpress/test/metric/multi_metric_spec.ts @@ -7,12 +7,13 @@ */ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {Metric, MultiMetric, ReflectiveInjector} from '../../index'; + +import {Injector, Metric, MultiMetric} from '../../index'; export function main() { function createMetric(ids: any[]) { - const m = ReflectiveInjector - .resolveAndCreate([ + const m = Injector + .create([ ids.map(id => ({provide: id, useValue: new MockMetric(id)})), MultiMetric.provideWith(ids) ]) diff --git a/packages/benchpress/test/metric/perflog_metric_spec.ts b/packages/benchpress/test/metric/perflog_metric_spec.ts index 66b81cc160..68822092f9 100644 --- a/packages/benchpress/test/metric/perflog_metric_spec.ts +++ b/packages/benchpress/test/metric/perflog_metric_spec.ts @@ -6,10 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ -import {Provider} from '@angular/core'; +import {StaticProvider} from '@angular/core'; import {AsyncTestCompleter, beforeEach, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {Metric, Options, PerfLogEvent, PerfLogFeatures, PerflogMetric, ReflectiveInjector, WebDriverExtension} from '../../index'; +import {Injector, Metric, Options, PerfLogEvent, PerfLogFeatures, PerflogMetric, WebDriverExtension} from '../../index'; import {TraceEventFactory} from '../trace_event_factory'; export function main() { @@ -33,7 +33,7 @@ export function main() { if (!microMetrics) { microMetrics = {}; } - const providers: Provider[] = [ + const providers: StaticProvider[] = [ Options.DEFAULT_PROVIDERS, PerflogMetric.PROVIDERS, {provide: Options.MICRO_METRICS, useValue: microMetrics}, { provide: PerflogMetric.SET_TIMEOUT, @@ -59,7 +59,7 @@ export function main() { if (requestCount != null) { providers.push({provide: Options.REQUEST_COUNT, useValue: requestCount}); } - return ReflectiveInjector.resolveAndCreate(providers).get(PerflogMetric); + return Injector.create(providers).get(PerflogMetric); } describe('perflog metric', () => { diff --git a/packages/benchpress/test/metric/user_metric_spec.ts b/packages/benchpress/test/metric/user_metric_spec.ts index fe0c382efd..6884620b68 100644 --- a/packages/benchpress/test/metric/user_metric_spec.ts +++ b/packages/benchpress/test/metric/user_metric_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Provider, ReflectiveInjector} from '@angular/core'; +import {Injector, StaticProvider} from '@angular/core'; import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; import {Options, PerfLogEvent, PerfLogFeatures, UserMetric, WebDriverAdapter} from '../../index'; @@ -25,12 +25,12 @@ export function main() { userMetrics = {}; } wdAdapter = new MockDriverAdapter(); - const providers: Provider[] = [ + const providers: StaticProvider[] = [ Options.DEFAULT_PROVIDERS, UserMetric.PROVIDERS, {provide: Options.USER_METRICS, useValue: userMetrics}, {provide: WebDriverAdapter, useValue: wdAdapter} ]; - return ReflectiveInjector.resolveAndCreate(providers).get(UserMetric); + return Injector.create(providers).get(UserMetric); } describe('user metric', () => { diff --git a/packages/benchpress/test/reporter/console_reporter_spec.ts b/packages/benchpress/test/reporter/console_reporter_spec.ts index bfe30e7547..7e3c15b6cb 100644 --- a/packages/benchpress/test/reporter/console_reporter_spec.ts +++ b/packages/benchpress/test/reporter/console_reporter_spec.ts @@ -6,10 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ -import {Provider} from '@angular/core'; +import {StaticProvider} from '@angular/core'; import {describe, expect, it} from '@angular/core/testing/src/testing_internal'; -import {ConsoleReporter, MeasureValues, ReflectiveInjector, SampleDescription} from '../../index'; +import {ConsoleReporter, Injector, MeasureValues, SampleDescription} from '../../index'; export function main() { describe('console reporter', () => { @@ -30,7 +30,7 @@ export function main() { if (sampleId == null) { sampleId = 'null'; } - const providers: Provider[] = [ + const providers: StaticProvider[] = [ ConsoleReporter.PROVIDERS, { provide: SampleDescription, useValue: new SampleDescription(sampleId, descriptions, metrics !) @@ -40,7 +40,7 @@ export function main() { if (columnWidth != null) { providers.push({provide: ConsoleReporter.COLUMN_WIDTH, useValue: columnWidth}); } - reporter = ReflectiveInjector.resolveAndCreate(providers).get(ConsoleReporter); + reporter = Injector.create(providers).get(ConsoleReporter); } it('should print the sample id, description and table header', () => { diff --git a/packages/benchpress/test/reporter/json_file_reporter_spec.ts b/packages/benchpress/test/reporter/json_file_reporter_spec.ts index 27c4b25584..cbdbf5d9d4 100644 --- a/packages/benchpress/test/reporter/json_file_reporter_spec.ts +++ b/packages/benchpress/test/reporter/json_file_reporter_spec.ts @@ -8,7 +8,7 @@ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {JsonFileReporter, MeasureValues, Options, ReflectiveInjector, SampleDescription} from '../../index'; +import {Injector, JsonFileReporter, MeasureValues, Options, SampleDescription} from '../../index'; export function main() { describe('file reporter', () => { @@ -34,7 +34,7 @@ export function main() { } } ]; - return ReflectiveInjector.resolveAndCreate(providers).get(JsonFileReporter); + return Injector.create(providers).get(JsonFileReporter); } it('should write all data into a file', diff --git a/packages/benchpress/test/reporter/multi_reporter_spec.ts b/packages/benchpress/test/reporter/multi_reporter_spec.ts index 1ee54f2cde..aa1502e36b 100644 --- a/packages/benchpress/test/reporter/multi_reporter_spec.ts +++ b/packages/benchpress/test/reporter/multi_reporter_spec.ts @@ -8,12 +8,12 @@ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {MeasureValues, MultiReporter, ReflectiveInjector, Reporter} from '../../index'; +import {Injector, MeasureValues, MultiReporter, Reporter} from '../../index'; export function main() { function createReporters(ids: any[]) { - const r = ReflectiveInjector - .resolveAndCreate([ + const r = Injector + .create([ ids.map(id => ({provide: id, useValue: new MockReporter(id)})), MultiReporter.provideWith(ids) ]) diff --git a/packages/benchpress/test/runner_spec.ts b/packages/benchpress/test/runner_spec.ts index 7c4ee88847..27683730c5 100644 --- a/packages/benchpress/test/runner_spec.ts +++ b/packages/benchpress/test/runner_spec.ts @@ -8,11 +8,11 @@ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {Injector, Metric, Options, ReflectiveInjector, Runner, SampleDescription, SampleState, Sampler, Validator, WebDriverAdapter} from '../index'; +import {Injector, Metric, Options, Runner, SampleDescription, SampleState, Sampler, Validator, WebDriverAdapter} from '../index'; export function main() { describe('runner', () => { - let injector: ReflectiveInjector; + let injector: Injector; let runner: Runner; function createRunner(defaultProviders?: any[]): Runner { @@ -22,7 +22,7 @@ export function main() { runner = new Runner([ defaultProviders, { provide: Sampler, - useFactory: (_injector: ReflectiveInjector) => { + useFactory: (_injector: Injector) => { injector = _injector; return new MockSampler(); }, diff --git a/packages/benchpress/test/sampler_spec.ts b/packages/benchpress/test/sampler_spec.ts index e7e8339ee7..82ca5d6d64 100644 --- a/packages/benchpress/test/sampler_spec.ts +++ b/packages/benchpress/test/sampler_spec.ts @@ -8,7 +8,7 @@ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {MeasureValues, Metric, Options, ReflectiveInjector, Reporter, Sampler, Validator, WebDriverAdapter} from '../index'; +import {Injector, MeasureValues, Metric, Options, Reporter, Sampler, Validator, WebDriverAdapter} from '../index'; export function main() { const EMPTY_EXECUTE = () => {}; @@ -44,7 +44,7 @@ export function main() { providers.push({provide: Options.PREPARE, useValue: prepare}); } - sampler = ReflectiveInjector.resolveAndCreate(providers).get(Sampler); + sampler = Injector.create(providers).get(Sampler); } it('should call the prepare and execute callbacks using WebDriverAdapter.waitFor', diff --git a/packages/benchpress/test/validator/regression_slope_validator_spec.ts b/packages/benchpress/test/validator/regression_slope_validator_spec.ts index 75be174bef..3b8c3e02ce 100644 --- a/packages/benchpress/test/validator/regression_slope_validator_spec.ts +++ b/packages/benchpress/test/validator/regression_slope_validator_spec.ts @@ -8,15 +8,15 @@ import {describe, expect, it} from '@angular/core/testing/src/testing_internal'; -import {MeasureValues, ReflectiveInjector, RegressionSlopeValidator} from '../../index'; +import {Injector, MeasureValues, RegressionSlopeValidator} from '../../index'; export function main() { describe('regression slope validator', () => { let validator: RegressionSlopeValidator; function createValidator({size, metric}: {size: number, metric: string}) { - validator = ReflectiveInjector - .resolveAndCreate([ + validator = Injector + .create([ RegressionSlopeValidator.PROVIDERS, {provide: RegressionSlopeValidator.METRIC, useValue: metric}, {provide: RegressionSlopeValidator.SAMPLE_SIZE, useValue: size} diff --git a/packages/benchpress/test/validator/size_validator_spec.ts b/packages/benchpress/test/validator/size_validator_spec.ts index 99bc4b9951..da5a14ad57 100644 --- a/packages/benchpress/test/validator/size_validator_spec.ts +++ b/packages/benchpress/test/validator/size_validator_spec.ts @@ -8,7 +8,7 @@ import {describe, expect, it} from '@angular/core/testing/src/testing_internal'; -import {MeasureValues, ReflectiveInjector, SizeValidator} from '../../index'; +import {Injector, MeasureValues, SizeValidator} from '../../index'; export function main() { describe('size validator', () => { @@ -16,8 +16,8 @@ export function main() { function createValidator(size: number) { validator = - ReflectiveInjector - .resolveAndCreate( + Injector + .create( [SizeValidator.PROVIDERS, {provide: SizeValidator.SAMPLE_SIZE, useValue: size}]) .get(SizeValidator); } diff --git a/packages/benchpress/test/web_driver_extension_spec.ts b/packages/benchpress/test/web_driver_extension_spec.ts index 37fdab29ab..178f851262 100644 --- a/packages/benchpress/test/web_driver_extension_spec.ts +++ b/packages/benchpress/test/web_driver_extension_spec.ts @@ -8,14 +8,14 @@ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {Options, ReflectiveInjector, WebDriverExtension} from '../index'; +import {Injector, Options, WebDriverExtension} from '../index'; export function main() { function createExtension(ids: any[], caps: any) { return new Promise((res, rej) => { try { - res(ReflectiveInjector - .resolveAndCreate([ + res(Injector + .create([ ids.map((id) => ({provide: id, useValue: new MockExtension(id)})), {provide: Options.CAPABILITIES, useValue: caps}, WebDriverExtension.provideFirstSupported(ids) diff --git a/packages/benchpress/test/webdriver/chrome_driver_extension_spec.ts b/packages/benchpress/test/webdriver/chrome_driver_extension_spec.ts index f12d8a8bd6..ebb17e3d9b 100644 --- a/packages/benchpress/test/webdriver/chrome_driver_extension_spec.ts +++ b/packages/benchpress/test/webdriver/chrome_driver_extension_spec.ts @@ -8,7 +8,7 @@ import {AsyncTestCompleter, describe, expect, iit, inject, it} from '@angular/core/testing/src/testing_internal'; -import {ChromeDriverExtension, Options, ReflectiveInjector, WebDriverAdapter, WebDriverExtension} from '../../index'; +import {ChromeDriverExtension, Injector, Options, WebDriverAdapter, WebDriverExtension} from '../../index'; import {TraceEventFactory} from '../trace_event_factory'; export function main() { @@ -41,8 +41,8 @@ export function main() { userAgent = CHROME45_USER_AGENT; } log = []; - extension = ReflectiveInjector - .resolveAndCreate([ + extension = Injector + .create([ ChromeDriverExtension.PROVIDERS, { provide: WebDriverAdapter, useValue: new MockDriverAdapter(log, perfRecords, messageMethod) diff --git a/packages/benchpress/test/webdriver/ios_driver_extension_spec.ts b/packages/benchpress/test/webdriver/ios_driver_extension_spec.ts index a91fc2982d..7ff0cd6b13 100644 --- a/packages/benchpress/test/webdriver/ios_driver_extension_spec.ts +++ b/packages/benchpress/test/webdriver/ios_driver_extension_spec.ts @@ -8,7 +8,7 @@ import {AsyncTestCompleter, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; -import {IOsDriverExtension, ReflectiveInjector, WebDriverAdapter, WebDriverExtension} from '../../index'; +import {IOsDriverExtension, Injector, WebDriverAdapter, WebDriverExtension} from '../../index'; import {TraceEventFactory} from '../trace_event_factory'; export function main() { @@ -24,8 +24,8 @@ export function main() { } log = []; extension = - ReflectiveInjector - .resolveAndCreate([ + Injector + .create([ IOsDriverExtension.PROVIDERS, {provide: WebDriverAdapter, useValue: new MockDriverAdapter(log, perfRecords)} ]) diff --git a/packages/common/src/directives/ng_component_outlet.ts b/packages/common/src/directives/ng_component_outlet.ts index 34e32c8e71..3c018a7803 100644 --- a/packages/common/src/directives/ng_component_outlet.ts +++ b/packages/common/src/directives/ng_component_outlet.ts @@ -6,7 +6,8 @@ * found in the LICENSE file at https://angular.io/license */ -import {ComponentFactoryResolver, ComponentRef, Directive, Injector, Input, NgModuleFactory, NgModuleRef, OnChanges, OnDestroy, Provider, SimpleChanges, Type, ViewContainerRef} from '@angular/core'; +import {ComponentFactoryResolver, ComponentRef, Directive, Injector, Input, NgModuleFactory, NgModuleRef, OnChanges, OnDestroy, SimpleChanges, StaticProvider, Type, ViewContainerRef} from '@angular/core'; + /** * Instantiates a single {@link Component} type and inserts its Host View into current View. diff --git a/packages/common/test/directives/ng_component_outlet_spec.ts b/packages/common/test/directives/ng_component_outlet_spec.ts index 0d897a97c1..45f2c5e8b3 100644 --- a/packages/common/test/directives/ng_component_outlet_spec.ts +++ b/packages/common/test/directives/ng_component_outlet_spec.ts @@ -8,7 +8,7 @@ import {CommonModule} from '@angular/common'; import {NgComponentOutlet} from '@angular/common/src/directives/ng_component_outlet'; -import {Compiler, Component, ComponentRef, Inject, InjectionToken, Injector, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory, Optional, Provider, QueryList, ReflectiveInjector, TemplateRef, Type, ViewChild, ViewChildren, ViewContainerRef} from '@angular/core'; +import {Compiler, Component, ComponentRef, Inject, InjectionToken, Injector, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory, Optional, QueryList, StaticProvider, TemplateRef, Type, ViewChild, ViewChildren, ViewContainerRef} from '@angular/core'; import {TestBed, async, fakeAsync} from '@angular/core/testing'; import {expect} from '@angular/platform-browser/testing/src/matchers'; @@ -96,7 +96,7 @@ export function main() { const uniqueValue = {}; fixture.componentInstance.currentComponent = InjectedComponent; - fixture.componentInstance.injector = ReflectiveInjector.resolveAndCreate( + fixture.componentInstance.injector = Injector.create( [{provide: TEST_TOKEN, useValue: uniqueValue}], fixture.componentRef.injector); fixture.detectChanges(); diff --git a/packages/compiler/src/aot/summary_serializer.ts b/packages/compiler/src/aot/summary_serializer.ts index f5d9432374..11e420a2d1 100644 --- a/packages/compiler/src/aot/summary_serializer.ts +++ b/packages/compiler/src/aot/summary_serializer.ts @@ -345,4 +345,4 @@ class FromJsonDeserializer extends ValueTransformer { return super.visitStringMap(map, context); } } -} \ No newline at end of file +} diff --git a/packages/compiler/src/jit/compiler_factory.ts b/packages/compiler/src/jit/compiler_factory.ts index fc2458ea0d..1e51157f0d 100644 --- a/packages/compiler/src/jit/compiler_factory.ts +++ b/packages/compiler/src/jit/compiler_factory.ts @@ -6,8 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ -import {COMPILER_OPTIONS, Compiler, CompilerFactory, CompilerOptions, Inject, InjectionToken, MissingTranslationStrategy, Optional, PlatformRef, Provider, ReflectiveInjector, TRANSLATIONS, TRANSLATIONS_FORMAT, Type, ViewEncapsulation, createPlatformFactory, isDevMode, platformCore, ɵConsole as Console} from '@angular/core'; +import {COMPILER_OPTIONS, Compiler, CompilerFactory, CompilerOptions, Inject, InjectionToken, Injector, MissingTranslationStrategy, Optional, PACKAGE_ROOT_URL, PlatformRef, StaticProvider, TRANSLATIONS, TRANSLATIONS_FORMAT, Type, ViewEncapsulation, createPlatformFactory, isDevMode, platformCore, ɵConsole as Console} from '@angular/core'; +import {StaticSymbolCache} from '../aot/static_symbol'; import {CompileReflector} from '../compile_reflector'; import {CompilerConfig} from '../config'; import {DirectiveNormalizer} from '../directive_normalizer'; @@ -16,7 +17,7 @@ import {Lexer} from '../expression_parser/lexer'; import {Parser} from '../expression_parser/parser'; import * as i18n from '../i18n/index'; import {CompilerInjectable} from '../injectable'; -import {CompileMetadataResolver} from '../metadata_resolver'; +import {CompileMetadataResolver, ERROR_COLLECTOR_TOKEN} from '../metadata_resolver'; import {HtmlParser} from '../ml_parser/html_parser'; import {NgModuleCompiler} from '../ng_module_compiler'; import {NgModuleResolver} from '../ng_module_resolver'; @@ -26,7 +27,7 @@ import {DomElementSchemaRegistry} from '../schema/dom_element_schema_registry'; import {ElementSchemaRegistry} from '../schema/element_schema_registry'; import {StyleCompiler} from '../style_compiler'; import {JitSummaryResolver, SummaryResolver} from '../summary_resolver'; -import {TemplateParser} from '../template_parser/template_parser'; +import {TEMPLATE_TRANSFORMS, TemplateParser} from '../template_parser/template_parser'; import {DEFAULT_PACKAGE_URL_PROVIDER, UrlResolver} from '../url_resolver'; import {ViewCompiler} from '../view_compiler/view_compiler'; @@ -45,17 +46,18 @@ const baseHtmlParser = new InjectionToken('HtmlParser'); * A set of providers that provide `JitCompiler` and its dependencies to use for * template compilation. */ -export const COMPILER_PROVIDERS: Array|{[k: string]: any}|any[]> = [ +export const COMPILER_PROVIDERS = [ {provide: CompileReflector, useValue: new JitReflector()}, {provide: ResourceLoader, useValue: _NO_RESOURCE_LOADER}, - JitSummaryResolver, + {provide: JitSummaryResolver, deps: []}, {provide: SummaryResolver, useExisting: JitSummaryResolver}, - Console, - Lexer, - Parser, + {provide: Console, deps: []}, + {provide: Lexer, deps: []}, + {provide: Parser, deps: [Lexer]}, { provide: baseHtmlParser, useClass: HtmlParser, + deps: [], }, { provide: i18n.I18NHtmlParser, @@ -78,22 +80,37 @@ export const COMPILER_PROVIDERS: Array|{[k: string]: any}|any[]> = provide: HtmlParser, useExisting: i18n.I18NHtmlParser, }, - TemplateParser, - DirectiveNormalizer, - CompileMetadataResolver, + { + provide: TemplateParser, deps: [CompilerConfig, CompileReflector, + Parser, ElementSchemaRegistry, + i18n.I18NHtmlParser, Console, [Optional, TEMPLATE_TRANSFORMS]] + }, + { provide: DirectiveNormalizer, deps: [ResourceLoader, UrlResolver, HtmlParser, CompilerConfig]}, + { provide: CompileMetadataResolver, deps: [CompilerConfig, NgModuleResolver, + DirectiveResolver, PipeResolver, + SummaryResolver, + ElementSchemaRegistry, + DirectiveNormalizer, Console, + [Optional, StaticSymbolCache], + CompileReflector, + [Optional, ERROR_COLLECTOR_TOKEN]]}, DEFAULT_PACKAGE_URL_PROVIDER, - StyleCompiler, - ViewCompiler, - NgModuleCompiler, - {provide: CompilerConfig, useValue: new CompilerConfig()}, - JitCompiler, - {provide: Compiler, useExisting: JitCompiler}, - DomElementSchemaRegistry, - {provide: ElementSchemaRegistry, useExisting: DomElementSchemaRegistry}, - UrlResolver, - DirectiveResolver, - PipeResolver, - NgModuleResolver, + { provide: StyleCompiler, deps: [UrlResolver]}, + { provide: ViewCompiler, deps: [CompilerConfig, CompileReflector, ElementSchemaRegistry]}, + { provide: NgModuleCompiler, deps: [CompileReflector] }, + { provide: CompilerConfig, useValue: new CompilerConfig()}, + { provide: JitCompiler, deps: [Injector, CompileMetadataResolver, + TemplateParser, StyleCompiler, + ViewCompiler, NgModuleCompiler, + SummaryResolver, CompilerConfig, + Console]}, + { provide: Compiler, useExisting: JitCompiler}, + { provide: DomElementSchemaRegistry, deps: []}, + { provide: ElementSchemaRegistry, useExisting: DomElementSchemaRegistry}, + { provide: UrlResolver, deps: [PACKAGE_ROOT_URL]}, + { provide: DirectiveResolver, deps: [CompileReflector]}, + { provide: PipeResolver, deps: [CompileReflector]}, + { provide: NgModuleResolver, deps: [CompileReflector]}, ]; @CompilerInjectable() @@ -112,7 +129,7 @@ export class JitCompilerFactory implements CompilerFactory { } createCompiler(options: CompilerOptions[] = []): Compiler { const opts = _mergeOptions(this._defaultOptions.concat(options)); - const injector = ReflectiveInjector.resolveAndCreate([ + const injector = Injector.create([ COMPILER_PROVIDERS, { provide: CompilerConfig, useFactory: () => { @@ -142,7 +159,7 @@ export class JitCompilerFactory implements CompilerFactory { */ export const platformCoreDynamic = createPlatformFactory(platformCore, 'coreDynamic', [ {provide: COMPILER_OPTIONS, useValue: {}, multi: true}, - {provide: CompilerFactory, useClass: JitCompilerFactory}, + {provide: CompilerFactory, useClass: JitCompilerFactory, deps: [COMPILER_OPTIONS]}, ]); function _mergeOptions(optionsArr: CompilerOptions[]): CompilerOptions { diff --git a/packages/compiler/src/view_compiler/view_compiler.ts b/packages/compiler/src/view_compiler/view_compiler.ts index 6398c06199..f0dca508b5 100644 --- a/packages/compiler/src/view_compiler/view_compiler.ts +++ b/packages/compiler/src/view_compiler/view_compiler.ts @@ -1071,4 +1071,4 @@ function calcStaticDynamicQueryFlags( flags |= NodeFlags.DynamicQuery; } return flags; -} \ No newline at end of file +} diff --git a/packages/compiler/test/directive_normalizer_spec.ts b/packages/compiler/test/directive_normalizer_spec.ts index 114f2672a0..bd68115eb1 100644 --- a/packages/compiler/test/directive_normalizer_spec.ts +++ b/packages/compiler/test/directive_normalizer_spec.ts @@ -328,10 +328,7 @@ export function main() { describe('normalizeExternalStylesheets', () => { - beforeEach(() => { - TestBed.configureCompiler( - {providers: [{provide: ResourceLoader, useClass: SpyResourceLoader}]}); - }); + beforeEach(() => { TestBed.configureCompiler({providers: [SpyResourceLoader.PROVIDE]}); }); it('should load an external stylesheet', inject( diff --git a/packages/compiler/test/i18n/integration_common.ts b/packages/compiler/test/i18n/integration_common.ts index b2abdb8d0d..4d7e37d620 100644 --- a/packages/compiler/test/i18n/integration_common.ts +++ b/packages/compiler/test/i18n/integration_common.ts @@ -26,6 +26,7 @@ export class I18nComponent { } export class FrLocalization extends NgLocalization { + public static PROVIDE = {provide: NgLocalization, useClass: FrLocalization, deps: []}; getPluralCategory(value: number): string { switch (value) { case 0: diff --git a/packages/compiler/test/i18n/integration_xliff2_spec.ts b/packages/compiler/test/i18n/integration_xliff2_spec.ts index 3594db225a..add927a8c1 100644 --- a/packages/compiler/test/i18n/integration_xliff2_spec.ts +++ b/packages/compiler/test/i18n/integration_xliff2_spec.ts @@ -26,8 +26,8 @@ export function main() { beforeEach(async(() => { TestBed.configureCompiler({ providers: [ - {provide: ResourceLoader, useClass: SpyResourceLoader}, - {provide: NgLocalization, useClass: FrLocalization}, + SpyResourceLoader.PROVIDE, + FrLocalization.PROVIDE, {provide: TRANSLATIONS, useValue: XLIFF2_TOMERGE}, {provide: TRANSLATIONS_FORMAT, useValue: 'xlf2'}, ] diff --git a/packages/compiler/test/i18n/integration_xliff_spec.ts b/packages/compiler/test/i18n/integration_xliff_spec.ts index 1bcc2f0cc6..7355fff485 100644 --- a/packages/compiler/test/i18n/integration_xliff_spec.ts +++ b/packages/compiler/test/i18n/integration_xliff_spec.ts @@ -26,8 +26,8 @@ export function main() { beforeEach(async(() => { TestBed.configureCompiler({ providers: [ - {provide: ResourceLoader, useClass: SpyResourceLoader}, - {provide: NgLocalization, useClass: FrLocalization}, + SpyResourceLoader.PROVIDE, + FrLocalization.PROVIDE, {provide: TRANSLATIONS, useValue: XLIFF_TOMERGE}, {provide: TRANSLATIONS_FORMAT, useValue: 'xliff'}, ] diff --git a/packages/compiler/test/i18n/integration_xmb_xtb_spec.ts b/packages/compiler/test/i18n/integration_xmb_xtb_spec.ts index ebd7c324f7..88f249a346 100644 --- a/packages/compiler/test/i18n/integration_xmb_xtb_spec.ts +++ b/packages/compiler/test/i18n/integration_xmb_xtb_spec.ts @@ -26,8 +26,8 @@ export function main() { beforeEach(async(() => { TestBed.configureCompiler({ providers: [ - {provide: ResourceLoader, useClass: SpyResourceLoader}, - {provide: NgLocalization, useClass: FrLocalization}, + SpyResourceLoader.PROVIDE, + FrLocalization.PROVIDE, {provide: TRANSLATIONS, useValue: XTB}, {provide: TRANSLATIONS_FORMAT, useValue: 'xtb'}, ] diff --git a/packages/compiler/test/runtime_compiler_spec.ts b/packages/compiler/test/runtime_compiler_spec.ts index 318ca06a1b..199e9e2827 100644 --- a/packages/compiler/test/runtime_compiler_spec.ts +++ b/packages/compiler/test/runtime_compiler_spec.ts @@ -36,7 +36,7 @@ export function main() { beforeEach(() => { TestBed.configureCompiler( - {providers: [{provide: ResourceLoader, useClass: StubResourceLoader}]}); + {providers: [{provide: ResourceLoader, useClass: StubResourceLoader, deps: []}]}); }); it('should throw when using a templateUrl that has not been compiled before', async(() => { @@ -68,7 +68,7 @@ export function main() { beforeEach(() => { TestBed.configureCompiler( - {providers: [{provide: ResourceLoader, useClass: StubResourceLoader}]}); + {providers: [{provide: ResourceLoader, useClass: StubResourceLoader, deps: []}]}); }); it('should allow to use templateUrl components that have been loaded before', async(() => { @@ -88,10 +88,7 @@ export function main() { let dirResolver: MockDirectiveResolver; let injector: Injector; - beforeEach(() => { - TestBed.configureCompiler( - {providers: [{provide: ResourceLoader, useClass: SpyResourceLoader}]}); - }); + beforeEach(() => { TestBed.configureCompiler({providers: [SpyResourceLoader.PROVIDE]}); }); beforeEach(fakeAsync(inject( [Compiler, ResourceLoader, DirectiveResolver, Injector], diff --git a/packages/compiler/test/spies.ts b/packages/compiler/test/spies.ts index b86939489a..54c2263c4a 100644 --- a/packages/compiler/test/spies.ts +++ b/packages/compiler/test/spies.ts @@ -11,5 +11,6 @@ import {ResourceLoader} from '@angular/compiler/src/resource_loader'; import {SpyObject} from '@angular/core/testing/src/testing_internal'; export class SpyResourceLoader extends SpyObject { + public static PROVIDE = {provide: ResourceLoader, useClass: SpyResourceLoader, deps: []}; constructor() { super(ResourceLoader); } } diff --git a/packages/compiler/test/template_parser/template_parser_spec.ts b/packages/compiler/test/template_parser/template_parser_spec.ts index c0a2fe8335..8204b2f67c 100644 --- a/packages/compiler/test/template_parser/template_parser_spec.ts +++ b/packages/compiler/test/template_parser/template_parser_spec.ts @@ -308,7 +308,7 @@ export function main() { TestBed.configureCompiler({ providers: [ TEST_COMPILER_PROVIDERS, - {provide: ElementSchemaRegistry, useClass: DomElementSchemaRegistry} + {provide: ElementSchemaRegistry, useClass: DomElementSchemaRegistry, deps: []} ] }); }); diff --git a/packages/compiler/testing/src/test_bindings.ts b/packages/compiler/testing/src/test_bindings.ts index 8812ac8ecb..4956bf64f4 100644 --- a/packages/compiler/testing/src/test_bindings.ts +++ b/packages/compiler/testing/src/test_bindings.ts @@ -20,6 +20,6 @@ export function createUrlResolverWithoutPackagePrefix(): UrlResolver { // TODO: get rid of it or move to a separate @angular/internal_testing package export const TEST_COMPILER_PROVIDERS: Provider[] = [ {provide: ElementSchemaRegistry, useValue: new MockSchemaRegistry({}, {}, {}, [], [])}, - {provide: ResourceLoader, useClass: MockResourceLoader}, - {provide: UrlResolver, useFactory: createUrlResolverWithoutPackagePrefix} + {provide: ResourceLoader, useClass: MockResourceLoader, deps: []}, + {provide: UrlResolver, useFactory: createUrlResolverWithoutPackagePrefix, deps: []} ]; diff --git a/packages/compiler/testing/src/testing.ts b/packages/compiler/testing/src/testing.ts index c77be42fd8..0d259fa709 100644 --- a/packages/compiler/testing/src/testing.ts +++ b/packages/compiler/testing/src/testing.ts @@ -28,7 +28,7 @@ export * from './pipe_resolver_mock'; import {createPlatformFactory, ModuleWithComponentFactories, Injectable, CompilerOptions, COMPILER_OPTIONS, CompilerFactory, ComponentFactory, NgModuleFactory, Injector, NgModule, Component, Directive, Pipe, Type, PlatformRef, ɵstringify} from '@angular/core'; import {MetadataOverride, ɵTestingCompilerFactory as TestingCompilerFactory, ɵTestingCompiler as TestingCompiler} from '@angular/core/testing'; -import {platformCoreDynamic, JitCompiler, DirectiveResolver, NgModuleResolver, PipeResolver, CompileMetadataResolver} from '@angular/compiler'; +import {platformCoreDynamic, JitCompiler, DirectiveResolver, NgModuleResolver, PipeResolver, CompileMetadataResolver, CompileReflector} from '@angular/compiler'; import {MockDirectiveResolver} from './directive_resolver_mock'; import {MockNgModuleResolver} from './ng_module_resolver_mock'; import {MockPipeResolver} from './pipe_resolver_mock'; @@ -124,15 +124,19 @@ export const platformCoreDynamicTesting: (extraProviders?: any[]) => PlatformRef provide: COMPILER_OPTIONS, useValue: { providers: [ - MockPipeResolver, + {provide: MockPipeResolver, deps: [Injector, CompileReflector]}, {provide: PipeResolver, useExisting: MockPipeResolver}, - MockDirectiveResolver, + {provide: MockDirectiveResolver, deps: [Injector, CompileReflector]}, {provide: DirectiveResolver, useExisting: MockDirectiveResolver}, - MockNgModuleResolver, + {provide: MockNgModuleResolver, deps: [Injector, CompileReflector]}, {provide: NgModuleResolver, useExisting: MockNgModuleResolver}, ] }, multi: true }, - {provide: TestingCompilerFactory, useClass: TestingCompilerFactoryImpl} + { + provide: TestingCompilerFactory, + useClass: TestingCompilerFactoryImpl, + deps: [CompilerFactory] + } ]); diff --git a/packages/core/src/application_ref.ts b/packages/core/src/application_ref.ts index ebb6a28b2d..a3dd39d563 100644 --- a/packages/core/src/application_ref.ts +++ b/packages/core/src/application_ref.ts @@ -19,7 +19,7 @@ import {isPromise} from '../src/util/lang'; import {ApplicationInitStatus} from './application_init'; import {APP_BOOTSTRAP_LISTENER, PLATFORM_INITIALIZER} from './application_tokens'; import {Console} from './console'; -import {Injectable, InjectionToken, Injector, Provider, ReflectiveInjector} from './di'; +import {Injectable, InjectionToken, Injector, StaticProvider} from './di'; import {CompilerFactory, CompilerOptions} from './linker/compiler'; import {ComponentFactory, ComponentRef} from './linker/component_factory'; import {ComponentFactoryBoundToModule, ComponentFactoryResolver} from './linker/component_factory_resolver'; @@ -99,17 +99,18 @@ export function createPlatform(injector: Injector): PlatformRef { * @experimental APIs related to application bootstrap are currently under review. */ export function createPlatformFactory( - parentPlatformFactory: ((extraProviders?: Provider[]) => PlatformRef) | null, name: string, - providers: Provider[] = []): (extraProviders?: Provider[]) => PlatformRef { + parentPlatformFactory: ((extraProviders?: StaticProvider[]) => PlatformRef) | null, + name: string, providers: StaticProvider[] = []): (extraProviders?: StaticProvider[]) => + PlatformRef { const marker = new InjectionToken(`Platform: ${name}`); - return (extraProviders: Provider[] = []) => { + return (extraProviders: StaticProvider[] = []) => { let platform = getPlatform(); if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) { if (parentPlatformFactory) { parentPlatformFactory( providers.concat(extraProviders).concat({provide: marker, useValue: true})); } else { - createPlatform(ReflectiveInjector.resolveAndCreate( + createPlatform(Injector.create( providers.concat(extraProviders).concat({provide: marker, useValue: true}))); } } @@ -292,8 +293,7 @@ export class PlatformRef_ extends PlatformRef { // Attention: Don't use ApplicationRef.run here, // as we want to be sure that all possible constructor calls are inside `ngZone.run`! return ngZone.run(() => { - const ngZoneInjector = - ReflectiveInjector.resolveAndCreate([{provide: NgZone, useValue: ngZone}], this.injector); + const ngZoneInjector = Injector.create([{provide: NgZone, useValue: ngZone}], this.injector); const moduleRef = >moduleFactory.create(ngZoneInjector); const exceptionHandler: ErrorHandler = moduleRef.injector.get(ErrorHandler, null); if (!exceptionHandler) { diff --git a/packages/core/src/change_detection/differs/iterable_differs.ts b/packages/core/src/change_detection/differs/iterable_differs.ts index 72bad7296b..d1daadc3b5 100644 --- a/packages/core/src/change_detection/differs/iterable_differs.ts +++ b/packages/core/src/change_detection/differs/iterable_differs.ts @@ -6,9 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ -import {Optional, Provider, SkipSelf} from '../../di'; +import {Optional, SkipSelf, StaticProvider} from '../../di'; import {ChangeDetectorRef} from '../change_detector_ref'; + /** * A type describing supported iterable types. * @@ -181,7 +182,7 @@ export class IterableDiffers { * }) * ``` */ - static extend(factories: IterableDifferFactory[]): Provider { + static extend(factories: IterableDifferFactory[]): StaticProvider { return { provide: IterableDiffers, useFactory: (parent: IterableDiffers) => { diff --git a/packages/core/src/change_detection/differs/keyvalue_differs.ts b/packages/core/src/change_detection/differs/keyvalue_differs.ts index f401ab8389..c6637ecf9d 100644 --- a/packages/core/src/change_detection/differs/keyvalue_differs.ts +++ b/packages/core/src/change_detection/differs/keyvalue_differs.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Optional, Provider, SkipSelf} from '../../di'; +import {Optional, SkipSelf, StaticProvider} from '../../di'; import {ChangeDetectorRef} from '../change_detector_ref'; @@ -156,7 +156,7 @@ export class KeyValueDiffers { * }) * ``` */ - static extend(factories: KeyValueDifferFactory[]): Provider { + static extend(factories: KeyValueDifferFactory[]): StaticProvider { return { provide: KeyValueDiffers, useFactory: (parent: KeyValueDiffers) => { diff --git a/packages/core/src/linker/compiler.ts b/packages/core/src/linker/compiler.ts index 28320877b8..f92bfc1f87 100644 --- a/packages/core/src/linker/compiler.ts +++ b/packages/core/src/linker/compiler.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Injectable, InjectionToken} from '../di'; +import {Injectable, InjectionToken, StaticProvider} from '../di'; import {MissingTranslationStrategy} from '../i18n/tokens'; import {ViewEncapsulation} from '../metadata'; import {Type} from '../type'; @@ -14,6 +14,7 @@ import {Type} from '../type'; import {ComponentFactory} from './component_factory'; import {NgModuleFactory} from './ng_module_factory'; + /** * Combination of NgModuleFactory and ComponentFactorys. * @@ -101,7 +102,7 @@ export type CompilerOptions = { useDebug?: boolean, useJit?: boolean, defaultEncapsulation?: ViewEncapsulation, - providers?: any[], + providers?: StaticProvider[], missingTranslation?: MissingTranslationStrategy, // Whether to support the `