build(bazel): Turning on strictPropertyInitialization for Angular. (#24572)

All errors for existing fields have been detected and suppressed with a
`!` assertion.

Issue/24571 is tracking proper clean up of those instances.

One-line change required in ivy/compilation.ts, because it appears that
the new syntax causes tsickle emitted node to no longer track their
original sourceFiles.

PR Close #24572
This commit is contained in:
Rado Kirov
2018-06-18 16:38:33 -07:00
committed by Miško Hevery
parent 39c7769c9e
commit c95437f15d
189 changed files with 1273 additions and 632 deletions

View File

@ -13,12 +13,18 @@
* and attribute have the same identifier.
*/
export class PropertyBinding {
bracketAttr: string;
bracketParenAttr: string;
parenAttr: string;
onAttr: string;
bindAttr: string;
bindonAttr: string;
// TODO(issue/24571): remove '!'.
bracketAttr !: string;
// TODO(issue/24571): remove '!'.
bracketParenAttr !: string;
// TODO(issue/24571): remove '!'.
parenAttr !: string;
// TODO(issue/24571): remove '!'.
onAttr !: string;
// TODO(issue/24571): remove '!'.
bindAttr !: string;
// TODO(issue/24571): remove '!'.
bindonAttr !: string;
constructor(public prop: string, public attr: string) { this.parseBinding(); }

View File

@ -158,7 +158,8 @@ export function downgradeComponent(info: {
* to preserve the synchronous nature of Angular 1's $compile.
*/
class ParentInjectorPromise {
private injector: Injector;
// TODO(issue/24571): remove '!'.
private injector !: Injector;
private injectorKey: string = controllerKey(INJECTOR_KEY);
private callbacks: ((injector: Injector) => any)[] = [];

View File

@ -22,10 +22,13 @@ export class DowngradeComponentAdapter {
private inputChangeCount: number = 0;
private inputChanges: SimpleChanges = {};
private componentScope: angular.IScope;
private componentRef: ComponentRef<any>;
// TODO(issue/24571): remove '!'.
private componentRef !: ComponentRef<any>;
private component: any;
private changeDetector: ChangeDetectorRef;
private viewChangeDetector: ChangeDetectorRef;
// TODO(issue/24571): remove '!'.
private changeDetector !: ChangeDetectorRef;
// TODO(issue/24571): remove '!'.
private viewChangeDetector !: ChangeDetectorRef;
constructor(
private element: angular.IAugmentedJQuery, private attrs: angular.IAttributes,

View File

@ -43,8 +43,10 @@ export function isFunction(value: any): value is Function {
export class Deferred<R> {
promise: Promise<R>;
resolve: (value?: R|PromiseLike<R>) => void;
reject: (error?: any) => void;
// TODO(issue/24571): remove '!'.
resolve !: (value?: R | PromiseLike<R>) => void;
// TODO(issue/24571): remove '!'.
reject !: (error?: any) => void;
constructor() {
this.promise = new Promise((res, rej) => {

View File

@ -112,10 +112,13 @@ export class UpgradeAdapter {
*/
private ng1ComponentsToBeUpgraded: {[name: string]: UpgradeNg1ComponentAdapterBuilder} = {};
private upgradedProviders: StaticProvider[] = [];
private ngZone: NgZone;
private ng1Module: angular.IModule;
// TODO(issue/24571): remove '!'.
private ngZone !: NgZone;
// TODO(issue/24571): remove '!'.
private ng1Module !: angular.IModule;
private moduleRef: NgModuleRef<any>|null = null;
private ng2BootstrapDeferred: Deferred<angular.IInjectorService>;
// TODO(issue/24571): remove '!'.
private ng2BootstrapDeferred !: Deferred<angular.IInjectorService>;
constructor(private ng2AppModule: Type<any>, private compilerOptions?: CompilerOptions) {
if (!ng2AppModule) {
@ -608,7 +611,8 @@ export class UpgradeAdapter {
* to preserve the synchronous nature of AngularJS's $compile.
*/
class ParentInjectorPromise {
private injector: Injector;
// TODO(issue/24571): remove '!'.
private injector !: Injector;
private callbacks: ((injector: Injector) => any)[] = [];
constructor(private element: angular.IAugmentedJQuery) {

View File

@ -22,7 +22,8 @@ const NOT_SUPPORTED: any = 'NOT_SUPPORTED';
export class UpgradeNg1ComponentAdapterBuilder {
type: Type<any>;
// TODO(issue/24571): remove '!'.
type !: Type<any>;
inputs: string[] = [];
inputsRename: string[] = [];
outputs: string[] = [];
@ -31,7 +32,8 @@ export class UpgradeNg1ComponentAdapterBuilder {
checkProperties: string[] = [];
propertyMap: {[name: string]: string} = {};
directive: angular.IDirective|null = null;
template: string;
// TODO(issue/24571): remove '!'.
template !: string;
constructor(public name: string) {
const selector =
@ -45,7 +47,8 @@ export class UpgradeNg1ComponentAdapterBuilder {
@Directive(directive)
class MyClass {
directive: angular.IDirective;
// TODO(issue/24571): remove '!'.
directive !: angular.IDirective;
constructor(
@Inject($SCOPE) scope: angular.IScope, injector: Injector, elementRef: ElementRef) {
const helper = new UpgradeHelper(injector, name, elementRef, this.directive);

View File

@ -76,14 +76,19 @@ export class UpgradeComponent implements OnInit, OnChanges, DoCheck, OnDestroy {
private directive: angular.IDirective;
private bindings: Bindings;
private controllerInstance: IControllerInstance;
private bindingDestination: IBindingDestination;
// TODO(issue/24571): remove '!'.
private controllerInstance !: IControllerInstance;
// TODO(issue/24571): remove '!'.
private bindingDestination !: IBindingDestination;
// We will be instantiating the controller in the `ngOnInit` hook, when the first `ngOnChanges`
// will have been already triggered. We store the `SimpleChanges` and "play them back" later.
private pendingChanges: SimpleChanges|null;
// We will be instantiating the controller in the `ngOnInit` hook, when the
// first `ngOnChanges` will have been already triggered. We store the
// `SimpleChanges` and "play them back" later.
// TODO(issue/24571): remove '!'.
private pendingChanges !: SimpleChanges | null;
private unregisterDoCheckWatcher: Function;
// TODO(issue/24571): remove '!'.
private unregisterDoCheckWatcher !: Function;
/**
* Create a new `UpgradeComponent` instance. You should not normally need to do this.