Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Side by Side Diff: tests/compiler/dart2js/serialization/helper.dart

Issue 1970703002: Store ResolvedAst on AstElement (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Rebase + cleanup Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.serialization_helper; 5 library dart2js.serialization_helper;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:compiler/src/commandline_options.dart'; 10 import 'package:compiler/src/commandline_options.dart';
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 script.file = newScript.file; 224 script.file = newScript.file;
225 _resolvedAstDeserializer.sourceFiles[script.resourceUri] = 225 _resolvedAstDeserializer.sourceFiles[script.resourceUri] =
226 newScript.file; 226 newScript.file;
227 }); 227 });
228 }).then((_) => library); 228 }).then((_) => library);
229 } 229 }
230 return new Future<LibraryElement>.value(library); 230 return new Future<LibraryElement>.value(library);
231 } 231 }
232 232
233 @override 233 @override
234 bool hasResolvedAst(ExecutableElement element) { 234 bool hasResolvedAst(ExecutableElement element) {
Siggi Cherem (dart-lang) 2016/05/13 19:43:51 I wonder if we can get rid of `hasResovledAst` now
Johnni Winther 2016/05/17 11:59:52 Soon. Adding a TODO.
235 return _resolvedAstDeserializer.hasResolvedAst(element); 235 return getResolvedAst(element) != null;
236 } 236 }
237 237
238 @override 238 @override
239 ResolvedAst getResolvedAst(ExecutableElement element) { 239 ResolvedAst getResolvedAst(ExecutableElement element) {
240 if (element.hasResolvedAst) {
241 return element.resolvedAst;
242 }
240 return _resolvedAstDeserializer.getResolvedAst(element); 243 return _resolvedAstDeserializer.getResolvedAst(element);
241 } 244 }
242 245
243 @override 246 @override
244 bool hasResolutionImpact(Element element) { 247 bool hasResolutionImpact(Element element) {
245 if (element.isConstructor && 248 if (element.isConstructor &&
246 element.enclosingClass.isUnnamedMixinApplication) { 249 element.enclosingClass.isUnnamedMixinApplication) {
247 return true; 250 return true;
248 } 251 }
249 return _resolutionImpactDeserializer.impactMap.containsKey(element); 252 return _resolutionImpactDeserializer.impactMap.containsKey(element);
(...skipping 18 matching lines...) Expand all
268 }); 271 });
269 } 272 }
270 return _resolutionImpactDeserializer.impactMap[element]; 273 return _resolutionImpactDeserializer.impactMap[element];
271 } 274 }
272 275
273 @override 276 @override
274 WorldImpact computeWorldImpact(Element element) { 277 WorldImpact computeWorldImpact(Element element) {
275 ResolutionImpact resolutionImpact = getResolutionImpact(element); 278 ResolutionImpact resolutionImpact = getResolutionImpact(element);
276 assert(invariant(element, resolutionImpact != null, 279 assert(invariant(element, resolutionImpact != null,
277 message: 'No impact found for $element (${element.library})')); 280 message: 'No impact found for $element (${element.library})'));
281 if (element is ExecutableElement) {
282 getResolvedAst(element);
283 }
278 return _impactTransformer.transformResolutionImpact(resolutionImpact); 284 return _impactTransformer.transformResolutionImpact(resolutionImpact);
279 } 285 }
280 286
281 @override 287 @override
282 bool isDeserialized(Element element) { 288 bool isDeserialized(Element element) {
283 return deserializedLibraries.contains(element.library); 289 return deserializedLibraries.contains(element.library);
284 } 290 }
285 } 291 }
286 292
287 const String RESOLVED_AST_TAG = 'resolvedAst'; 293 const String RESOLVED_AST_TAG = 'resolvedAst';
(...skipping 19 matching lines...) Expand all
307 nativeDataSerializer).serialize(); 313 nativeDataSerializer).serialize();
308 } 314 }
309 } 315 }
310 } 316 }
311 317
312 class ResolvedAstDeserializerPlugin extends DeserializerPlugin { 318 class ResolvedAstDeserializerPlugin extends DeserializerPlugin {
313 final ParsingContext parsingContext; 319 final ParsingContext parsingContext;
314 final DeserializerPlugin nativeDataDeserializer; 320 final DeserializerPlugin nativeDataDeserializer;
315 final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{}; 321 final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
316 322
317 Map<ExecutableElement, ResolvedAst> _resolvedAstMap =
318 <ExecutableElement, ResolvedAst>{};
319 Map<MemberElement, ObjectDecoder> _decoderMap = 323 Map<MemberElement, ObjectDecoder> _decoderMap =
320 <MemberElement, ObjectDecoder>{}; 324 <MemberElement, ObjectDecoder>{};
321 Map<Uri, Token> beginTokenMap = <Uri, Token>{}; 325 Map<Uri, Token> beginTokenMap = <Uri, Token>{};
322 326
323 ResolvedAstDeserializerPlugin( 327 ResolvedAstDeserializerPlugin(
324 this.parsingContext, this.nativeDataDeserializer); 328 this.parsingContext, this.nativeDataDeserializer);
325 329
326 bool hasResolvedAst(ExecutableElement element) { 330 bool hasResolvedAst(ExecutableElement element) {
327 return _resolvedAstMap.containsKey(element) || 331 return getResolvedAst(element) != null;
328 _decoderMap.containsKey(element.memberContext);
329 } 332 }
330 333
331 ResolvedAst getResolvedAst(ExecutableElement element) { 334 ResolvedAst getResolvedAst(ExecutableElement element) {
332 ResolvedAst resolvedAst = _resolvedAstMap[element]; 335 if (element.hasResolvedAst) {
Siggi Cherem (dart-lang) 2016/05/13 19:43:51 correct me if I'm wrong, Is this always called fro
Johnni Winther 2016/05/17 11:59:51 Done.
333 if (resolvedAst == null) { 336 return element.resolvedAst;
334 ObjectDecoder decoder = _decoderMap[element.memberContext];
335 if (decoder != null) {
336 ResolvedAstDeserializer.deserialize(
337 element.memberContext, decoder, parsingContext, findToken,
338 nativeDataDeserializer,
339 _resolvedAstMap);
340 _decoderMap.remove(element);
341 resolvedAst = _resolvedAstMap[element];
342 }
343 } 337 }
344 return resolvedAst; 338
339 ObjectDecoder decoder = _decoderMap[element.memberContext];
340 if (decoder != null) {
341 ResolvedAstDeserializer.deserialize(
342 element.memberContext, decoder, parsingContext, findToken,
343 nativeDataDeserializer);
344 _decoderMap.remove(element);
345 return element.resolvedAst;
Siggi Cherem (dart-lang) 2016/05/13 19:43:51 could we assert here that element.resolvedAst != n
Johnni Winther 2016/05/17 11:59:52 Done.
346 }
347 return null;
345 } 348 }
346 349
347 Token findToken(Uri uri, int offset) { 350 Token findToken(Uri uri, int offset) {
348 Token beginToken = beginTokenMap.putIfAbsent(uri, () { 351 Token beginToken = beginTokenMap.putIfAbsent(uri, () {
349 SourceFile sourceFile = sourceFiles[uri]; 352 SourceFile sourceFile = sourceFiles[uri];
350 if (sourceFile == null) { 353 if (sourceFile == null) {
351 throw 'No source file found for $uri in:\n ' 354 throw 'No source file found for $uri in:\n '
352 '${sourceFiles.keys.join('\n ')}'; 355 '${sourceFiles.keys.join('\n ')}';
353 } 356 }
354 return new Scanner(sourceFile).tokenize(); 357 return new Scanner(sourceFile).tokenize();
355 }); 358 });
356 return ResolvedAstDeserializer.findTokenInStream(beginToken, offset); 359 return ResolvedAstDeserializer.findTokenInStream(beginToken, offset);
357 } 360 }
358 361
359 @override 362 @override
360 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { 363 void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
361 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG); 364 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG);
362 if (decoder != null) { 365 if (decoder != null) {
363 _decoderMap[element] = decoder; 366 _decoderMap[element] = decoder;
364 } 367 }
365 } 368 }
366 } 369 }
367 370
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698