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

Side by Side Diff: pkg/analyzer/lib/src/task/dart.dart

Issue 2551023005: Prepare for decoupling analyzer ASTs from element model. (Closed)
Patch Set: Created 4 years 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analyzer.src.task.dart; 5 library analyzer.src.task.dart;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/resolution_accessors.dart';
10 import 'package:analyzer/dart/ast/token.dart'; 11 import 'package:analyzer/dart/ast/token.dart';
11 import 'package:analyzer/dart/ast/visitor.dart'; 12 import 'package:analyzer/dart/ast/visitor.dart';
12 import 'package:analyzer/dart/element/element.dart'; 13 import 'package:analyzer/dart/element/element.dart';
13 import 'package:analyzer/dart/element/type.dart'; 14 import 'package:analyzer/dart/element/type.dart';
14 import 'package:analyzer/error/error.dart'; 15 import 'package:analyzer/error/error.dart';
15 import 'package:analyzer/error/listener.dart'; 16 import 'package:analyzer/error/listener.dart';
16 import 'package:analyzer/exception/exception.dart'; 17 import 'package:analyzer/exception/exception.dart';
17 import 'package:analyzer/src/context/cache.dart'; 18 import 'package:analyzer/src/context/cache.dart';
18 import 'package:analyzer/src/dart/ast/ast.dart' 19 import 'package:analyzer/src/dart/ast/ast.dart'
19 show NamespaceDirectiveImpl, UriBasedDirectiveImpl, UriValidationCode; 20 show NamespaceDirectiveImpl, UriBasedDirectiveImpl, UriValidationCode;
(...skipping 1301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 for (int i = 0; i < length; i++) { 1322 for (int i = 0; i < length; i++) {
1322 CompilationUnitMember member = members[i]; 1323 CompilationUnitMember member = members[i];
1323 if (member is EnumDeclaration) { 1324 if (member is EnumDeclaration) {
1324 return member; 1325 return member;
1325 } 1326 }
1326 } 1327 }
1327 return null; 1328 return null;
1328 } 1329 }
1329 1330
1330 EnumDeclaration firstEnum = findFirstEnum(); 1331 EnumDeclaration firstEnum = findFirstEnum();
1331 if (firstEnum != null && firstEnum.element.accessors.isEmpty) { 1332 if (firstEnum != null &&
1333 elementForEnumDeclaration(firstEnum).accessors.isEmpty) {
1332 EnumMemberBuilder builder = new EnumMemberBuilder(typeProvider); 1334 EnumMemberBuilder builder = new EnumMemberBuilder(typeProvider);
1333 unit.accept(builder); 1335 unit.accept(builder);
1334 } 1336 }
1335 // 1337 //
1336 // Record outputs. 1338 // Record outputs.
1337 // 1339 //
1338 outputs[CREATED_RESOLVED_UNIT3] = true; 1340 outputs[CREATED_RESOLVED_UNIT3] = true;
1339 outputs[RESOLVED_UNIT3] = unit; 1341 outputs[RESOLVED_UNIT3] = unit;
1340 } 1342 }
1341 1343
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 // 1498 //
1497 // Process inputs. 1499 // Process inputs.
1498 // 1500 //
1499 CompilationUnitElementImpl definingCompilationUnitElement = 1501 CompilationUnitElementImpl definingCompilationUnitElement =
1500 definingCompilationUnit.element; 1502 definingCompilationUnit.element;
1501 Map<Source, CompilationUnit> partUnitMap = 1503 Map<Source, CompilationUnit> partUnitMap =
1502 new HashMap<Source, CompilationUnit>(); 1504 new HashMap<Source, CompilationUnit>();
1503 int partLength = partUnits.length; 1505 int partLength = partUnits.length;
1504 for (int i = 0; i < partLength; i++) { 1506 for (int i = 0; i < partLength; i++) {
1505 CompilationUnit partUnit = partUnits[i]; 1507 CompilationUnit partUnit = partUnits[i];
1506 Source partSource = partUnit.element.source; 1508 Source partSource = elementForCompilationUnit(partUnit).source;
1507 partUnitMap[partSource] = partUnit; 1509 partUnitMap[partSource] = partUnit;
1508 } 1510 }
1509 // 1511 //
1510 // Update "part" directives. 1512 // Update "part" directives.
1511 // 1513 //
1512 LibraryIdentifier libraryNameNode = null; 1514 LibraryIdentifier libraryNameNode = null;
1513 String partsLibraryName = _UNKNOWN_LIBRARY_NAME; 1515 String partsLibraryName = _UNKNOWN_LIBRARY_NAME;
1514 bool hasPartDirective = false; 1516 bool hasPartDirective = false;
1515 Set<Source> seenPartSources = new Set<Source>(); 1517 Set<Source> seenPartSources = new Set<Source>();
1516 FunctionElement entryPoint = 1518 FunctionElement entryPoint =
(...skipping 1921 matching lines...) Expand 10 before | Expand all | Expand 10 after
3438 void internalPerform() { 3440 void internalPerform() {
3439 // 3441 //
3440 // Prepare inputs. 3442 // Prepare inputs.
3441 // 3443 //
3442 CompilationUnit unit = getRequiredInput(UNIT_INPUT); 3444 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
3443 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT); 3445 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT);
3444 // 3446 //
3445 // Infer instance members. 3447 // Infer instance members.
3446 // 3448 //
3447 if (context.analysisOptions.strongMode) { 3449 if (context.analysisOptions.strongMode) {
3448 InstanceMemberInferrer inferrer = new InstanceMemberInferrer( 3450 InstanceMemberInferrer inferrer = new InstanceMemberInferrer(typeProvider,
3449 typeProvider, new InheritanceManager(unit.element.library), 3451 new InheritanceManager(elementForCompilationUnit(unit).library),
3450 typeSystem: context.typeSystem); 3452 typeSystem: context.typeSystem);
3451 inferrer.inferCompilationUnit(unit.element); 3453 inferrer.inferCompilationUnit(unit.element);
3452 } 3454 }
3453 // 3455 //
3454 // Record outputs. 3456 // Record outputs.
3455 // 3457 //
3456 outputs[RESOLVED_UNIT10] = unit; 3458 outputs[RESOLVED_UNIT10] = unit;
3457 outputs[CREATED_RESOLVED_UNIT10] = true; 3459 outputs[CREATED_RESOLVED_UNIT10] = true;
3458 } 3460 }
3459 3461
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3504 /** 3506 /**
3505 * Return the declaration of the target within the given compilation [unit]. 3507 * Return the declaration of the target within the given compilation [unit].
3506 * Throw an exception if the declaration cannot be found. 3508 * Throw an exception if the declaration cannot be found.
3507 */ 3509 */
3508 VariableDeclaration getDeclaration(CompilationUnit unit) { 3510 VariableDeclaration getDeclaration(CompilationUnit unit) {
3509 VariableElement variable = target; 3511 VariableElement variable = target;
3510 int offset = variable.nameOffset; 3512 int offset = variable.nameOffset;
3511 AstNode node = new NodeLocator2(offset).searchWithin(unit); 3513 AstNode node = new NodeLocator2(offset).searchWithin(unit);
3512 if (node == null) { 3514 if (node == null) {
3513 Source variableSource = variable.source; 3515 Source variableSource = variable.source;
3514 Source unitSource = unit.element.source; 3516 Source unitSource = elementForCompilationUnit(unit).source;
3515 if (variableSource != unitSource) { 3517 if (variableSource != unitSource) {
3516 throw new AnalysisException( 3518 throw new AnalysisException(
3517 "Failed to find the AST node for the variable " 3519 "Failed to find the AST node for the variable "
3518 "${variable.displayName} at $offset in $variableSource " 3520 "${variable.displayName} at $offset in $variableSource "
3519 "because we were looking in $unitSource"); 3521 "because we were looking in $unitSource");
3520 } 3522 }
3521 throw new AnalysisException( 3523 throw new AnalysisException(
3522 "Failed to find the AST node for the variable " 3524 "Failed to find the AST node for the variable "
3523 "${variable.displayName} at $offset in $variableSource"); 3525 "${variable.displayName} at $offset in $variableSource");
3524 } 3526 }
3525 VariableDeclaration declaration = 3527 VariableDeclaration declaration =
3526 node.getAncestor((AstNode ancestor) => ancestor is VariableDeclaration); 3528 node.getAncestor((AstNode ancestor) => ancestor is VariableDeclaration);
3527 if (declaration == null || declaration.name != node) { 3529 if (declaration == null || declaration.name != node) {
3528 Source variableSource = variable.source; 3530 Source variableSource = variable.source;
3529 Source unitSource = unit.element.source; 3531 Source unitSource = elementForCompilationUnit(unit).source;
3530 if (variableSource != unitSource) { 3532 if (variableSource != unitSource) {
3531 if (declaration == null) { 3533 if (declaration == null) {
3532 throw new AnalysisException( 3534 throw new AnalysisException(
3533 "Failed to find the declaration of the variable " 3535 "Failed to find the declaration of the variable "
3534 "${variable.displayName} at $offset in $variableSource " 3536 "${variable.displayName} at $offset in $variableSource "
3535 "because the node was not in a variable declaration " 3537 "because the node was not in a variable declaration "
3536 "possibly because we were looking in $unitSource"); 3538 "possibly because we were looking in $unitSource");
3537 } 3539 }
3538 throw new AnalysisException( 3540 throw new AnalysisException(
3539 "Failed to find the declaration of the variable " 3541 "Failed to find the declaration of the variable "
(...skipping 2948 matching lines...) Expand 10 before | Expand all | Expand 10 after
6488 6490
6489 @override 6491 @override
6490 bool moveNext() { 6492 bool moveNext() {
6491 if (_newSources.isEmpty) { 6493 if (_newSources.isEmpty) {
6492 return false; 6494 return false;
6493 } 6495 }
6494 currentTarget = _newSources.removeLast(); 6496 currentTarget = _newSources.removeLast();
6495 return true; 6497 return true;
6496 } 6498 }
6497 } 6499 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698