Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/WorkspaceDeltaProcessor.java |
diff --git a/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/WorkspaceDeltaProcessor.java b/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/WorkspaceDeltaProcessor.java |
index fe82c5e97c1bf0a5958447eb6fe2327355ddbada..87d0305a0ab7fdcfcd01e19e2ac77f2c0ce08544 100644 |
--- a/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/WorkspaceDeltaProcessor.java |
+++ b/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/WorkspaceDeltaProcessor.java |
@@ -5,6 +5,10 @@ import com.google.dart.tools.core.DartCore; |
import com.google.dart.tools.core.analysis.model.Project; |
import com.google.dart.tools.core.analysis.model.ProjectManager; |
import com.google.dart.tools.core.internal.builder.AnalysisWorker; |
+import com.google.dart.tools.core.internal.builder.DeltaProcessor; |
+import com.google.dart.tools.core.internal.builder.IgnoreResourceFilter; |
+import com.google.dart.tools.core.internal.builder.IndexUpdater; |
+import com.google.dart.tools.core.internal.builder.ProjectUpdater; |
import org.eclipse.core.resources.IProject; |
import org.eclipse.core.resources.IResource; |
@@ -56,15 +60,22 @@ public class WorkspaceDeltaProcessor implements IResourceChangeListener { |
return true; |
} else if (res.getType() == IResource.FOLDER) { |
- if (res.getName().equals(DartCore.PACKAGES_DIRECTORY_NAME) |
- && (res.getParent().findMember(DartCore.PUBSPEC_FILE_NAME) != null)) { |
+ if (res.getName().equals(DartCore.PACKAGES_DIRECTORY_NAME)) { |
// The builder is not notified about changes in symlinked folders (e.g. packages) |
- // The context needs the delta of changes, what has to be removed and also added. |
- // Since at this point there is no knowledge of previous package details, do a |
- // reanalyze for the context |
+ // thus we traverse those changes here using the same mechanism as the builder |
Project project = manager.getProject(res.getProject()); |
- project.discardContextsIn(res.getParent()); |
+ ProjectUpdater updater = new ProjectUpdater(); |
+ IndexUpdater indexUpdater = new IndexUpdater(manager.getIndex()); |
+ DeltaProcessor processor = new DeltaProcessor(project); |
+ IgnoreResourceFilter filter = new IgnoreResourceFilter(); |
+ filter.addDeltaListener(updater); |
+ filter.addDeltaListener(indexUpdater); |
+ processor.addDeltaListener(filter); |
+ processor.traverse(delta); |
+ updater.applyChanges(); |
+ AnalysisContext context = manager.getContext(res); |
+ startBackgroundAnalysis(project, context); |
return false; |
} |
return true; |