| 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 914b3ffd5be48b8c52392f1247c154a846825255..111561e39d518aa70e5002b4868f343210fbc286 100644
|
| --- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
|
| +++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
|
| @@ -1475,27 +1475,44 @@ class PoorMansIncrementalResolver {
|
| for (int i = 0; i < length; i++) {
|
| AstNode oldParent = oldParents[i];
|
| AstNode newParent = newParents[i];
|
| - if (oldParent is ConstructorInitializer ||
|
| - newParent is ConstructorInitializer) {
|
| - logger.log('Failure: changes in constant constructor initializers'
|
| - ' may cause external changes in constant objects.');
|
| - return false;
|
| - }
|
| - if (oldParent is FunctionDeclaration &&
|
| + if (oldParent is CompilationUnit && newParent is CompilationUnit) {
|
| + int oldLength = oldParent.declarations.length;
|
| + int newLength = newParent.declarations.length;
|
| + if (oldLength != newLength) {
|
| + logger.log(
|
| + 'Failure: unit declarations mismatch $oldLength vs. $newLength');
|
| + return false;
|
| + }
|
| + } else if (oldParent is ClassDeclaration &&
|
| + newParent is ClassDeclaration) {
|
| + int oldLength = oldParent.members.length;
|
| + int newLength = newParent.members.length;
|
| + if (oldLength != newLength) {
|
| + logger.log(
|
| + 'Failure: class declarations mismatch $oldLength vs. $newLength');
|
| + return false;
|
| + }
|
| + } else if (oldParent is FunctionDeclaration &&
|
| newParent is FunctionDeclaration ||
|
| - oldParent is MethodDeclaration &&
|
| - newParent is MethodDeclaration ||
|
| oldParent is ConstructorDeclaration &&
|
| - newParent is ConstructorDeclaration) {
|
| + newParent is ConstructorDeclaration ||
|
| + oldParent is MethodDeclaration &&
|
| + newParent is MethodDeclaration) {
|
| Element oldElement = (oldParent as Declaration).element;
|
| if (new DeclarationMatcher().matches(newParent, oldElement) ==
|
| DeclarationMatchKind.MATCH) {
|
| oldNode = oldParent;
|
| newNode = newParent;
|
| found = true;
|
| + } else {
|
| + return false;
|
| }
|
| - }
|
| - if (oldParent is FunctionBody || newParent is FunctionBody) {
|
| + } else if (oldParent is ConstructorInitializer ||
|
| + newParent is ConstructorInitializer) {
|
| + logger.log('Failure: changes in constant constructor initializers'
|
| + ' may cause external changes in constant objects.');
|
| + return false;
|
| + } else if (oldParent is FunctionBody && newParent is FunctionBody) {
|
| if (oldParent is BlockFunctionBody &&
|
| newParent is BlockFunctionBody) {
|
| oldNode = oldParent;
|
| @@ -1505,6 +1522,17 @@ class PoorMansIncrementalResolver {
|
| }
|
| logger.log('Failure: not a block function body.');
|
| return false;
|
| + } else if (oldParent is FieldDeclaration &&
|
| + newParent is FieldDeclaration ||
|
| + oldParent is FunctionExpression &&
|
| + newParent is FunctionExpression ||
|
| + oldParent is VariableDeclaration &&
|
| + newParent is VariableDeclaration) {
|
| + // skip
|
| + } else {
|
| + logger.log('Failure: old and new parent mismatch'
|
| + ' ${oldParent.runtimeType} vs. ${newParent.runtimeType}');
|
| + return false;
|
| }
|
| }
|
| if (!found) {
|
|
|