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

Side by Side Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 918383002: Rework analysis server performance measurement code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 engine.resolver; 5 library engine.resolver;
6 6
7 import "dart:math" as math; 7 import "dart:math" as math;
8 import 'dart:collection'; 8 import 'dart:collection';
9 9
10 import 'package:analyzer/src/generated/utilities_collection.dart'; 10 import 'package:analyzer/src/generated/utilities_collection.dart';
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 * unit. 794 * unit.
795 */ 795 */
796 class CompilationUnitBuilder { 796 class CompilationUnitBuilder {
797 /** 797 /**
798 * Build the compilation unit element for the given [source] based on the 798 * Build the compilation unit element for the given [source] based on the
799 * compilation [unit] associated with the source. Throw an AnalysisException 799 * compilation [unit] associated with the source. Throw an AnalysisException
800 * if the element could not be built. 800 * if the element could not be built.
801 */ 801 */
802 CompilationUnitElementImpl buildCompilationUnit(Source source, 802 CompilationUnitElementImpl buildCompilationUnit(Source source,
803 CompilationUnit unit) { 803 CompilationUnit unit) {
804 TimeCounter_TimeCounterHandle timeCounter = 804 PerformanceTag prevTag = PerformanceStatistics.resolve.makeCurrent();
805 PerformanceStatistics.resolve.start();
806 try { 805 try {
807 if (unit == null) { 806 if (unit == null) {
808 return null; 807 return null;
809 } 808 }
810 ElementHolder holder = new ElementHolder(); 809 ElementHolder holder = new ElementHolder();
811 ElementBuilder builder = new ElementBuilder(holder); 810 ElementBuilder builder = new ElementBuilder(holder);
812 unit.accept(builder); 811 unit.accept(builder);
813 CompilationUnitElementImpl element = 812 CompilationUnitElementImpl element =
814 new CompilationUnitElementImpl(source.shortName); 813 new CompilationUnitElementImpl(source.shortName);
815 element.accessors = holder.accessors; 814 element.accessors = holder.accessors;
816 element.enums = holder.enums; 815 element.enums = holder.enums;
817 element.functions = holder.functions; 816 element.functions = holder.functions;
818 element.source = source; 817 element.source = source;
819 element.typeAliases = holder.typeAliases; 818 element.typeAliases = holder.typeAliases;
820 element.types = holder.types; 819 element.types = holder.types;
821 element.topLevelVariables = holder.topLevelVariables; 820 element.topLevelVariables = holder.topLevelVariables;
822 unit.element = element; 821 unit.element = element;
823 holder.validate(); 822 holder.validate();
824 return element; 823 return element;
825 } finally { 824 } finally {
826 timeCounter.stop(); 825 prevTag.makeCurrent();
827 } 826 }
828 } 827 }
829 } 828 }
830 829
831 /** 830 /**
832 * Instances of the class `ConstantVerifier` traverse an AST structure looking f or additional 831 * Instances of the class `ConstantVerifier` traverse an AST structure looking f or additional
833 * errors and warnings not covered by the parser and resolver. In particular, it looks for errors 832 * errors and warnings not covered by the parser and resolver. In particular, it looks for errors
834 * and warnings related to constant expressions. 833 * and warnings related to constant expressions.
835 */ 834 */
836 class ConstantVerifier extends RecursiveAstVisitor<Object> { 835 class ConstantVerifier extends RecursiveAstVisitor<Object> {
(...skipping 3617 matching lines...) Expand 10 before | Expand all | Expand 10 after
4454 4453
4455 HintGenerator(this._compilationUnits, this._context, this._errorListener) { 4454 HintGenerator(this._compilationUnits, this._context, this._errorListener) {
4456 _library = _compilationUnits[0].element.library; 4455 _library = _compilationUnits[0].element.library;
4457 _importsVerifier = new ImportsVerifier(_library); 4456 _importsVerifier = new ImportsVerifier(_library);
4458 _enableDart2JSHints = _context.analysisOptions.dart2jsHint; 4457 _enableDart2JSHints = _context.analysisOptions.dart2jsHint;
4459 _manager = new InheritanceManager(_compilationUnits[0].element.library); 4458 _manager = new InheritanceManager(_compilationUnits[0].element.library);
4460 _usedElementsVisitor = new _GatherUsedElementsVisitor(_library); 4459 _usedElementsVisitor = new _GatherUsedElementsVisitor(_library);
4461 } 4460 }
4462 4461
4463 void generateForLibrary() { 4462 void generateForLibrary() {
4464 TimeCounter_TimeCounterHandle timeCounter = 4463 PerformanceTag prevTag = PerformanceStatistics.hints.makeCurrent();
4465 PerformanceStatistics.hints.start();
4466 try { 4464 try {
4467 for (int i = 0; i < _compilationUnits.length; i++) { 4465 for (int i = 0; i < _compilationUnits.length; i++) {
4468 CompilationUnitElement element = _compilationUnits[i].element; 4466 CompilationUnitElement element = _compilationUnits[i].element;
4469 if (element != null) { 4467 if (element != null) {
4470 if (i == 0) { 4468 if (i == 0) {
4471 _importsVerifier.inDefiningCompilationUnit = true; 4469 _importsVerifier.inDefiningCompilationUnit = true;
4472 _generateForCompilationUnit(_compilationUnits[i], element.source); 4470 _generateForCompilationUnit(_compilationUnits[i], element.source);
4473 _importsVerifier.inDefiningCompilationUnit = false; 4471 _importsVerifier.inDefiningCompilationUnit = false;
4474 } else { 4472 } else {
4475 _generateForCompilationUnit(_compilationUnits[i], element.source); 4473 _generateForCompilationUnit(_compilationUnits[i], element.source);
4476 } 4474 }
4477 } 4475 }
4478 } 4476 }
4479 ErrorReporter definingCompilationUnitErrorReporter = 4477 ErrorReporter definingCompilationUnitErrorReporter =
4480 new ErrorReporter(_errorListener, _compilationUnits[0].element.source) ; 4478 new ErrorReporter(_errorListener, _compilationUnits[0].element.source) ;
4481 _importsVerifier.generateDuplicateImportHints( 4479 _importsVerifier.generateDuplicateImportHints(
4482 definingCompilationUnitErrorReporter); 4480 definingCompilationUnitErrorReporter);
4483 _importsVerifier.generateUnusedImportHints( 4481 _importsVerifier.generateUnusedImportHints(
4484 definingCompilationUnitErrorReporter); 4482 definingCompilationUnitErrorReporter);
4485 _library.accept( 4483 _library.accept(
4486 new _UnusedElementsVerifier(_errorListener, _usedElementsVisitor.usedE lements)); 4484 new _UnusedElementsVerifier(_errorListener, _usedElementsVisitor.usedE lements));
4487 } finally { 4485 } finally {
4488 timeCounter.stop(); 4486 prevTag.makeCurrent();
4489 } 4487 }
4490 } 4488 }
4491 4489
4492 void _generateForCompilationUnit(CompilationUnit unit, Source source) { 4490 void _generateForCompilationUnit(CompilationUnit unit, Source source) {
4493 ErrorReporter errorReporter = new ErrorReporter(_errorListener, source); 4491 ErrorReporter errorReporter = new ErrorReporter(_errorListener, source);
4494 unit.accept(_importsVerifier); 4492 unit.accept(_importsVerifier);
4495 // dead code analysis 4493 // dead code analysis
4496 unit.accept(new DeadCodeVerifier(errorReporter)); 4494 unit.accept(new DeadCodeVerifier(errorReporter));
4497 unit.accept(_usedElementsVisitor); 4495 unit.accept(_usedElementsVisitor);
4498 // dart2js analysis 4496 // dart2js analysis
(...skipping 3735 matching lines...) Expand 10 before | Expand all | Expand 10 after
8234 } 8232 }
8235 8233
8236 /** 8234 /**
8237 * Build the members in enum declarations. This cannot be done while building the rest of the 8235 * Build the members in enum declarations. This cannot be done while building the rest of the
8238 * element model because it depends on being able to access core types, which cannot happen until 8236 * element model because it depends on being able to access core types, which cannot happen until
8239 * the rest of the element model has been built (when resolving the core libra ry). 8237 * the rest of the element model has been built (when resolving the core libra ry).
8240 * 8238 *
8241 * @throws AnalysisException if any of the enum members could not be built 8239 * @throws AnalysisException if any of the enum members could not be built
8242 */ 8240 */
8243 void _buildEnumMembers() { 8241 void _buildEnumMembers() {
8244 TimeCounter_TimeCounterHandle timeCounter = 8242 PerformanceTag prevTag =
8245 PerformanceStatistics.resolve.start(); 8243 PerformanceStatistics.resolve.makeCurrent();
8246 try { 8244 try {
8247 for (Library library in _librariesInCycles) { 8245 for (Library library in _librariesInCycles) {
8248 for (Source source in library.compilationUnitSources) { 8246 for (Source source in library.compilationUnitSources) {
8249 EnumMemberBuilder builder = new EnumMemberBuilder(_typeProvider); 8247 EnumMemberBuilder builder = new EnumMemberBuilder(_typeProvider);
8250 library.getAST(source).accept(builder); 8248 library.getAST(source).accept(builder);
8251 } 8249 }
8252 } 8250 }
8253 } finally { 8251 } finally {
8254 timeCounter.stop(); 8252 prevTag.makeCurrent();
8255 } 8253 }
8256 } 8254 }
8257 8255
8258 /** 8256 /**
8259 * Finish steps that the [buildTypeHierarchies] could not perform, see 8257 * Finish steps that the [buildTypeHierarchies] could not perform, see
8260 * [ImplicitConstructorBuilder]. 8258 * [ImplicitConstructorBuilder].
8261 * 8259 *
8262 * @throws AnalysisException if any of the type hierarchies could not be resol ved 8260 * @throws AnalysisException if any of the type hierarchies could not be resol ved
8263 */ 8261 */
8264 void _buildImplicitConstructors() { 8262 void _buildImplicitConstructors() {
8265 TimeCounter_TimeCounterHandle timeCounter = 8263 PerformanceTag prevTag=
8266 PerformanceStatistics.resolve.start(); 8264 PerformanceStatistics.resolve.makeCurrent();
8267 try { 8265 try {
8268 ImplicitConstructorComputer computer = 8266 ImplicitConstructorComputer computer =
8269 new ImplicitConstructorComputer(_typeProvider); 8267 new ImplicitConstructorComputer(_typeProvider);
8270 for (Library library in _librariesInCycles) { 8268 for (Library library in _librariesInCycles) {
8271 for (Source source in library.compilationUnitSources) { 8269 for (Source source in library.compilationUnitSources) {
8272 computer.add( 8270 computer.add(
8273 library.getAST(source), 8271 library.getAST(source),
8274 source, 8272 source,
8275 library.libraryElement, 8273 library.libraryElement,
8276 library.libraryScope); 8274 library.libraryScope);
8277 } 8275 }
8278 } 8276 }
8279 computer.compute(); 8277 computer.compute();
8280 } finally { 8278 } finally {
8281 timeCounter.stop(); 8279 prevTag.makeCurrent();
8282 } 8280 }
8283 } 8281 }
8284 8282
8285 /** 8283 /**
8286 * Resolve the types referenced by function type aliases across all of the fun ction type aliases 8284 * Resolve the types referenced by function type aliases across all of the fun ction type aliases
8287 * defined in the current cycle. 8285 * defined in the current cycle.
8288 * 8286 *
8289 * @throws AnalysisException if any of the function type aliases could not be resolved 8287 * @throws AnalysisException if any of the function type aliases could not be resolved
8290 */ 8288 */
8291 void _buildTypeAliases() { 8289 void _buildTypeAliases() {
8292 TimeCounter_TimeCounterHandle timeCounter = 8290 PerformanceTag prevTag =
8293 PerformanceStatistics.resolve.start(); 8291 PerformanceStatistics.resolve.makeCurrent();
8294 try { 8292 try {
8295 List<LibraryResolver_TypeAliasInfo> typeAliases = 8293 List<LibraryResolver_TypeAliasInfo> typeAliases =
8296 new List<LibraryResolver_TypeAliasInfo>(); 8294 new List<LibraryResolver_TypeAliasInfo>();
8297 for (Library library in _librariesInCycles) { 8295 for (Library library in _librariesInCycles) {
8298 for (Source source in library.compilationUnitSources) { 8296 for (Source source in library.compilationUnitSources) {
8299 CompilationUnit ast = library.getAST(source); 8297 CompilationUnit ast = library.getAST(source);
8300 for (CompilationUnitMember member in ast.declarations) { 8298 for (CompilationUnitMember member in ast.declarations) {
8301 if (member is FunctionTypeAlias) { 8299 if (member is FunctionTypeAlias) {
8302 typeAliases.add( 8300 typeAliases.add(
8303 new LibraryResolver_TypeAliasInfo(library, source, member)); 8301 new LibraryResolver_TypeAliasInfo(library, source, member));
8304 } 8302 }
8305 } 8303 }
8306 } 8304 }
8307 } 8305 }
8308 // TODO(brianwilkerson) We need to sort the type aliases such that all 8306 // TODO(brianwilkerson) We need to sort the type aliases such that all
8309 // aliases referenced by an alias T are resolved before we resolve T. 8307 // aliases referenced by an alias T are resolved before we resolve T.
8310 for (LibraryResolver_TypeAliasInfo info in typeAliases) { 8308 for (LibraryResolver_TypeAliasInfo info in typeAliases) {
8311 TypeResolverVisitor visitor = 8309 TypeResolverVisitor visitor =
8312 new TypeResolverVisitor.con1(info._library, info._source, _typeProvi der); 8310 new TypeResolverVisitor.con1(info._library, info._source, _typeProvi der);
8313 info._typeAlias.accept(visitor); 8311 info._typeAlias.accept(visitor);
8314 } 8312 }
8315 } finally { 8313 } finally {
8316 timeCounter.stop(); 8314 prevTag.makeCurrent();
8317 } 8315 }
8318 } 8316 }
8319 8317
8320 /** 8318 /**
8321 * Resolve the type hierarchy across all of the types declared in the librarie s in the current 8319 * Resolve the type hierarchy across all of the types declared in the librarie s in the current
8322 * cycle. 8320 * cycle.
8323 * 8321 *
8324 * @throws AnalysisException if any of the type hierarchies could not be resol ved 8322 * @throws AnalysisException if any of the type hierarchies could not be resol ved
8325 */ 8323 */
8326 void _buildTypeHierarchies() { 8324 void _buildTypeHierarchies() {
8327 TimeCounter_TimeCounterHandle timeCounter = 8325 PerformanceTag prevTag =
8328 PerformanceStatistics.resolve.start(); 8326 PerformanceStatistics.resolve.makeCurrent();
8329 try { 8327 try {
8330 for (Library library in _librariesInCycles) { 8328 for (Library library in _librariesInCycles) {
8331 for (Source source in library.compilationUnitSources) { 8329 for (Source source in library.compilationUnitSources) {
8332 TypeResolverVisitor visitor = 8330 TypeResolverVisitor visitor =
8333 new TypeResolverVisitor.con1(library, source, _typeProvider); 8331 new TypeResolverVisitor.con1(library, source, _typeProvider);
8334 library.getAST(source).accept(visitor); 8332 library.getAST(source).accept(visitor);
8335 } 8333 }
8336 } 8334 }
8337 } finally { 8335 } finally {
8338 timeCounter.stop(); 8336 prevTag.makeCurrent();
8339 } 8337 }
8340 } 8338 }
8341 8339
8342 /** 8340 /**
8343 * Compute a dependency map of libraries reachable from the given library. A d ependency map is a 8341 * Compute a dependency map of libraries reachable from the given library. A d ependency map is a
8344 * table that maps individual libraries to a list of the libraries that either import or export 8342 * table that maps individual libraries to a list of the libraries that either import or export
8345 * those libraries. 8343 * those libraries.
8346 * 8344 *
8347 * This map is used to compute all of the libraries involved in a cycle that i nclude the root 8345 * This map is used to compute all of the libraries involved in a cycle that i nclude the root
8348 * library. Given that we only add libraries that are reachable from the root library, when we 8346 * library. Given that we only add libraries that are reachable from the root library, when we
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
8534 for (int i = 0; i < count; i++) { 8532 for (int i = 0; i < count; i++) {
8535 identifiers[i] = names[i].name; 8533 identifiers[i] = names[i].name;
8536 } 8534 }
8537 return identifiers; 8535 return identifiers;
8538 } 8536 }
8539 8537
8540 /** 8538 /**
8541 * Compute a value for all of the constants in the libraries being analyzed. 8539 * Compute a value for all of the constants in the libraries being analyzed.
8542 */ 8540 */
8543 void _performConstantEvaluation() { 8541 void _performConstantEvaluation() {
8544 TimeCounter_TimeCounterHandle timeCounter = 8542 PerformanceTag prevTag =
8545 PerformanceStatistics.resolve.start(); 8543 PerformanceStatistics.resolve.makeCurrent();
8546 try { 8544 try {
8547 ConstantValueComputer computer = 8545 ConstantValueComputer computer =
8548 new ConstantValueComputer(_typeProvider, analysisContext.declaredVaria bles); 8546 new ConstantValueComputer(_typeProvider, analysisContext.declaredVaria bles);
8549 for (Library library in _librariesInCycles) { 8547 for (Library library in _librariesInCycles) {
8550 for (Source source in library.compilationUnitSources) { 8548 for (Source source in library.compilationUnitSources) {
8551 try { 8549 try {
8552 CompilationUnit unit = library.getAST(source); 8550 CompilationUnit unit = library.getAST(source);
8553 if (unit != null) { 8551 if (unit != null) {
8554 computer.add(unit); 8552 computer.add(unit);
8555 } 8553 }
(...skipping 18 matching lines...) Expand all
8574 unit.accept(constantVerifier); 8572 unit.accept(constantVerifier);
8575 } on AnalysisException catch (exception, stackTrace) { 8573 } on AnalysisException catch (exception, stackTrace) {
8576 AnalysisEngine.instance.logger.logError( 8574 AnalysisEngine.instance.logger.logError(
8577 "Internal Error: Could not access AST for ${source.fullName} " 8575 "Internal Error: Could not access AST for ${source.fullName} "
8578 "during constant verification", 8576 "during constant verification",
8579 new CaughtException(exception, stackTrace)); 8577 new CaughtException(exception, stackTrace));
8580 } 8578 }
8581 } 8579 }
8582 } 8580 }
8583 } finally { 8581 } finally {
8584 timeCounter.stop(); 8582 prevTag.makeCurrent();
8585 } 8583 }
8586 } 8584 }
8587 8585
8588 /** 8586 /**
8589 * Resolve the identifiers and perform type analysis in the libraries in the c urrent cycle. 8587 * Resolve the identifiers and perform type analysis in the libraries in the c urrent cycle.
8590 * 8588 *
8591 * @throws AnalysisException if any of the identifiers could not be resolved o r if any of the 8589 * @throws AnalysisException if any of the identifiers could not be resolved o r if any of the
8592 * libraries could not have their types analyzed 8590 * libraries could not have their types analyzed
8593 */ 8591 */
8594 void _resolveReferencesAndTypes() { 8592 void _resolveReferencesAndTypes() {
8595 for (Library library in _librariesInCycles) { 8593 for (Library library in _librariesInCycles) {
8596 _resolveReferencesAndTypesInLibrary(library); 8594 _resolveReferencesAndTypesInLibrary(library);
8597 } 8595 }
8598 } 8596 }
8599 8597
8600 /** 8598 /**
8601 * Resolve the identifiers and perform type analysis in the given library. 8599 * Resolve the identifiers and perform type analysis in the given library.
8602 * 8600 *
8603 * @param library the library to be resolved 8601 * @param library the library to be resolved
8604 * @throws AnalysisException if any of the identifiers could not be resolved o r if the types in 8602 * @throws AnalysisException if any of the identifiers could not be resolved o r if the types in
8605 * the library cannot be analyzed 8603 * the library cannot be analyzed
8606 */ 8604 */
8607 void _resolveReferencesAndTypesInLibrary(Library library) { 8605 void _resolveReferencesAndTypesInLibrary(Library library) {
8608 TimeCounter_TimeCounterHandle timeCounter = 8606 PerformanceTag prevTag =
8609 PerformanceStatistics.resolve.start(); 8607 PerformanceStatistics.resolve.makeCurrent();
8610 try { 8608 try {
8611 for (Source source in library.compilationUnitSources) { 8609 for (Source source in library.compilationUnitSources) {
8612 CompilationUnit ast = library.getAST(source); 8610 CompilationUnit ast = library.getAST(source);
8613 ast.accept( 8611 ast.accept(
8614 new VariableResolverVisitor.con1(library, source, _typeProvider)); 8612 new VariableResolverVisitor.con1(library, source, _typeProvider));
8615 ResolverVisitor visitor = 8613 ResolverVisitor visitor =
8616 new ResolverVisitor.con1(library, source, _typeProvider); 8614 new ResolverVisitor.con1(library, source, _typeProvider);
8617 ast.accept(visitor); 8615 ast.accept(visitor);
8618 } 8616 }
8619 } finally { 8617 } finally {
8620 timeCounter.stop(); 8618 prevTag.makeCurrent();
8621 } 8619 }
8622 } 8620 }
8623 8621
8624 /** 8622 /**
8625 * Return the result of resolving the URI of the given URI-based directive aga inst the URI of the 8623 * Return the result of resolving the URI of the given URI-based directive aga inst the URI of the
8626 * given library, or `null` if the URI is not valid. 8624 * given library, or `null` if the URI is not valid.
8627 * 8625 *
8628 * @param librarySource the source representing the library containing the dir ective 8626 * @param librarySource the source representing the library containing the dir ective
8629 * @param directive the directive which URI should be resolved 8627 * @param directive the directive which URI should be resolved
8630 * @return the result of resolving the URI against the URI of the library 8628 * @return the result of resolving the URI against the URI of the library
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
8969 } 8967 }
8970 8968
8971 /** 8969 /**
8972 * Build the members in enum declarations. This cannot be done while building the rest of the 8970 * Build the members in enum declarations. This cannot be done while building the rest of the
8973 * element model because it depends on being able to access core types, which cannot happen until 8971 * element model because it depends on being able to access core types, which cannot happen until
8974 * the rest of the element model has been built (when resolving the core libra ry). 8972 * the rest of the element model has been built (when resolving the core libra ry).
8975 * 8973 *
8976 * @throws AnalysisException if any of the enum members could not be built 8974 * @throws AnalysisException if any of the enum members could not be built
8977 */ 8975 */
8978 void _buildEnumMembers() { 8976 void _buildEnumMembers() {
8979 TimeCounter_TimeCounterHandle timeCounter = 8977 PerformanceTag prevTag =
8980 PerformanceStatistics.resolve.start(); 8978 PerformanceStatistics.resolve.makeCurrent();
8981 try { 8979 try {
8982 for (ResolvableLibrary library in _librariesInCycle) { 8980 for (ResolvableLibrary library in _librariesInCycle) {
8983 for (Source source in library.compilationUnitSources) { 8981 for (Source source in library.compilationUnitSources) {
8984 EnumMemberBuilder builder = new EnumMemberBuilder(_typeProvider); 8982 EnumMemberBuilder builder = new EnumMemberBuilder(_typeProvider);
8985 library.getAST(source).accept(builder); 8983 library.getAST(source).accept(builder);
8986 } 8984 }
8987 } 8985 }
8988 } finally { 8986 } finally {
8989 timeCounter.stop(); 8987 prevTag.makeCurrent();
8990 } 8988 }
8991 } 8989 }
8992 8990
8993 /** 8991 /**
8994 * Finish steps that the [buildTypeHierarchies] could not perform, see 8992 * Finish steps that the [buildTypeHierarchies] could not perform, see
8995 * [ImplicitConstructorBuilder]. 8993 * [ImplicitConstructorBuilder].
8996 * 8994 *
8997 * @throws AnalysisException if any of the type hierarchies could not be resol ved 8995 * @throws AnalysisException if any of the type hierarchies could not be resol ved
8998 */ 8996 */
8999 void _buildImplicitConstructors() { 8997 void _buildImplicitConstructors() {
9000 TimeCounter_TimeCounterHandle timeCounter = 8998 PerformanceTag prevTag =
9001 PerformanceStatistics.resolve.start(); 8999 PerformanceStatistics.resolve.makeCurrent();
9002 try { 9000 try {
9003 ImplicitConstructorComputer computer = 9001 ImplicitConstructorComputer computer =
9004 new ImplicitConstructorComputer(_typeProvider); 9002 new ImplicitConstructorComputer(_typeProvider);
9005 for (ResolvableLibrary library in _librariesInCycle) { 9003 for (ResolvableLibrary library in _librariesInCycle) {
9006 for (ResolvableCompilationUnit unit in 9004 for (ResolvableCompilationUnit unit in
9007 library.resolvableCompilationUnits) { 9005 library.resolvableCompilationUnits) {
9008 Source source = unit.source; 9006 Source source = unit.source;
9009 CompilationUnit ast = unit.compilationUnit; 9007 CompilationUnit ast = unit.compilationUnit;
9010 computer.add( 9008 computer.add(
9011 ast, 9009 ast,
9012 source, 9010 source,
9013 library.libraryElement, 9011 library.libraryElement,
9014 library.libraryScope); 9012 library.libraryScope);
9015 } 9013 }
9016 } 9014 }
9017 computer.compute(); 9015 computer.compute();
9018 } finally { 9016 } finally {
9019 timeCounter.stop(); 9017 prevTag.makeCurrent();
9020 } 9018 }
9021 } 9019 }
9022 9020
9023 HashMap<Source, ResolvableLibrary> _buildLibraryMap() { 9021 HashMap<Source, ResolvableLibrary> _buildLibraryMap() {
9024 HashMap<Source, ResolvableLibrary> libraryMap = 9022 HashMap<Source, ResolvableLibrary> libraryMap =
9025 new HashMap<Source, ResolvableLibrary>(); 9023 new HashMap<Source, ResolvableLibrary>();
9026 int libraryCount = _librariesInCycle.length; 9024 int libraryCount = _librariesInCycle.length;
9027 for (int i = 0; i < libraryCount; i++) { 9025 for (int i = 0; i < libraryCount; i++) {
9028 ResolvableLibrary library = _librariesInCycle[i]; 9026 ResolvableLibrary library = _librariesInCycle[i];
9029 library.errorListener = _errorListener; 9027 library.errorListener = _errorListener;
9030 libraryMap[library.librarySource] = library; 9028 libraryMap[library.librarySource] = library;
9031 List<ResolvableLibrary> dependencies = library.importsAndExports; 9029 List<ResolvableLibrary> dependencies = library.importsAndExports;
9032 int dependencyCount = dependencies.length; 9030 int dependencyCount = dependencies.length;
9033 for (int j = 0; j < dependencyCount; j++) { 9031 for (int j = 0; j < dependencyCount; j++) {
9034 ResolvableLibrary dependency = dependencies[j]; 9032 ResolvableLibrary dependency = dependencies[j];
9035 //dependency.setErrorListener(errorListener); 9033 //dependency.setErrorListener(errorListener);
9036 libraryMap[dependency.librarySource] = dependency; 9034 libraryMap[dependency.librarySource] = dependency;
9037 } 9035 }
9038 } 9036 }
9039 return libraryMap; 9037 return libraryMap;
9040 } 9038 }
9041 9039
9042 /** 9040 /**
9043 * Resolve the types referenced by function type aliases across all of the fun ction type aliases 9041 * Resolve the types referenced by function type aliases across all of the fun ction type aliases
9044 * defined in the current cycle. 9042 * defined in the current cycle.
9045 * 9043 *
9046 * @throws AnalysisException if any of the function type aliases could not be resolved 9044 * @throws AnalysisException if any of the function type aliases could not be resolved
9047 */ 9045 */
9048 void _buildTypeAliases() { 9046 void _buildTypeAliases() {
9049 TimeCounter_TimeCounterHandle timeCounter = 9047 PerformanceTag prevTag =
9050 PerformanceStatistics.resolve.start(); 9048 PerformanceStatistics.resolve.makeCurrent();
9051 try { 9049 try {
9052 List<LibraryResolver2_TypeAliasInfo> typeAliases = 9050 List<LibraryResolver2_TypeAliasInfo> typeAliases =
9053 new List<LibraryResolver2_TypeAliasInfo>(); 9051 new List<LibraryResolver2_TypeAliasInfo>();
9054 for (ResolvableLibrary library in _librariesInCycle) { 9052 for (ResolvableLibrary library in _librariesInCycle) {
9055 for (ResolvableCompilationUnit unit in 9053 for (ResolvableCompilationUnit unit in
9056 library.resolvableCompilationUnits) { 9054 library.resolvableCompilationUnits) {
9057 for (CompilationUnitMember member in 9055 for (CompilationUnitMember member in
9058 unit.compilationUnit.declarations) { 9056 unit.compilationUnit.declarations) {
9059 if (member is FunctionTypeAlias) { 9057 if (member is FunctionTypeAlias) {
9060 typeAliases.add( 9058 typeAliases.add(
9061 new LibraryResolver2_TypeAliasInfo(library, unit.source, membe r)); 9059 new LibraryResolver2_TypeAliasInfo(library, unit.source, membe r));
9062 } 9060 }
9063 } 9061 }
9064 } 9062 }
9065 } 9063 }
9066 // TODO(brianwilkerson) We need to sort the type aliases such that all 9064 // TODO(brianwilkerson) We need to sort the type aliases such that all
9067 // aliases referenced by an alias T are resolved before we resolve T. 9065 // aliases referenced by an alias T are resolved before we resolve T.
9068 for (LibraryResolver2_TypeAliasInfo info in typeAliases) { 9066 for (LibraryResolver2_TypeAliasInfo info in typeAliases) {
9069 TypeResolverVisitor visitor = 9067 TypeResolverVisitor visitor =
9070 new TypeResolverVisitor.con4(info._library, info._source, _typeProvi der); 9068 new TypeResolverVisitor.con4(info._library, info._source, _typeProvi der);
9071 info._typeAlias.accept(visitor); 9069 info._typeAlias.accept(visitor);
9072 } 9070 }
9073 } finally { 9071 } finally {
9074 timeCounter.stop(); 9072 prevTag.makeCurrent();
9075 } 9073 }
9076 } 9074 }
9077 9075
9078 /** 9076 /**
9079 * Resolve the type hierarchy across all of the types declared in the librarie s in the current 9077 * Resolve the type hierarchy across all of the types declared in the librarie s in the current
9080 * cycle. 9078 * cycle.
9081 * 9079 *
9082 * @throws AnalysisException if any of the type hierarchies could not be resol ved 9080 * @throws AnalysisException if any of the type hierarchies could not be resol ved
9083 */ 9081 */
9084 void _buildTypeHierarchies() { 9082 void _buildTypeHierarchies() {
9085 TimeCounter_TimeCounterHandle timeCounter = 9083 PerformanceTag prevTag =
9086 PerformanceStatistics.resolve.start(); 9084 PerformanceStatistics.resolve.makeCurrent();
9087 try { 9085 try {
9088 for (ResolvableLibrary library in _librariesInCycle) { 9086 for (ResolvableLibrary library in _librariesInCycle) {
9089 for (ResolvableCompilationUnit unit in 9087 for (ResolvableCompilationUnit unit in
9090 library.resolvableCompilationUnits) { 9088 library.resolvableCompilationUnits) {
9091 Source source = unit.source; 9089 Source source = unit.source;
9092 CompilationUnit ast = unit.compilationUnit; 9090 CompilationUnit ast = unit.compilationUnit;
9093 TypeResolverVisitor visitor = 9091 TypeResolverVisitor visitor =
9094 new TypeResolverVisitor.con4(library, source, _typeProvider); 9092 new TypeResolverVisitor.con4(library, source, _typeProvider);
9095 ast.accept(visitor); 9093 ast.accept(visitor);
9096 } 9094 }
9097 } 9095 }
9098 } finally { 9096 } finally {
9099 timeCounter.stop(); 9097 prevTag.makeCurrent();
9100 } 9098 }
9101 } 9099 }
9102 9100
9103 /** 9101 /**
9104 * Return an array containing the lexical identifiers associated with the node s in the given list. 9102 * Return an array containing the lexical identifiers associated with the node s in the given list.
9105 * 9103 *
9106 * @param names the AST nodes representing the identifiers 9104 * @param names the AST nodes representing the identifiers
9107 * @return the lexical identifiers associated with the nodes in the list 9105 * @return the lexical identifiers associated with the nodes in the list
9108 */ 9106 */
9109 List<String> _getIdentifiers(NodeList<SimpleIdentifier> names) { 9107 List<String> _getIdentifiers(NodeList<SimpleIdentifier> names) {
9110 int count = names.length; 9108 int count = names.length;
9111 List<String> identifiers = new List<String>(count); 9109 List<String> identifiers = new List<String>(count);
9112 for (int i = 0; i < count; i++) { 9110 for (int i = 0; i < count; i++) {
9113 identifiers[i] = names[i].name; 9111 identifiers[i] = names[i].name;
9114 } 9112 }
9115 return identifiers; 9113 return identifiers;
9116 } 9114 }
9117 9115
9118 /** 9116 /**
9119 * Compute a value for all of the constants in the libraries being analyzed. 9117 * Compute a value for all of the constants in the libraries being analyzed.
9120 */ 9118 */
9121 void _performConstantEvaluation() { 9119 void _performConstantEvaluation() {
9122 TimeCounter_TimeCounterHandle timeCounter = 9120 PerformanceTag prevTag =
9123 PerformanceStatistics.resolve.start(); 9121 PerformanceStatistics.resolve.makeCurrent();
9124 try { 9122 try {
9125 ConstantValueComputer computer = 9123 ConstantValueComputer computer =
9126 new ConstantValueComputer(_typeProvider, analysisContext.declaredVaria bles); 9124 new ConstantValueComputer(_typeProvider, analysisContext.declaredVaria bles);
9127 for (ResolvableLibrary library in _librariesInCycle) { 9125 for (ResolvableLibrary library in _librariesInCycle) {
9128 for (ResolvableCompilationUnit unit in 9126 for (ResolvableCompilationUnit unit in
9129 library.resolvableCompilationUnits) { 9127 library.resolvableCompilationUnits) {
9130 CompilationUnit ast = unit.compilationUnit; 9128 CompilationUnit ast = unit.compilationUnit;
9131 if (ast != null) { 9129 if (ast != null) {
9132 computer.add(ast); 9130 computer.add(ast);
9133 } 9131 }
9134 } 9132 }
9135 } 9133 }
9136 computer.computeValues(); 9134 computer.computeValues();
9137 // As a temporary workaround for issue 21572, run ConstantVerifier now. 9135 // As a temporary workaround for issue 21572, run ConstantVerifier now.
9138 // TODO(paulberry): remove this workaround once issue 21572 is fixed. 9136 // TODO(paulberry): remove this workaround once issue 21572 is fixed.
9139 for (ResolvableLibrary library in _librariesInCycle) { 9137 for (ResolvableLibrary library in _librariesInCycle) {
9140 for (ResolvableCompilationUnit unit in 9138 for (ResolvableCompilationUnit unit in
9141 library.resolvableCompilationUnits) { 9139 library.resolvableCompilationUnits) {
9142 CompilationUnit ast = unit.compilationUnit; 9140 CompilationUnit ast = unit.compilationUnit;
9143 ErrorReporter errorReporter = 9141 ErrorReporter errorReporter =
9144 new ErrorReporter(_errorListener, unit.source); 9142 new ErrorReporter(_errorListener, unit.source);
9145 ConstantVerifier constantVerifier = 9143 ConstantVerifier constantVerifier =
9146 new ConstantVerifier(errorReporter, library.libraryElement, _typeP rovider); 9144 new ConstantVerifier(errorReporter, library.libraryElement, _typeP rovider);
9147 ast.accept(constantVerifier); 9145 ast.accept(constantVerifier);
9148 } 9146 }
9149 } 9147 }
9150 } finally { 9148 } finally {
9151 timeCounter.stop(); 9149 prevTag.makeCurrent();
9152 } 9150 }
9153 } 9151 }
9154 9152
9155 /** 9153 /**
9156 * Resolve the identifiers and perform type analysis in the libraries in the c urrent cycle. 9154 * Resolve the identifiers and perform type analysis in the libraries in the c urrent cycle.
9157 * 9155 *
9158 * @throws AnalysisException if any of the identifiers could not be resolved o r if any of the 9156 * @throws AnalysisException if any of the identifiers could not be resolved o r if any of the
9159 * libraries could not have their types analyzed 9157 * libraries could not have their types analyzed
9160 */ 9158 */
9161 void _resolveReferencesAndTypes() { 9159 void _resolveReferencesAndTypes() {
9162 for (ResolvableLibrary library in _librariesInCycle) { 9160 for (ResolvableLibrary library in _librariesInCycle) {
9163 _resolveReferencesAndTypesInLibrary(library); 9161 _resolveReferencesAndTypesInLibrary(library);
9164 } 9162 }
9165 } 9163 }
9166 9164
9167 /** 9165 /**
9168 * Resolve the identifiers and perform type analysis in the given library. 9166 * Resolve the identifiers and perform type analysis in the given library.
9169 * 9167 *
9170 * @param library the library to be resolved 9168 * @param library the library to be resolved
9171 * @throws AnalysisException if any of the identifiers could not be resolved o r if the types in 9169 * @throws AnalysisException if any of the identifiers could not be resolved o r if the types in
9172 * the library cannot be analyzed 9170 * the library cannot be analyzed
9173 */ 9171 */
9174 void _resolveReferencesAndTypesInLibrary(ResolvableLibrary library) { 9172 void _resolveReferencesAndTypesInLibrary(ResolvableLibrary library) {
9175 TimeCounter_TimeCounterHandle timeCounter = 9173 PerformanceTag prevTag =
9176 PerformanceStatistics.resolve.start(); 9174 PerformanceStatistics.resolve.makeCurrent();
9177 try { 9175 try {
9178 for (ResolvableCompilationUnit unit in library.resolvableCompilationUnits) 9176 for (ResolvableCompilationUnit unit in library.resolvableCompilationUnits)
9179 { 9177 {
9180 Source source = unit.source; 9178 Source source = unit.source;
9181 CompilationUnit ast = unit.compilationUnit; 9179 CompilationUnit ast = unit.compilationUnit;
9182 ast.accept( 9180 ast.accept(
9183 new VariableResolverVisitor.con3(library, source, _typeProvider)); 9181 new VariableResolverVisitor.con3(library, source, _typeProvider));
9184 ResolverVisitor visitor = 9182 ResolverVisitor visitor =
9185 new ResolverVisitor.con4(library, source, _typeProvider); 9183 new ResolverVisitor.con4(library, source, _typeProvider);
9186 ast.accept(visitor); 9184 ast.accept(visitor);
9187 } 9185 }
9188 } finally { 9186 } finally {
9189 timeCounter.stop(); 9187 prevTag.makeCurrent();
9190 } 9188 }
9191 } 9189 }
9192 9190
9193 /** 9191 /**
9194 * Report that the async library could not be resolved in the given 9192 * Report that the async library could not be resolved in the given
9195 * [analysisContext] and throw an exception. [asyncLibrarySource] is the sour ce 9193 * [analysisContext] and throw an exception. [asyncLibrarySource] is the sour ce
9196 * representing the async library. 9194 * representing the async library.
9197 */ 9195 */
9198 static void missingAsyncLibrary(AnalysisContext analysisContext, 9196 static void missingAsyncLibrary(AnalysisContext analysisContext,
9199 Source asyncLibrarySource) { 9197 Source asyncLibrarySource) {
(...skipping 6494 matching lines...) Expand 10 before | Expand all | Expand 10 after
15694 * library. 15692 * library.
15695 */ 15693 */
15696 final HashSet<String> members = new HashSet<String>(); 15694 final HashSet<String> members = new HashSet<String>();
15697 15695
15698 /** 15696 /**
15699 * Names of resolved or unresolved class members that are read in the 15697 * Names of resolved or unresolved class members that are read in the
15700 * library. 15698 * library.
15701 */ 15699 */
15702 final HashSet<String> readMembers = new HashSet<String>(); 15700 final HashSet<String> readMembers = new HashSet<String>();
15703 } 15701 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/engine.dart ('k') | pkg/analyzer/lib/src/generated/source_io.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698