diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart index 8976a09054a..975a9115709 100644 --- a/pkg/analysis_server/lib/src/analysis_server.dart +++ b/pkg/analysis_server/lib/src/analysis_server.dart @@ -470,12 +470,18 @@ class AnalysisServer { Set todoFiles = oldFiles != null ? newFiles.difference(oldFiles) : newFiles; for (String file in todoFiles) { Source source = getSource(file); + // prepare context AnalysisContext context = getAnalysisContext(file); + if (context == null) { + continue; + } // errors if (service == AnalysisService.ERRORS) { LineInfo lineInfo = context.getLineInfo(source); - List errors = context.getErrors(source).errors; - sendAnalysisNotificationErrors(this, file, lineInfo, errors); + if (lineInfo != null) { + List errors = context.getErrors(source).errors; + sendAnalysisNotificationErrors(this, file, lineInfo, errors); + } } // Dart unit notifications. if (AnalysisEngine.isDartFileName(file)) { diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart index f9ee43c93f3..b4b0442e015 100644 --- a/pkg/analysis_server/test/domain_analysis_test.dart +++ b/pkg/analysis_server/test/domain_analysis_test.dart @@ -325,6 +325,19 @@ void test_setSubscriptions() { }); }); }); + + test('after analysis, no such file', () { + AnalysisTestHelper helper = new AnalysisTestHelper(); + helper.createSingleFileProject('int V = 42;'); + return helper.waitForOperationsFinished().then((_) { + String noFile = '/no-such.file.dart'; + helper.addAnalysisSubscriptionErrors(noFile); + return helper.waitForOperationsFinished().then((_) { + var errors = helper.getErrors(noFile); + expect(errors, isEmpty); + }); + }); + }); } @@ -484,6 +497,10 @@ class AnalysisTestHelper { handleSuccessfulRequest(request); } + void addAnalysisSubscriptionErrors(String file) { + addAnalysisSubscription(AnalysisService.ERRORS, file); + } + void addAnalysisSubscriptionHighlights(String file) { addAnalysisSubscription(AnalysisService.HIGHLIGHTS, file); }