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

Side by Side Diff: pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart

Issue 2647043002: Fix hints reported by analyzer. (Closed)
Patch Set: Created 3 years, 11 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.resolved_ast; 5 library dart2js.serialization.resolved_ast;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/resolution.dart'; 8 import '../common/resolution.dart';
9 import '../constants/expressions.dart'; 9 import '../constants/expressions.dart';
10 import '../elements/resolution_types.dart'; 10 import '../elements/resolution_types.dart';
11 import '../diagnostics/diagnostic_listener.dart'; 11 import '../diagnostics/diagnostic_listener.dart';
12 import '../elements/elements.dart'; 12 import '../elements/elements.dart';
13 import '../elements/modelx.dart'; 13 import '../elements/modelx.dart';
14 import '../parser/listener.dart' show ParserError; 14 import '../parser/listener.dart' show ParserError;
15 import '../parser/node_listener.dart' show NodeListener; 15 import '../parser/node_listener.dart' show NodeListener;
16 import '../parser/parser.dart' show Parser; 16 import '../parser/parser.dart' show Parser;
17 import '../resolution/enum_creator.dart'; 17 import '../resolution/enum_creator.dart';
18 import '../resolution/send_structure.dart'; 18 import '../resolution/send_structure.dart';
19 import '../resolution/tree_elements.dart'; 19 import '../resolution/tree_elements.dart';
20 import '../tokens/token.dart'; 20 import '../tokens/token.dart';
21 import '../tree/tree.dart'; 21 import '../tree/tree.dart';
22 import '../universe/selector.dart'; 22 import '../universe/selector.dart';
23 import '../util/util.dart';
24 import 'keys.dart'; 23 import 'keys.dart';
25 import 'modelz.dart'; 24 import 'modelz.dart';
26 import 'serialization.dart'; 25 import 'serialization.dart';
27 import 'serialization_util.dart'; 26 import 'serialization_util.dart';
28 27
29 /// Visitor that computes a node-index mapping. 28 /// Visitor that computes a node-index mapping.
30 class AstIndexComputer extends Visitor { 29 class AstIndexComputer extends Visitor {
31 final Map<Node, int> nodeIndices = <Node, int>{}; 30 final Map<Node, int> nodeIndices = <Node, int>{};
32 final List<Node> nodeList = <Node>[]; 31 final List<Node> nodeList = <Node>[];
33 32
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 366
368 /// Deserialize the [ResolvedAst]s for the member [element] (constructor, 367 /// Deserialize the [ResolvedAst]s for the member [element] (constructor,
369 /// method, or field) and its nested closures. The [ResolvedAst]s are added 368 /// method, or field) and its nested closures. The [ResolvedAst]s are added
370 /// to [resolvedAstMap]. 369 /// to [resolvedAstMap].
371 static void deserializeParsed( 370 static void deserializeParsed(
372 AstElementMixinZ element, 371 AstElementMixinZ element,
373 ObjectDecoder objectDecoder, 372 ObjectDecoder objectDecoder,
374 ParsingContext parsing, 373 ParsingContext parsing,
375 Token getBeginToken(Uri uri, int charOffset), 374 Token getBeginToken(Uri uri, int charOffset),
376 DeserializerPlugin nativeDataDeserializer) { 375 DeserializerPlugin nativeDataDeserializer) {
377 CompilationUnitElement compilationUnit = element.compilationUnit;
378 DiagnosticReporter reporter = parsing.reporter; 376 DiagnosticReporter reporter = parsing.reporter;
379 Uri uri = objectDecoder.getUri(Key.URI); 377 Uri uri = objectDecoder.getUri(Key.URI);
380 378
381 /// Returns the first [Token] for parsing the [Node] for [element]. 379 /// Returns the first [Token] for parsing the [Node] for [element].
382 Token readBeginToken() { 380 Token readBeginToken() {
383 int charOffset = objectDecoder.getInt(Key.OFFSET); 381 int charOffset = objectDecoder.getInt(Key.OFFSET);
384 Token beginToken = getBeginToken(uri, charOffset); 382 Token beginToken = getBeginToken(uri, charOffset);
385 if (beginToken == null) { 383 if (beginToken == null) {
386 // TODO(johnniwinther): Handle unfound tokens by adding an erronous 384 // TODO(johnniwinther): Handle unfound tokens by adding an erronous
387 // resolved ast kind. 385 // resolved ast kind.
388 reporter.internalError( 386 reporter.internalError(
389 element, "No token found for $element in $uri @ $charOffset"); 387 element, "No token found for $element in $uri @ $charOffset");
390 } 388 }
391 return beginToken; 389 return beginToken;
392 } 390 }
393 391
394 /// Create the [Node] for the element by parsing the source code. 392 /// Create the [Node] for the element by parsing the source code.
395 Node doParse(parse(Parser parser)) { 393 Node doParse(parse(Parser parser)) {
396 return parsing.measure(() { 394 return parsing.measure(() {
397 return reporter.withCurrentElement(element, () { 395 return reporter.withCurrentElement(element, () {
398 CompilationUnitElement unit = element.compilationUnit;
399 NodeListener listener = new NodeListener( 396 NodeListener listener = new NodeListener(
400 parsing.getScannerOptionsFor(element), reporter, null); 397 parsing.getScannerOptionsFor(element), reporter, null);
401 listener.memberErrors = listener.memberErrors.prepend(false); 398 listener.memberErrors = listener.memberErrors.prepend(false);
402 try { 399 try {
403 Parser parser = new Parser(listener); 400 Parser parser = new Parser(listener);
404 parse(parser); 401 parse(parser);
405 } on ParserError catch (e) { 402 } on ParserError catch (e) {
406 reporter.internalError(element, '$e'); 403 reporter.internalError(element, '$e');
407 } 404 }
408 return listener.popNode(); 405 return listener.popNode();
409 }); 406 });
410 }); 407 });
411 } 408 }
412 409
413 /// Computes the [Node] for the element based on the [AstKind]. 410 /// Computes the [Node] for the element based on the [AstKind].
414 Node computeNode(AstKind kind) { 411 Node computeNode(AstKind kind) {
415 switch (kind) { 412 switch (kind) {
416 case AstKind.ENUM_INDEX_FIELD: 413 case AstKind.ENUM_INDEX_FIELD:
417 AstBuilder builder = new AstBuilder(element.sourcePosition.begin); 414 AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
418 Identifier identifier = builder.identifier('index'); 415 Identifier identifier = builder.identifier('index');
419 VariableDefinitions node = new VariableDefinitions( 416 VariableDefinitions node = new VariableDefinitions(
420 null, 417 null,
421 builder.modifiers(isFinal: true), 418 builder.modifiers(isFinal: true),
422 new NodeList.singleton(identifier)); 419 new NodeList.singleton(identifier));
423 return node; 420 return node;
424 case AstKind.ENUM_VALUES_FIELD: 421 case AstKind.ENUM_VALUES_FIELD:
425 EnumClassElement enumClass = element.enclosingClass; 422 EnumClassElement enumClass = element.enclosingClass;
426 AstBuilder builder = new AstBuilder(element.sourcePosition.begin); 423 AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
427 List<FieldElement> enumValues = <FieldElement>[];
428 List<Node> valueReferences = <Node>[]; 424 List<Node> valueReferences = <Node>[];
429 for (EnumConstantElement enumConstant in enumClass.enumValues) { 425 for (EnumConstantElement enumConstant in enumClass.enumValues) {
430 AstBuilder valueBuilder = 426 AstBuilder valueBuilder =
431 new AstBuilder(enumConstant.sourcePosition.begin); 427 new AstBuilder(enumConstant.sourcePosition.begin);
432 Identifier name = valueBuilder.identifier(enumConstant.name); 428 Identifier name = valueBuilder.identifier(enumConstant.name);
433 429
434 // Add reference for the `values` field. 430 // Add reference for the `values` field.
435 valueReferences.add(valueBuilder.reference(name)); 431 valueReferences.add(valueBuilder.reference(name));
436 } 432 }
437 433
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 return doParse((parser) { 521 return doParse((parser) {
526 parser.parseFunction(beginToken, getOrSet); 522 parser.parseFunction(beginToken, getOrSet);
527 }); 523 });
528 } 524 }
529 } 525 }
530 526
531 AstKind kind = objectDecoder.getEnum(Key.SUB_KIND, AstKind.values); 527 AstKind kind = objectDecoder.getEnum(Key.SUB_KIND, AstKind.values);
532 Node root = computeNode(kind); 528 Node root = computeNode(kind);
533 TreeElementMapping elements = new TreeElementMapping(element); 529 TreeElementMapping elements = new TreeElementMapping(element);
534 AstIndexComputer indexComputer = new AstIndexComputer(); 530 AstIndexComputer indexComputer = new AstIndexComputer();
535 Map<Node, int> nodeIndices = indexComputer.nodeIndices;
536 List<Node> nodeList = indexComputer.nodeList; 531 List<Node> nodeList = indexComputer.nodeList;
537 root.accept(indexComputer); 532 root.accept(indexComputer);
538 elements.containsTryStatement = objectDecoder.getBool(Key.CONTAINS_TRY); 533 elements.containsTryStatement = objectDecoder.getBool(Key.CONTAINS_TRY);
539 534
540 Node body; 535 Node body;
541 int bodyNodeIndex = objectDecoder.getInt(Key.BODY, isOptional: true); 536 int bodyNodeIndex = objectDecoder.getInt(Key.BODY, isOptional: true);
542 if (bodyNodeIndex != null) { 537 if (bodyNodeIndex != null) {
543 assert(invariant(element, bodyNodeIndex < nodeList.length, 538 assert(invariant(element, bodyNodeIndex < nodeList.length,
544 message: "Body node index ${bodyNodeIndex} out of range. " 539 message: "Body node index ${bodyNodeIndex} out of range. "
545 "Node count: ${nodeList.length}")); 540 "Node count: ${nodeList.length}"));
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 } 682 }
688 } 683 }
689 } 684 }
690 element.resolvedAst = 685 element.resolvedAst =
691 new ParsedResolvedAst(element, root, body, elements, uri); 686 new ParsedResolvedAst(element, root, body, elements, uri);
692 } 687 }
693 } 688 }
694 689
695 const Key PARAMETER_NODE = const Key('parameter.node'); 690 const Key PARAMETER_NODE = const Key('parameter.node');
696 const Key PARAMETER_INITIALIZER = const Key('parameter.initializer'); 691 const Key PARAMETER_INITIALIZER = const Key('parameter.initializer');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698