@@ -9118,14 +9118,17 @@ class TopLevelVariableElementImpl extends PropertyInducingElementImpl
91189118 with
91199119 FragmentedAnnotatableElementMixin <TopLevelVariableFragmentImpl >,
91209120 FragmentedElementMixin <TopLevelVariableFragmentImpl >,
9121- _HasSinceSdkVersionMixin
9121+ _HasSinceSdkVersionMixin ,
9122+ DeferredResolutionReadingMixin
91229123 implements TopLevelVariableElement {
91239124 @override
91249125 final Reference reference;
91259126
91269127 @override
91279128 final TopLevelVariableFragmentImpl firstFragment;
91289129
9130+ TypeImpl ? _type;
9131+
91299132 TopLevelVariableElementImpl (this .reference, this .firstFragment) {
91309133 reference.element = this ;
91319134 firstFragment.element = this ;
@@ -9185,7 +9188,41 @@ class TopLevelVariableElementImpl extends PropertyInducingElementImpl
91859188 String ? get name3 => firstFragment.name2;
91869189
91879190 @override
9188- TypeImpl get type => firstFragment.type;
9191+ TypeImpl get type {
9192+ _ensureReadResolution ();
9193+ if (_type != null ) return _type! ;
9194+
9195+ // We must be linking, and the type has not been set yet.
9196+ var type = firstFragment.typeInference? .perform ();
9197+ type ?? = InvalidTypeImpl .instance;
9198+ _type = type;
9199+ firstFragment._type = type;
9200+ firstFragment.shouldUseTypeForInitializerInference = false ;
9201+
9202+ // TODO(scheglov): We repeat this code.
9203+ var element = this ;
9204+ if (element.getter2 case var getterElement? ) {
9205+ getterElement.returnType = type;
9206+ getterElement.firstFragment.returnType = type;
9207+ }
9208+ if (element.setter2 case var setterElement? ) {
9209+ if (setterElement.isSynthetic) {
9210+ setterElement.returnType = VoidTypeImpl .instance;
9211+ setterElement.firstFragment.returnType = VoidTypeImpl .instance;
9212+ (setterElement.formalParameters.single as FormalParameterElementImpl )
9213+ .type = type;
9214+ (setterElement.formalParameters.single as FormalParameterElementImpl )
9215+ .firstFragment
9216+ .type = type;
9217+ }
9218+ }
9219+
9220+ return _type! ;
9221+ }
9222+
9223+ set type (TypeImpl value) {
9224+ _type = value;
9225+ }
91899226
91909227 @override
91919228 T ? accept <T >(ElementVisitor2 <T > visitor) {
0 commit comments