fix(compiler): optimize away unnecessary restore/reset view calls · angular/angular@ce80136

@@ -3,9 +3,7 @@

33

"cases": [

44

{

55

"description": "should create listener instruction on element",

6-

"inputFiles": [

7-

"element_listener.ts"

8-

],

6+

"inputFiles": ["element_listener.ts"],

97

"expectations": [

108

{

119

"files": [

@@ -20,9 +18,7 @@

2018

},

2119

{

2220

"description": "should create listener instruction on other components",

23-

"inputFiles": [

24-

"component_listener.ts"

25-

],

21+

"inputFiles": ["component_listener.ts"],

2622

"expectations": [

2723

{

2824

"files": [

@@ -37,9 +33,7 @@

3733

},

3834

{

3935

"description": "should create multiple listener instructions that share a view snapshot",

40-

"inputFiles": [

41-

"shared_snapshot_listeners.ts"

42-

],

36+

"inputFiles": ["shared_snapshot_listeners.ts"],

4337

"expectations": [

4438

{

4539

"files": [

@@ -54,9 +48,7 @@

5448

},

5549

{

5650

"description": "local refs in listeners defined before the local refs",

57-

"inputFiles": [

58-

"local_ref_before_listener.ts"

59-

],

51+

"inputFiles": ["local_ref_before_listener.ts"],

6052

"expectations": [

6153

{

6254

"files": [

@@ -80,9 +72,7 @@

8072

},

8173

{

8274

"description": "should chain multiple listeners on the same element",

83-

"inputFiles": [

84-

"same_element_chained_listeners.ts"

85-

],

75+

"inputFiles": ["same_element_chained_listeners.ts"],

8676

"expectations": [

8777

{

8878

"files": [

@@ -97,9 +87,7 @@

9787

},

9888

{

9989

"description": "should chain multiple listeners across elements",

100-

"inputFiles": [

101-

"cross_element_chained_listeners.ts"

102-

],

90+

"inputFiles": ["cross_element_chained_listeners.ts"],

10391

"expectations": [

10492

{

10593

"files": [

@@ -114,9 +102,7 @@

114102

},

115103

{

116104

"description": "should chain multiple listeners on the same template",

117-

"inputFiles": [

118-

"template_chained_listeners.ts"

119-

],

105+

"inputFiles": ["template_chained_listeners.ts"],

120106

"expectations": [

121107

{

122108

"files": [

@@ -131,9 +117,7 @@

131117

},

132118

{

133119

"description": "should not generate the $event argument if it is not being used in a template",

134-

"inputFiles": [

135-

"no_event_arg_listener.ts"

136-

],

120+

"inputFiles": ["no_event_arg_listener.ts"],

137121

"expectations": [

138122

{

139123

"files": [

@@ -148,9 +132,7 @@

148132

},

149133

{

150134

"description": "should not generate the $event argument if it is not being used in a host listener",

151-

"inputFiles": [

152-

"no_event_arg_host_listener.ts"

153-

],

135+

"inputFiles": ["no_event_arg_host_listener.ts"],

154136

"expectations": [

155137

{

156138

"files": [

@@ -165,9 +147,7 @@

165147

},

166148

{

167149

"description": "should generate the $event argument if it is being used in a host listener",

168-

"inputFiles": [

169-

"has_event_arg_host_listener.ts"

170-

],

150+

"inputFiles": ["has_event_arg_host_listener.ts"],

171151

"expectations": [

172152

{

173153

"files": [

@@ -182,9 +162,7 @@

182162

},

183163

{

184164

"description": "should assume $event is referring to the event variable in a listener by default",

185-

"inputFiles": [

186-

"event_arg_listener_implicit_meaning.ts"

187-

],

165+

"inputFiles": ["event_arg_listener_implicit_meaning.ts"],

188166

"expectations": [

189167

{

190168

"files": [

@@ -199,9 +177,7 @@

199177

},

200178

{

201179

"description": "should preserve accesses to $event if it is done through `this` in a listener",

202-

"inputFiles": [

203-

"event_explicit_access.ts"

204-

],

180+

"inputFiles": ["event_explicit_access.ts"],

205181

"expectations": [

206182

{

207183

"files": [

@@ -215,9 +191,7 @@

215191

},

216192

{

217193

"description": "should not assume that $event is referring to an event object inside a property",

218-

"inputFiles": [

219-

"event_in_property_binding.ts"

220-

],

194+

"inputFiles": ["event_in_property_binding.ts"],

221195

"expectations": [

222196

{

223197

"files": [

@@ -232,9 +206,7 @@

232206

},

233207

{

234208

"description": "should assume $event is referring to the event variable in a listener by default inside a host binding",

235-

"inputFiles": [

236-

"event_arg_host_listener_implicit_meaning.ts"

237-

],

209+

"inputFiles": ["event_arg_host_listener_implicit_meaning.ts"],

238210

"expectations": [

239211

{

240212

"files": [

@@ -249,9 +221,7 @@

249221

},

250222

{

251223

"description": "should preserve accesses to $event if it is done through `this` in a listener inside a host binding",

252-

"inputFiles": [

253-

"event_host_explicit_access.ts"

254-

],

224+

"inputFiles": ["event_host_explicit_access.ts"],

255225

"expectations": [

256226

{

257227

"files": [

@@ -266,9 +236,7 @@

266236

},

267237

{

268238

"description": "should generate the view restoration statements if a keyed write is used in an event listener from within an ng-template",

269-

"inputFiles": [

270-

"implicit_receiver_keyed_write_inside_template.ts"

271-

],

239+

"inputFiles": ["implicit_receiver_keyed_write_inside_template.ts"],

272240

"expectations": [

273241

{

274242

"files": [

@@ -283,9 +251,7 @@

283251

},

284252

{

285253

"description": "should reference correct context in listener inside embedded view",

286-

"inputFiles": [

287-

"embedded_view_listener_context.ts"

288-

],

254+

"inputFiles": ["embedded_view_listener_context.ts"],

289255

"expectations": [

290256

{

291257

"files": [

@@ -300,9 +266,7 @@

300266

},

301267

{

302268

"description": "should generate a simple two-way binding",

303-

"inputFiles": [

304-

"simple_two_way.ts"

305-

],

269+

"inputFiles": ["simple_two_way.ts"],

306270

"expectations": [

307271

{

308272

"files": [

@@ -317,9 +281,7 @@

317281

},

318282

{

319283

"description": "should generate a nested two-way binding",

320-

"inputFiles": [

321-

"nested_two_way.ts"

322-

],

284+

"inputFiles": ["nested_two_way.ts"],

323285

"expectations": [

324286

{

325287

"files": [

@@ -334,9 +296,7 @@

334296

},

335297

{

336298

"description": "should generate listener with multiple statements",

337-

"inputFiles": [

338-

"multiple_statements.ts"

339-

],

299+

"inputFiles": ["multiple_statements.ts"],

340300

"expectations": [

341301

{

342302

"failureMessage": "Incorrect template"

@@ -345,9 +305,7 @@

345305

},

346306

{

347307

"description": "should maintain the binding order between plain listeners and listeners part of a two-way binding",

348-

"inputFiles": [

349-

"mixed_one_way_two_way_listener_order.ts"

350-

],

308+

"inputFiles": ["mixed_one_way_two_way_listener_order.ts"],

351309

"expectations": [

352310

{

353311

"failureMessage": "Incorrect template"

@@ -356,9 +314,7 @@

356314

},

357315

{

358316

"description": "should generate a two-way binding to a @for loop variable that is a signal",

359-

"inputFiles": [

360-

"two_way_binding_to_signal_loop_variable.ts"

361-

],

317+

"inputFiles": ["two_way_binding_to_signal_loop_variable.ts"],

362318

"expectations": [

363319

{

364320

"files": [

@@ -373,9 +329,7 @@

373329

},

374330

{

375331

"description": "should generate a two-way binding to a $any expression",

376-

"inputFiles": [

377-

"two_way_to_any.ts"

378-

],

332+

"inputFiles": ["two_way_to_any.ts"],

379333

"expectations": [

380334

{

381335

"files": [

@@ -387,6 +341,21 @@

387341

"failureMessage": "Incorrect template"

388342

}

389343

]

344+

},

345+

{

346+

"description": "should not generate restore/reset view when listener does not use @let in the same scope",

347+

"inputFiles": ["listener_unused_let.ts"],

348+

"expectations": [

349+

{

350+

"files": [

351+

{

352+

"expected": "listener_unused_let_template.js",

353+

"generated": "listener_unused_let.js"

354+

}

355+

],

356+

"failureMessage": "Incorrect template"

357+

}

358+

]

390359

}

391360

]

392361

}