| Index: pkg/analysis_server/lib/src/analysis_server.dart
|
| diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
|
| index 4264fec049b412116bb304f90ae513f35fa08bbd..8c092db7592f449ab7d89268d15417d67f81333e 100644
|
| --- a/pkg/analysis_server/lib/src/analysis_server.dart
|
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart
|
| @@ -26,6 +26,7 @@ import 'package:analyzer/src/generated/sdk.dart';
|
| import 'package:analyzer/src/generated/source_io.dart';
|
| import 'package:analyzer/src/generated/java_engine.dart';
|
| import 'package:analysis_services/constants.dart';
|
| +import 'package:analysis_services/correction/change.dart';
|
| import 'package:analysis_services/index/index.dart';
|
| import 'package:analysis_services/search/search_engine.dart';
|
| import 'package:analyzer/src/generated/element.dart';
|
| @@ -484,18 +485,23 @@ class AnalysisServer {
|
| // and user modifies a file in package B).
|
| if (analysisContext != null) {
|
| Source source = getSource(file);
|
| - if (change.offset == null) {
|
| - analysisContext.setContents(source, change.contentOrReplacement);
|
| - } else {
|
| - // TODO(paulberry): an error should be generated if source is not
|
| - // currently in the content cache.
|
| - TimestampedData<String> oldContents = analysisContext.getContents(
|
| - source);
|
| - int offsetEnd = change.offset + change.length;
|
| - String newContents = oldContents.data.substring(0, change.offset) +
|
| - change.contentOrReplacement + oldContents.data.substring(offsetEnd);
|
| - analysisContext.setChangedContents(source, newContents, change.offset,
|
| - change.length, change.contentOrReplacement.length);
|
| + switch (change.type) {
|
| + case ADD:
|
| + analysisContext.setContents(source, change.content);
|
| + break;
|
| + case CHANGE:
|
| + // TODO(paulberry): an error should be generated if source is not
|
| + // currently in the content cache.
|
| + TimestampedData<String> oldContents = analysisContext.getContents(
|
| + source);
|
| + String newContents = Edit.applySequence(oldContents.data, change.changes);
|
| + // TODO(paulberry): to aid in incremental processing it would be
|
| + // better to use setChangedContents.
|
| + analysisContext.setContents(source, newContents);
|
| + break;
|
| + case REMOVE:
|
| + analysisContext.setContents(source, null);
|
| + break;
|
| }
|
| schedulePerformAnalysisOperation(analysisContext);
|
| }
|
|
|