Chromium Code Reviews| Index: pkg/analyzer/lib/src/generated/incremental_resolver.dart |
| diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart |
| index ac00711411a909aab8fea36c9854a9ecdaddce4e..8ddf2ab63d3d75fda68766996962033106efc426 100644 |
| --- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart |
| +++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart |
| @@ -12,7 +12,7 @@ import 'element.dart'; |
| import 'engine.dart'; |
| import 'error.dart'; |
| import 'error_verifier.dart'; |
| -import 'incremental_logger.dart' show logger; |
| +import 'incremental_logger.dart' show logger, LoggerTimer; |
| import 'java_engine.dart'; |
| import 'parser.dart'; |
| import 'resolver.dart'; |
| @@ -85,12 +85,15 @@ class DeclarationMatcher extends RecursiveAstVisitor { |
| * element model |
| */ |
| bool matches(AstNode node, Element element) { |
| - _captureEnclosingElements(element); |
| - _gatherElements(element); |
| + logger.enter('match $element @ ${element.nameOffset}'); |
| try { |
| + _captureEnclosingElements(element); |
| + _gatherElements(element); |
| node.accept(this); |
| } on _DeclarationMismatchException catch (exception) { |
| return false; |
| + } finally { |
| + logger.exit(); |
| } |
| return _unmatchedElements.isEmpty; |
| } |
| @@ -670,21 +673,29 @@ class IncrementalResolver { |
| * [node] - the root of the AST structure to be resolved. |
| */ |
| void resolve(AstNode node) { |
| - AstNode rootNode = _findResolutionRoot(node); |
| - // update elements |
| - _updateElementNameOffsets( |
| - _definingUnit, |
| - _updateOffset, |
| - _updateNewLength - _updateOldLength); |
| - if (_elementModelChanged(rootNode)) { |
| - throw new AnalysisException("Cannot resolve node: element model changed"); |
| + logger.enter('resolve: $_definingUnit'); |
| + try { |
| + logger.log(() => 'node: $node'); |
| + AstNode rootNode = _findResolutionRoot(node); |
| + logger.log(() => 'rootNode: $rootNode'); |
| + // update elements |
| + _updateElementNameOffsets( |
| + _definingUnit, |
| + _updateOffset, |
| + _updateNewLength - _updateOldLength); |
| + if (_elementModelChanged(rootNode)) { |
| + throw new AnalysisException( |
| + "Cannot resolve node: element model changed"); |
| + } |
| + _updateElements(rootNode); |
| + // resolve |
| + _resolveReferences(rootNode); |
| + // verify |
| + _verify(rootNode); |
| + _generateHints(rootNode); |
| + } finally { |
| + logger.exit(); |
| } |
| - _updateElements(rootNode); |
| - // resolve |
| - _resolveReferences(rootNode); |
| - // verify |
| - _verify(rootNode); |
| - _generateHints(rootNode); |
| } |
| /** |
| @@ -751,6 +762,7 @@ class IncrementalResolver { |
| } |
| void _generateHints(AstNode node) { |
| + LoggerTimer timer = logger.startTimer(); |
|
Brian Wilkerson
2014/12/03 19:31:12
Should we use try/finally to ensure that the timin
scheglov
2014/12/03 19:46:35
Acknowledged.
|
| RecordingErrorListener errorListener = new RecordingErrorListener(); |
| CompilationUnit unit = node.getAncestor((n) => n is CompilationUnit); |
| AnalysisContext analysisContext = _definingLibrary.context; |
| @@ -758,6 +770,7 @@ class IncrementalResolver { |
| new HintGenerator(<CompilationUnit>[unit], analysisContext, errorListener); |
| hintGenerator.generateForLibrary(); |
| _hints = errorListener.getErrorsForSource(_source); |
| + timer.stop('generate hints'); |
| } |
| /** |
| @@ -774,6 +787,7 @@ class IncrementalResolver { |
| } |
| _resolveReferences(AstNode node) { |
| + LoggerTimer timer = logger.startTimer(); |
| RecordingErrorListener errorListener = new RecordingErrorListener(); |
| // prepare context |
| _resolutionContext = |
| @@ -820,9 +834,11 @@ class IncrementalResolver { |
| } |
| // remember errors |
| _resolveErrors = errorListener.getErrorsForSource(_source); |
| + timer.stop('resolve references'); |
| } |
| void _updateElements(AstNode node) { |
| + LoggerTimer timer = logger.startTimer(); |
| // build elements in node |
| ElementHolder holder; |
| _ElementsRestorer elementsRestorer = new _ElementsRestorer(node); |
| @@ -870,9 +886,11 @@ class IncrementalResolver { |
| oldElement.labels = newElement.labels; |
| oldElement.localVariables = newElement.localVariables; |
| } |
| + timer.stop('update elements'); |
| } |
| void _verify(AstNode node) { |
| + LoggerTimer timer = logger.startTimer(); |
| RecordingErrorListener errorListener = new RecordingErrorListener(); |
| ErrorReporter errorReporter = new ErrorReporter(errorListener, _source); |
| ErrorVerifier errorVerifier = new ErrorVerifier( |
| @@ -886,10 +904,13 @@ class IncrementalResolver { |
| } |
| node.accept(errorVerifier); |
| _verifyErrors = errorListener.getErrorsForSource(_source); |
| + timer.stop('verify'); |
| } |
| static void _updateElementNameOffsets(Element root, int offset, int delta) { |
| + LoggerTimer timer = logger.startTimer(); |
| root.accept(new _ElementNameOffsetUpdater(offset, delta)); |
| + timer.stop('update element offsets'); |
| } |
| } |
| @@ -920,7 +941,7 @@ class PoorMansIncrementalResolver { |
| * The [oldUnit] might be damaged. |
| */ |
| bool resolve(CompilationUnit oldUnit, String newCode) { |
| - logger.enter('resolve $_unitSource'); |
| + logger.enter('diff/resolve $_unitSource'); |
| logger.log(oldUnit != null ? 'has oldUnit' : 'oldUnit is null'); |
| try { |
| CompilationUnit newUnit = _parseUnit(newCode); |
| @@ -963,8 +984,8 @@ class PoorMansIncrementalResolver { |
| _findNodeCovering(oldUnit, beginOffsetOld, endOffsetOld); |
| AstNode newNode = |
| _findNodeCovering(newUnit, beginOffsetNew, endOffsetNew); |
| - logger.log('oldNode: $oldNode'); |
| - logger.log('newNode: $newNode'); |
| + logger.log(() => 'oldNode: $oldNode'); |
| + logger.log(() => 'newNode: $newNode'); |
| // Try to find the smallest common node, a FunctionBody currently. |
| { |
| List<AstNode> oldParents = _getParents(oldNode); |
| @@ -994,8 +1015,8 @@ class PoorMansIncrementalResolver { |
| return false; |
| } |
| } |
| - logger.log('oldNode: $oldNode'); |
| - logger.log('newNode: $newNode'); |
| + logger.log(() => 'oldNode: $oldNode'); |
| + logger.log(() => 'newNode: $newNode'); |
| // prepare update range |
| _updateOffset = oldNode.offset; |
| _updateEndOld = oldNode.end; |
| @@ -1042,12 +1063,17 @@ class PoorMansIncrementalResolver { |
| } |
| CompilationUnit _parseUnit(String code) { |
| - Token token = _scan(code); |
| - RecordingErrorListener errorListener = new RecordingErrorListener(); |
| - Parser parser = new Parser(_unitSource, errorListener); |
| - CompilationUnit unit = parser.parseCompilationUnit(token); |
| - _newParseErrors = errorListener.errors; |
| - return unit; |
| + LoggerTimer timer = logger.startTimer(); |
| + try { |
| + Token token = _scan(code); |
| + RecordingErrorListener errorListener = new RecordingErrorListener(); |
| + Parser parser = new Parser(_unitSource, errorListener); |
| + CompilationUnit unit = parser.parseCompilationUnit(token); |
| + _newParseErrors = errorListener.errors; |
| + return unit; |
| + } finally { |
| + timer.stop('parse'); |
| + } |
| } |
| void _resolveComment(CompilationUnit oldUnit, CompilationUnit newUnit, |