From bf158e7ff0715aabeae3c2c1ac923bf8cc7e4cfd Mon Sep 17 00:00:00 2001 From: cexbrayat Date: Wed, 27 Jan 2021 09:20:53 +0100 Subject: [PATCH] fix(core): remove duplicated EMPTY_OBJ constant (#41066) The codebase currently contains several `EMPTY_OBJ` constants, and they can end up in the bundle of an application. A recent commit 6fbe219 tipped us off as it introduced several `noop` occurrences in the golden symbol files. After investigating, we decided to remove the duplicated symbols. This probably shaves only a few bytes, but this commit removes the duplicated functions, by always using the one in `core/src/utils/empty`. PR Close #41066 --- packages/core/src/render3/definition.ts | 3 +-- packages/core/src/render3/empty.ts | 25 ------------------- .../features/inherit_definition_feature.ts | 3 +-- .../render3/features/ng_onchanges_feature.ts | 2 +- .../core/src/render3/instructions/listener.ts | 2 +- packages/core/src/render3/jit/directive.ts | 3 +-- 6 files changed, 5 insertions(+), 33 deletions(-) delete mode 100644 packages/core/src/render3/empty.ts diff --git a/packages/core/src/render3/definition.ts b/packages/core/src/render3/definition.ts index 9f534f651e..865b8aa5b3 100644 --- a/packages/core/src/render3/definition.ts +++ b/packages/core/src/render3/definition.ts @@ -12,10 +12,9 @@ import {NgModuleDef, NgModuleType} from '../metadata/ng_module_def'; import {SchemaMetadata} from '../metadata/schema'; import {ViewEncapsulation} from '../metadata/view'; import {noSideEffects} from '../util/closure'; -import {EMPTY_ARRAY} from '../util/empty'; +import {EMPTY_ARRAY, EMPTY_OBJ} from '../util/empty'; import {initNgDevMode} from '../util/ng_dev_mode'; import {stringify} from '../util/stringify'; -import {EMPTY_OBJ} from './empty'; import {NG_COMP_DEF, NG_DIR_DEF, NG_LOC_ID_DEF, NG_MOD_DEF, NG_PIPE_DEF} from './fields'; import {ComponentDef, ComponentDefFeature, ComponentTemplate, ComponentType, ContentQueriesFunction, DirectiveDef, DirectiveDefFeature, DirectiveTypesOrFactory, HostBindingsFunction, PipeDef, PipeTypesOrFactory, ViewQueriesFunction} from './interfaces/definition'; import {AttributeMarker, TAttributes, TConstantsOrFactory} from './interfaces/node'; diff --git a/packages/core/src/render3/empty.ts b/packages/core/src/render3/empty.ts deleted file mode 100644 index 78ef36a82d..0000000000 --- a/packages/core/src/render3/empty.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -import {initNgDevMode} from '../util/ng_dev_mode'; - -/** - * This file contains reuseable "empty" symbols that can be used as default return values - * in different parts of the rendering code. Because the same symbols are returned, this - * allows for identity checks against these values to be consistently used by the framework - * code. - */ - -export const EMPTY_OBJ: {} = {}; - -// freezing the values prevents any code from accidentally inserting new values in -if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) { - // These property accesses can be ignored because ngDevMode will be set to false - // when optimizing code and the whole if statement will be dropped. - // tslint:disable-next-line:no-toplevel-property-access - Object.freeze(EMPTY_OBJ); -} diff --git a/packages/core/src/render3/features/inherit_definition_feature.ts b/packages/core/src/render3/features/inherit_definition_feature.ts index 7f454c6588..cbbc242829 100644 --- a/packages/core/src/render3/features/inherit_definition_feature.ts +++ b/packages/core/src/render3/features/inherit_definition_feature.ts @@ -7,9 +7,8 @@ */ import {Type, Writable} from '../../interface/type'; -import {EMPTY_ARRAY} from '../../util/empty'; +import {EMPTY_ARRAY, EMPTY_OBJ} from '../../util/empty'; import {fillProperties} from '../../util/property'; -import {EMPTY_OBJ} from '../empty'; import {ComponentDef, ContentQueriesFunction, DirectiveDef, DirectiveDefFeature, HostBindingsFunction, RenderFlags, ViewQueriesFunction} from '../interfaces/definition'; import {TAttributes} from '../interfaces/node'; import {isComponentDef} from '../interfaces/type_checks'; diff --git a/packages/core/src/render3/features/ng_onchanges_feature.ts b/packages/core/src/render3/features/ng_onchanges_feature.ts index a4b82c0df8..86d25476a6 100644 --- a/packages/core/src/render3/features/ng_onchanges_feature.ts +++ b/packages/core/src/render3/features/ng_onchanges_feature.ts @@ -8,7 +8,7 @@ import {OnChanges} from '../../interface/lifecycle_hooks'; import {SimpleChange, SimpleChanges} from '../../interface/simple_change'; -import {EMPTY_OBJ} from '../empty'; +import {EMPTY_OBJ} from '../../util/empty'; import {DirectiveDef, DirectiveDefFeature} from '../interfaces/definition'; /** diff --git a/packages/core/src/render3/instructions/listener.ts b/packages/core/src/render3/instructions/listener.ts index de3b2c6e35..2c5efd8784 100644 --- a/packages/core/src/render3/instructions/listener.ts +++ b/packages/core/src/render3/instructions/listener.ts @@ -8,8 +8,8 @@ import {assertIndexInRange} from '../../util/assert'; +import {EMPTY_OBJ} from '../../util/empty'; import {isObservable} from '../../util/lang'; -import {EMPTY_OBJ} from '../empty'; import {PropertyAliasValue, TNode, TNodeFlags, TNodeType} from '../interfaces/node'; import {GlobalTargetResolver, isProceduralRenderer, Renderer3} from '../interfaces/renderer'; import {RElement} from '../interfaces/renderer_dom'; diff --git a/packages/core/src/render3/jit/directive.ts b/packages/core/src/render3/jit/directive.ts index 91ce5262dd..a1283c7350 100644 --- a/packages/core/src/render3/jit/directive.ts +++ b/packages/core/src/render3/jit/directive.ts @@ -15,10 +15,9 @@ import {Query} from '../../metadata/di'; import {Component, Directive, Input} from '../../metadata/directives'; import {componentNeedsResolution, maybeQueueResolutionOfComponentResources} from '../../metadata/resource_loading'; import {ViewEncapsulation} from '../../metadata/view'; -import {EMPTY_ARRAY} from '../../util/empty'; +import {EMPTY_ARRAY, EMPTY_OBJ} from '../../util/empty'; import {initNgDevMode} from '../../util/ng_dev_mode'; import {getComponentDef, getDirectiveDef} from '../definition'; -import {EMPTY_OBJ} from '../empty'; import {NG_COMP_DEF, NG_DIR_DEF, NG_FACTORY_DEF} from '../fields'; import {ComponentType} from '../interfaces/definition'; import {stringifyForError} from '../util/stringify_utils';