From 1037608fed3ed2b8acbb021ef5c8a5d60bc10bc8 Mon Sep 17 00:00:00 2001 From: "scheglov@google.com" Date: Tue, 15 Jul 2014 15:50:49 +0000 Subject: [PATCH] Fix for NPE if subscribing for errors in a not analyzed file. R=brianwilkerson@google.com BUG= Review URL: https://codereview.chromium.org//398513002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38238 260f80e4-7a28-3924-810f-c04153c831b5 --- .../lib/src/analysis_server.dart | 10 ++++++++-- .../test/domain_analysis_test.dart | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) 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); }