diff --git a/_goldens/test/_files/change_detection.outline.golden b/_goldens/test/_files/change_detection.outline.golden index a2e3742c60..76ca873862 100644 --- a/_goldens/test/_files/change_detection.outline.golden +++ b/_goldens/test/_files/change_detection.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'change_detection.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class CheckOnceComponent. external List get styles$CheckOnceComponent; diff --git a/_goldens/test/_files/component_loader_pattern.outline.golden b/_goldens/test/_files/component_loader_pattern.outline.golden index 3989b1df14..020ebb1289 100644 --- a/_goldens/test/_files/component_loader_pattern.outline.golden +++ b/_goldens/test/_files/component_loader_pattern.outline.golden @@ -12,10 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'component_loader_pattern.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; -import 'package:angular/di.template.dart' as di_lib; -import 'package:angular/security.template.dart' deferred as security_lib; -import 'example_of_file_that_is_not_generated_yet.template.dart' as example_lib; // For @Component class TestComponent. external List get styles$TestComponent; diff --git a/_goldens/test/_files/core_directives.outline.golden b/_goldens/test/_files/core_directives.outline.golden index 2260495795..c732090da3 100644 --- a/_goldens/test/_files/core_directives.outline.golden +++ b/_goldens/test/_files/core_directives.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'core_directives.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class TestFooComponent. external List get styles$TestFooComponent; diff --git a/_goldens/test/_files/dart2js/dart2js_golden.outline.golden b/_goldens/test/_files/dart2js/dart2js_golden.outline.golden index 596aef091b..af085c83fc 100644 --- a/_goldens/test/_files/dart2js/dart2js_golden.outline.golden +++ b/_goldens/test/_files/dart2js/dart2js_golden.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'dart2js_golden.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; -import 'dart2js_golden.template.dart' as ng; // For @Component class RootComponent. external List get styles$RootComponent; diff --git a/_goldens/test/_files/deferred/container_component.outline.golden b/_goldens/test/_files/deferred/container_component.outline.golden index 892a902d81..d6b8cf1e5b 100644 --- a/_goldens/test/_files/deferred/container_component.outline.golden +++ b/_goldens/test/_files/deferred/container_component.outline.golden @@ -12,9 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'container_component.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; -import 'package:_goldens/component.dart'; -import 'deferred_component.dart'; // For @Component class TestContainerComponent. external List get styles$TestContainerComponent; diff --git a/_goldens/test/_files/deferred/deferred_component.outline.golden b/_goldens/test/_files/deferred/deferred_component.outline.golden index b212a134f0..df630c956e 100644 --- a/_goldens/test/_files/deferred/deferred_component.outline.golden +++ b/_goldens/test/_files/deferred/deferred_component.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'deferred_component.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class DeferredChildComponent. external List get styles$DeferredChildComponent; diff --git a/_goldens/test/_files/di/generated_injectors.outline.golden b/_goldens/test/_files/di/generated_injectors.outline.golden index 078aacf51c..a4e4394b71 100644 --- a/_goldens/test/_files/di/generated_injectors.outline.golden +++ b/_goldens/test/_files/di/generated_injectors.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'generated_injectors.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; -import 'generated_injectors.template.dart' as ng; external Injector doGenerate$Injector([Injector parent]); diff --git a/_goldens/test/_files/directives/base_component.outline.golden b/_goldens/test/_files/directives/base_component.outline.golden index 802f558b09..d7ac6b6f51 100644 --- a/_goldens/test/_files/directives/base_component.outline.golden +++ b/_goldens/test/_files/directives/base_component.outline.golden @@ -12,9 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'base_component.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; -import 'components.dart'; -import 'directives.dart' as directive; // For @Component class TestFooComponent. external List get styles$TestFooComponent; diff --git a/_goldens/test/_files/directives/components.outline.golden b/_goldens/test/_files/directives/components.outline.golden index 117be4448d..096f985878 100644 --- a/_goldens/test/_files/directives/components.outline.golden +++ b/_goldens/test/_files/directives/components.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'components.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class TestSubComponent. external List get styles$TestSubComponent; diff --git a/_goldens/test/_files/directives/directive_wrapper.outline.golden b/_goldens/test/_files/directives/directive_wrapper.outline.golden index 88e8f62905..e03a92298c 100644 --- a/_goldens/test/_files/directives/directive_wrapper.outline.golden +++ b/_goldens/test/_files/directives/directive_wrapper.outline.golden @@ -12,9 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'directive_wrapper.dart' as _user; // Required for "type inference" (scoping). -import 'dart:async'; -import 'dart:html'; -import 'package:angular/angular.dart'; // For @Component class TestFooComponent. external List get styles$TestFooComponent; diff --git a/_goldens/test/_files/directives/directives.outline.golden b/_goldens/test/_files/directives/directives.outline.golden index 0567372db0..e7b216da14 100644 --- a/_goldens/test/_files/directives/directives.outline.golden +++ b/_goldens/test/_files/directives/directives.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'directives.dart' as _user; // Required for "type inference" (scoping). -import 'dart:collection' as collection_lib; -import 'package:angular/angular.dart'; // For @Directive class TestDirective. class TestDirectiveNgCd extends DirectiveChangeDetector { diff --git a/_goldens/test/_files/directives/functional_directives.outline.golden b/_goldens/test/_files/directives/functional_directives.outline.golden index cc96de134a..18a5b81503 100644 --- a/_goldens/test/_files/directives/functional_directives.outline.golden +++ b/_goldens/test/_files/directives/functional_directives.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'functional_directives.dart' as _user; // Required for "type inference" (scoping). -import 'dart:html'; -import 'package:angular/angular.dart'; // For @Component class AppComponent. external List get styles$AppComponent; diff --git a/_goldens/test/_files/directives/generics.outline.golden b/_goldens/test/_files/directives/generics.outline.golden index edbe0afe3e..22385b797b 100644 --- a/_goldens/test/_files/directives/generics.outline.golden +++ b/_goldens/test/_files/directives/generics.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'generics.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class UntypedComp. external List get styles$UntypedComp; diff --git a/_goldens/test/_files/directives/import_prefixes.dart b/_goldens/test/_files/directives/import_prefixes.dart new file mode 100644 index 0000000000..484e5d6ad4 --- /dev/null +++ b/_goldens/test/_files/directives/import_prefixes.dart @@ -0,0 +1,28 @@ +import 'package:angular/angular.dart' as angular; + +// This is silly, but just for simplified testing. +import 'import_prefixes.dart' as prefixed; + +@angular.Component( + selector: 'parent-comp', + directives: [ + prefixed.ChildComponent, + ], + template: '', +) +class ParentComponent { + final input = new prefixed.MyType(); +} + +@angular.Component( + selector: 'child-cmp', + template: r''' + {{myType}} + ''', +) +class ChildComponent { + @angular.Input() + prefixed.MyType myType; +} + +class MyType {} diff --git a/_goldens/test/_files/directives/import_prefixes.outline.golden b/_goldens/test/_files/directives/import_prefixes.outline.golden new file mode 100644 index 0000000000..08f1bda0b7 --- /dev/null +++ b/_goldens/test/_files/directives/import_prefixes.outline.golden @@ -0,0 +1,31 @@ +// ignore_for_file: library_prefixes,unused_import,no_default_super_constructor_explicit,duplicate_import,unused_shown_name +// The .template.dart files also export the user code. +export 'import_prefixes.dart'; + +// Required for referencing runtime code. +import 'dart:html'; +import 'package:angular/angular.dart'; +import 'package:angular/src/core/change_detection/directive_change_detector.dart'; +import 'package:angular/src/core/linker/app_view.dart'; + +// Required for specifically referencing user code. +import 'import_prefixes.dart' as _user; + +// Required for "type inference" (scoping). + +// For @Component class ParentComponent. +external List get styles$ParentComponent; +external ComponentFactory<_user.ParentComponent> get ParentComponentNgFactory; +external AppView<_user.ParentComponent> viewFactory_ParentComponent0(AppView parentView, int parentIndex); +class ViewParentComponent0 extends AppView<_user.ParentComponent> { + external ViewParentComponent0(AppView parentView, int parentIndex); +} +// For @Component class ChildComponent. +external List get styles$ChildComponent; +external ComponentFactory<_user.ChildComponent> get ChildComponentNgFactory; +external AppView<_user.ChildComponent> viewFactory_ChildComponent0(AppView parentView, int parentIndex); +class ViewChildComponent0 extends AppView<_user.ChildComponent> { + external ViewChildComponent0(AppView parentView, int parentIndex); +} + +external void initReflector(); diff --git a/_goldens/test/_files/directives/import_prefixes.template.golden b/_goldens/test/_files/directives/import_prefixes.template.golden new file mode 100644 index 0000000000..47cd5fe40c --- /dev/null +++ b/_goldens/test/_files/directives/import_prefixes.template.golden @@ -0,0 +1,178 @@ +// ************************************************************************** +// Generator: Instance of 'Compiler' +// ************************************************************************** + +// ignore_for_file: cancel_subscriptions,constant_identifier_names,duplicate_import,non_constant_identifier_names,library_prefixes,UNUSED_IMPORT,UNUSED_SHOWN_NAME +import 'import_prefixes.dart'; +export 'import_prefixes.dart'; +import 'package:angular/angular.dart' as angular; +import 'import_prefixes.dart' as prefixed; +import 'package:angular/src/di/reflector.dart' as _ngRef; +import 'package:angular/angular.template.dart' as _ref0; +import 'package:angular/src/core/linker/app_view.dart'; +import 'import_prefixes.dart' as import1; +import 'dart:html' as import2; +import 'package:angular/src/core/render/api.dart'; +import 'package:angular/src/core/linker/view_type.dart' as import4; +import 'package:angular/src/core/change_detection/change_detection.dart'; +import 'package:angular/src/core/linker/app_view_utils.dart' as import6; +import 'package:angular/src/runtime.dart' as import7; +import 'package:angular/angular.dart'; + +final List styles$ParentComponent = const []; + +class ViewParentComponent0 extends AppView { + import2.Element _el_0; + static RenderComponentType _renderType; + ViewParentComponent0(AppView parentView, int parentIndex) : super(import4.ViewType.component, {}, parentView, parentIndex, ChangeDetectionStrategy.CheckAlways) { + rootEl = import2.document.createElement('parent-comp'); + _renderType ??= import6.appViewUtils.createRenderType((import7.isDevMode ? 'asset:_goldens/test/_files/directives/import_prefixes.dart' : null), ViewEncapsulation.None, styles$ParentComponent); + setupComponentType(_renderType); + } + @override + ComponentRef build() { + final _rootEl = rootEl; + final import2.HtmlElement parentRenderNode = initViewRoot(_rootEl); + var doc = import2.document; + _el_0 = createAndAppend(doc, 'child-comp', parentRenderNode); + init(const [], null); + return null; + } + + @override + void detectChangesInternal() { + final import1.ParentComponent _ctx = ctx; + bool firstCheck = (this.cdState == 0); + if (firstCheck) { + if (!identical(_ctx.input, null)) { + setProp(_el_0, 'myType', _ctx.input); + } + } + } +} + +AppView viewFactory_ParentComponent0(AppView parentView, int parentIndex) { + return new ViewParentComponent0(parentView, parentIndex); +} + +final List styles$ParentComponentHost = const []; + +class _ViewParentComponentHost0 extends AppView { + ViewParentComponent0 _compView_0; + import1.ParentComponent _ParentComponent_0_5; + _ViewParentComponentHost0(AppView parentView, int parentIndex) : super(import4.ViewType.host, {}, parentView, parentIndex, ChangeDetectionStrategy.CheckAlways); + @override + ComponentRef build() { + _compView_0 = new ViewParentComponent0(this, 0); + rootEl = _compView_0.rootEl; + _ParentComponent_0_5 = new import1.ParentComponent(); + _compView_0.create(_ParentComponent_0_5, projectableNodes); + init0(rootEl); + return new ComponentRef(0, this, rootEl, _ParentComponent_0_5); + } + + @override + void detectChangesInternal() { + _compView_0.detectChanges(); + } + + @override + void destroyInternal() { + _compView_0?.destroy(); + } +} + +AppView viewFactory_ParentComponentHost0(AppView parentView, int parentIndex) { + return new _ViewParentComponentHost0(parentView, parentIndex); +} + +const ComponentFactory _ParentComponentNgFactory = const ComponentFactory('parent-comp', viewFactory_ParentComponentHost0, _ParentComponentMetadata); +ComponentFactory get ParentComponentNgFactory { + return _ParentComponentNgFactory; +} + +final List styles$ChildComponent = const []; + +class ViewChildComponent0 extends AppView { + import2.Text _text_0; + var _expr_0; + static RenderComponentType _renderType; + ViewChildComponent0(AppView parentView, int parentIndex) : super(import4.ViewType.component, {}, parentView, parentIndex, ChangeDetectionStrategy.CheckAlways) { + rootEl = import2.document.createElement('child-cmp'); + _renderType ??= import6.appViewUtils.createRenderType((import7.isDevMode ? 'asset:_goldens/test/_files/directives/import_prefixes.dart' : null), ViewEncapsulation.None, styles$ChildComponent); + setupComponentType(_renderType); + } + @override + ComponentRef build() { + final _rootEl = rootEl; + final import2.HtmlElement parentRenderNode = initViewRoot(_rootEl); + _text_0 = new import2.Text(''); + parentRenderNode.append(_text_0); + init(const [], null); + return null; + } + + @override + void detectChangesInternal() { + final import1.ChildComponent _ctx = ctx; + final currVal_0 = import6.interpolate0(_ctx.myType); + if (import6.checkBinding(_expr_0, currVal_0)) { + _text_0.text = currVal_0; + _expr_0 = currVal_0; + } + } +} + +AppView viewFactory_ChildComponent0(AppView parentView, int parentIndex) { + return new ViewChildComponent0(parentView, parentIndex); +} + +final List styles$ChildComponentHost = const []; + +class _ViewChildComponentHost0 extends AppView { + ViewChildComponent0 _compView_0; + import1.ChildComponent _ChildComponent_0_5; + _ViewChildComponentHost0(AppView parentView, int parentIndex) : super(import4.ViewType.host, {}, parentView, parentIndex, ChangeDetectionStrategy.CheckAlways); + @override + ComponentRef build() { + _compView_0 = new ViewChildComponent0(this, 0); + rootEl = _compView_0.rootEl; + _ChildComponent_0_5 = new import1.ChildComponent(); + _compView_0.create(_ChildComponent_0_5, projectableNodes); + init0(rootEl); + return new ComponentRef(0, this, rootEl, _ChildComponent_0_5); + } + + @override + void detectChangesInternal() { + _compView_0.detectChanges(); + } + + @override + void destroyInternal() { + _compView_0?.destroy(); + } +} + +AppView viewFactory_ChildComponentHost0(AppView parentView, int parentIndex) { + return new _ViewChildComponentHost0(parentView, parentIndex); +} + +const ComponentFactory _ChildComponentNgFactory = const ComponentFactory('child-cmp', viewFactory_ChildComponentHost0, _ChildComponentMetadata); +ComponentFactory get ChildComponentNgFactory { + return _ChildComponentNgFactory; +} + +const _ParentComponentMetadata = const []; +const _ChildComponentMetadata = const []; +var _visited = false; +void initReflector() { + if (_visited) { + return; + } + _visited = true; + + _ngRef.registerComponent(ParentComponent, ParentComponentNgFactory); + _ngRef.registerComponent(ChildComponent, ChildComponentNgFactory); + _ref0.initReflector(); +} diff --git a/_goldens/test/_files/directives/intl_component.outline.golden b/_goldens/test/_files/directives/intl_component.outline.golden index 775b3da564..f4065d7479 100644 --- a/_goldens/test/_files/directives/intl_component.outline.golden +++ b/_goldens/test/_files/directives/intl_component.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'intl_component.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class CompWithoutFinal. external List get styles$CompWithoutFinal; diff --git a/_goldens/test/_files/directives/nested_ng_for.outline.golden b/_goldens/test/_files/directives/nested_ng_for.outline.golden index 0676469e75..80de3c8422 100644 --- a/_goldens/test/_files/directives/nested_ng_for.outline.golden +++ b/_goldens/test/_files/directives/nested_ng_for.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'nested_ng_for.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class NestedNgForComponent. external List get styles$NestedNgForComponent; diff --git a/_goldens/test/_files/empty_properties.outline.golden b/_goldens/test/_files/empty_properties.outline.golden index 464420d702..66774346a4 100644 --- a/_goldens/test/_files/empty_properties.outline.golden +++ b/_goldens/test/_files/empty_properties.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'empty_properties.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class EmptyPropertiesComponent. external List get styles$EmptyPropertiesComponent; diff --git a/_goldens/test/_files/event_tearoff.outline.golden b/_goldens/test/_files/event_tearoff.outline.golden index fe3f0699ba..0191b83405 100644 --- a/_goldens/test/_files/event_tearoff.outline.golden +++ b/_goldens/test/_files/event_tearoff.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'event_tearoff.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class UsesEventTearoff. external List get styles$UsesEventTearoff; diff --git a/_goldens/test/_files/events.outline.golden b/_goldens/test/_files/events.outline.golden index 44e768ee23..1402f558c6 100644 --- a/_goldens/test/_files/events.outline.golden +++ b/_goldens/test/_files/events.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'events.dart' as _user; // Required for "type inference" (scoping). -import 'dart:async'; -import 'package:angular/angular.dart'; // For @Component class UsesNativeEvents. external List get styles$UsesNativeEvents; diff --git a/_goldens/test/_files/export_as.outline.golden b/_goldens/test/_files/export_as.outline.golden index 9cc2f101f3..a3b3cb9bfa 100644 --- a/_goldens/test/_files/export_as.outline.golden +++ b/_goldens/test/_files/export_as.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'export_as.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class TestFooComponent. external List get styles$TestFooComponent; diff --git a/_goldens/test/_files/has_directives.outline.golden b/_goldens/test/_files/has_directives.outline.golden index 5398308730..2f200ca27e 100644 --- a/_goldens/test/_files/has_directives.outline.golden +++ b/_goldens/test/_files/has_directives.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'has_directives.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class TestFooComponent. external List get styles$TestFooComponent; diff --git a/_goldens/test/_files/host.outline.golden b/_goldens/test/_files/host.outline.golden index 256118de89..e67b948ce3 100644 --- a/_goldens/test/_files/host.outline.golden +++ b/_goldens/test/_files/host.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'host.dart' as _user; // Required for "type inference" (scoping). -import 'dart:async'; -import 'package:angular/angular.dart'; // For @Component class HostComponentNewSyntax. external List get styles$HostComponentNewSyntax; diff --git a/_goldens/test/_files/i18n/attribute.outline.golden b/_goldens/test/_files/i18n/attribute.outline.golden index 4943f7c1b8..bc485bf437 100644 --- a/_goldens/test/_files/i18n/attribute.outline.golden +++ b/_goldens/test/_files/i18n/attribute.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'attribute.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class I18nAttributeComponent. external List get styles$I18nAttributeComponent; diff --git a/_goldens/test/_files/i18n/html.outline.golden b/_goldens/test/_files/i18n/html.outline.golden index e8052e6553..50ef10ba58 100644 --- a/_goldens/test/_files/i18n/html.outline.golden +++ b/_goldens/test/_files/i18n/html.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'html.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class I18nHtmlComponent. external List get styles$I18nHtmlComponent; diff --git a/_goldens/test/_files/i18n/text.outline.golden b/_goldens/test/_files/i18n/text.outline.golden index 38f1d4188f..0708520b86 100644 --- a/_goldens/test/_files/i18n/text.outline.golden +++ b/_goldens/test/_files/i18n/text.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'text.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class I18nTextComponent. external List get styles$I18nTextComponent; diff --git a/_goldens/test/_files/inherited_lifecycle_hooks.outline.golden b/_goldens/test/_files/inherited_lifecycle_hooks.outline.golden index b3542f14d9..d4f2c1f810 100644 --- a/_goldens/test/_files/inherited_lifecycle_hooks.outline.golden +++ b/_goldens/test/_files/inherited_lifecycle_hooks.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'inherited_lifecycle_hooks.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class LifecycleHooksComponent. external List get styles$LifecycleHooksComponent; diff --git a/_goldens/test/_files/injectables.outline.golden b/_goldens/test/_files/injectables.outline.golden index 92af664057..4e9481b9b9 100644 --- a/_goldens/test/_files/injectables.outline.golden +++ b/_goldens/test/_files/injectables.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'injectables.dart' as _user; // Required for "type inference" (scoping). -import 'dart:html' as html; -import 'package:angular/angular.dart'; // For @Component class InjectableComponent. external List get styles$InjectableComponent; diff --git a/_goldens/test/_files/inlined_ngif.outline.golden b/_goldens/test/_files/inlined_ngif.outline.golden index ed5d67c905..125a85a85a 100644 --- a/_goldens/test/_files/inlined_ngif.outline.golden +++ b/_goldens/test/_files/inlined_ngif.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'inlined_ngif.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class InlinedNgIfComponent. external List get styles$InlinedNgIfComponent; diff --git a/_goldens/test/_files/interpolation.outline.golden b/_goldens/test/_files/interpolation.outline.golden index 1e87de791e..1d9d36ae91 100644 --- a/_goldens/test/_files/interpolation.outline.golden +++ b/_goldens/test/_files/interpolation.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'interpolation.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class InterpolationComponent. external List get styles$InterpolationComponent; diff --git a/_goldens/test/_files/lifecycle_hooks.outline.golden b/_goldens/test/_files/lifecycle_hooks.outline.golden index 3dded67206..2a29d4c831 100644 --- a/_goldens/test/_files/lifecycle_hooks.outline.golden +++ b/_goldens/test/_files/lifecycle_hooks.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'lifecycle_hooks.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class LifecycleHooksComponent. external List get styles$LifecycleHooksComponent; diff --git a/_goldens/test/_files/opaque_token.outline.golden b/_goldens/test/_files/opaque_token.outline.golden index f28fbfb0de..2ac22efdc8 100644 --- a/_goldens/test/_files/opaque_token.outline.golden +++ b/_goldens/test/_files/opaque_token.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'opaque_token.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class HasOpaqueTokens. external List get styles$HasOpaqueTokens; diff --git a/_goldens/test/_files/pipes.outline.golden b/_goldens/test/_files/pipes.outline.golden index 18a202aac9..d2e319a090 100644 --- a/_goldens/test/_files/pipes.outline.golden +++ b/_goldens/test/_files/pipes.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'pipes.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class Comp. external List get styles$Comp; diff --git a/_goldens/test/_files/provider_modules.outline.golden b/_goldens/test/_files/provider_modules.outline.golden index dddefe4268..28f6664bfb 100644 --- a/_goldens/test/_files/provider_modules.outline.golden +++ b/_goldens/test/_files/provider_modules.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'provider_modules.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class ProviderModulesComponent. external List get styles$ProviderModulesComponent; diff --git a/_goldens/test/_files/providers.outline.golden b/_goldens/test/_files/providers.outline.golden index b9bd111c03..ff123e1bc5 100644 --- a/_goldens/test/_files/providers.outline.golden +++ b/_goldens/test/_files/providers.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'providers.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class ProvidersComponent. external List get styles$ProvidersComponent; diff --git a/_goldens/test/_files/queries.outline.golden b/_goldens/test/_files/queries.outline.golden index 79fd9cad53..767d6ff304 100644 --- a/_goldens/test/_files/queries.outline.golden +++ b/_goldens/test/_files/queries.outline.golden @@ -12,8 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'queries.dart' as _user; // Required for "type inference" (scoping). -import 'dart:html'; -import 'package:angular/angular.dart'; // For @Component class QueriesComponent. external List get styles$QueriesComponent; diff --git a/_goldens/test/_files/templates/has_template_file.outline.golden b/_goldens/test/_files/templates/has_template_file.outline.golden index c4a4c642b1..655156970c 100644 --- a/_goldens/test/_files/templates/has_template_file.outline.golden +++ b/_goldens/test/_files/templates/has_template_file.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'has_template_file.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class HasTemplateFileComponent. external List get styles$HasTemplateFileComponent; diff --git a/_goldens/test/_files/view_encapsulation.outline.golden b/_goldens/test/_files/view_encapsulation.outline.golden index 23c185699e..add1b7a96d 100644 --- a/_goldens/test/_files/view_encapsulation.outline.golden +++ b/_goldens/test/_files/view_encapsulation.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'view_encapsulation.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class EmulatedComponent. external List get styles$EmulatedComponent; diff --git a/_goldens/test/_files/visibility.outline.golden b/_goldens/test/_files/visibility.outline.golden index c33b45f4bf..577a33e463 100644 --- a/_goldens/test/_files/visibility.outline.golden +++ b/_goldens/test/_files/visibility.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'visibility.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class Dependent. external List get styles$Dependent; diff --git a/_goldens/test/_files/whitespace.outline.golden b/_goldens/test/_files/whitespace.outline.golden index bd273d123a..6dc482b218 100644 --- a/_goldens/test/_files/whitespace.outline.golden +++ b/_goldens/test/_files/whitespace.outline.golden @@ -12,7 +12,6 @@ import 'package:angular/src/core/linker/app_view.dart'; import 'whitespace.dart' as _user; // Required for "type inference" (scoping). -import 'package:angular/angular.dart'; // For @Component class PreserveWhitespace. external List get styles$PreserveWhitespace; diff --git a/angular/lib/src/source_gen/template_compiler/code_builder.dart b/angular/lib/src/source_gen/template_compiler/code_builder.dart index 06f47765f9..efef63661b 100644 --- a/angular/lib/src/source_gen/template_compiler/code_builder.dart +++ b/angular/lib/src/source_gen/template_compiler/code_builder.dart @@ -1,4 +1,3 @@ -import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:angular_compiler/angular_compiler.dart'; import 'package:source_gen/source_gen.dart' show LibraryReader; @@ -47,12 +46,14 @@ String buildGeneratedCode( buffer.writeln("import '$sourceFile';"); buffer.writeln("export '$sourceFile';"); - // Write all other imports and exports out directly. - final astLibrary = element.definingCompilationUnit.computeNode(); - for (final directive in astLibrary.directives) { - if ((directive is ImportDirective && directive.deferredKeyword == null) || - buffer is ExportDirective) { - buffer.writeln(directive.toSource()); + // Write all other imports out directly. + for (final d in element.imports) { + if (!d.isDeferred && d.uri != null) { + var directive = "import '${d.uri}'"; + if (d.prefix != null) { + directive += ' as ${d.prefix.name}'; + } + buffer.writeln('$directive;'); } } diff --git a/angular_compiler/lib/src/analyzer/reflector.dart b/angular_compiler/lib/src/analyzer/reflector.dart index 3b6e41682e..3a29b7ecfe 100644 --- a/angular_compiler/lib/src/analyzer/reflector.dart +++ b/angular_compiler/lib/src/analyzer/reflector.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:analyzer/dart/ast/ast.dart' as ast; import 'package:analyzer/dart/element/element.dart'; import 'package:angular_compiler/cli.dart'; import 'package:collection/collection.dart'; @@ -167,12 +166,13 @@ class ReflectableReader { } Future> _resolveNeedsReflector(LibraryElement library) async { - final directives = library.definingCompilationUnit.computeNode().directives; + final directives = [] + ..addAll(library.imports) + ..addAll(library.exports); final results = []; await Future.wait(directives.map((d) async { - if (d is! ast.PartDirective && - await _needsInitReflector(d, library.source.uri.toString())) { - var uri = (d as ast.UriBasedDirective).uri.stringValue; + if (await _needsInitReflector(d, library.source.uri.toString())) { + var uri = d.uri ?? ''; // Always link to the .template.dart file equivalent of a file. if (!uri.endsWith(outputExtension)) { uri = _withOutputExtension(uri); @@ -185,38 +185,27 @@ class ReflectableReader { // Determines whether initReflector needs to link to [directive]. Future _needsInitReflector( - ast.Directive directive, + UriReferencedElement directive, String sourceUri, ) async { - if (directive is ast.ExportDirective && - directive.uri.stringValue.endsWith(outputExtension)) { - // Always link when manually exporting .template.dart files. - return true; - } - if (directive is ast.ImportDirective) { + if (directive is ImportElement && directive.isDeferred) { // Do not link to deferred code. - if (directive.deferredKeyword != null) { - return false; - } - // Always link when manually importing .template.dart files. - final uri = directive.uri.stringValue; - if (uri.endsWith(outputExtension)) { - return true; - } + return false; + } + final uri = directive.uri ?? ''; + if (uri.endsWith(outputExtension)) { + // Always link when manually importing/exporting .template.dart files. + return true; } // Link if we are have or will have a .template.dart file. - if (directive is ast.UriBasedDirective) { - final uri = directive.uri.stringValue; - if (!uri.contains('.')) { - // Don't link imports that are missing an extension. These are either - // valid Dart SDK imports which don't need to be linked, or invalid - // imports which will be reported by the analyzer. - return false; - } - final outputUri = _withOutputExtension(uri); - return await isLibrary(outputUri) || await hasInput(uri); + if (!uri.contains('.')) { + // Don't link imports that are missing an extension. These are either + // valid Dart SDK imports which don't need to be linked, or invalid + // imports which will be reported by the analyzer. + return false; } - return false; + final outputUri = _withOutputExtension(uri); + return await isLibrary(outputUri) || await hasInput(uri); } bool _shouldRecordFactory(ClassElement element) => diff --git a/angular_compiler/lib/src/outliner.dart b/angular_compiler/lib/src/outliner.dart index 48bd3854d7..07506811f7 100644 --- a/angular_compiler/lib/src/outliner.dart +++ b/angular_compiler/lib/src/outliner.dart @@ -100,9 +100,13 @@ class TemplateOutliner implements Builder { ..writeln(); } output.writeln('// Required for "type inference" (scoping).'); - for (final d in library.definingCompilationUnit.computeNode().directives) { - if (d is ImportDirective) { - output.writeln(d.toSource()); + for (final d in library.imports) { + if (d is ImportDirective && !d.isDeferred && d.uri != null) { + var directive = "import '${d.uri}'"; + if (d.prefix != null) { + directive += ' as ${d.prefix.name}'; + } + output.writeln('$directive;'); } } output.writeln();