AnalysisDriver.createWorkOrderForResult() should check AnalysisContext.aboutToComputeResult() first.
So, if there is a result provider, it will be asked for root results, such as DART_ERRORS or LIBRARY_ELEMENT too. R=brianwilkerson@google.com BUG= Review URL: https://codereview.chromium.org/1806563003 .
This commit is contained in:
@@ -165,6 +165,9 @@ class AnalysisDriver {
|
||||
state == CacheState.IN_PROCESS) {
|
||||
return null;
|
||||
}
|
||||
if (context.aboutToComputeResult(entry, result)) {
|
||||
return null;
|
||||
}
|
||||
TaskDescriptor taskDescriptor = taskManager.findTask(target, result);
|
||||
if (taskDescriptor == null) {
|
||||
return null;
|
||||
|
||||
@@ -124,6 +124,32 @@ class AnalysisDriverTest extends AbstractDriverTest {
|
||||
expect(analysisDriver.createNextWorkOrder(), isNull);
|
||||
}
|
||||
|
||||
test_createWorkOrderForResult_aboutToComputeResult() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor result = new ResultDescriptor('result', null);
|
||||
TaskDescriptor descriptor = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {},
|
||||
[result]);
|
||||
taskManager.addTaskDescriptor(descriptor);
|
||||
context.getCacheEntry(target).setState(result, CacheState.INVALID);
|
||||
// has result
|
||||
{
|
||||
when(context.aboutToComputeResult(anyObject, result)).thenReturn(true);
|
||||
WorkOrder workOrder =
|
||||
analysisDriver.createWorkOrderForResult(target, result);
|
||||
expect(workOrder, isNull);
|
||||
}
|
||||
// no result
|
||||
{
|
||||
when(context.aboutToComputeResult(anyObject, result)).thenReturn(false);
|
||||
WorkOrder workOrder =
|
||||
analysisDriver.createWorkOrderForResult(target, result);
|
||||
expect(workOrder, isNotNull);
|
||||
}
|
||||
}
|
||||
|
||||
test_createWorkOrderForResult_error() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor result = new ResultDescriptor('result', null);
|
||||
@@ -649,57 +675,6 @@ class WorkItemTest extends AbstractDriverTest {
|
||||
expect(item.target, target);
|
||||
}
|
||||
|
||||
test_gatherInputs_complete() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
TaskDescriptor descriptor = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {},
|
||||
[new ResultDescriptor('output', null)]);
|
||||
WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
|
||||
WorkItem result = item.gatherInputs(taskManager, []);
|
||||
expect(result, isNull);
|
||||
expect(item.exception, isNull);
|
||||
}
|
||||
|
||||
test_gatherInputs_incomplete() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor resultA = new ResultDescriptor('resultA', null);
|
||||
ResultDescriptor resultB = new ResultDescriptor('resultB', null);
|
||||
// prepare tasks
|
||||
TaskDescriptor task1 = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) =>
|
||||
new TestAnalysisTask(context, target, results: [resultA]),
|
||||
(target) => {},
|
||||
[resultA]);
|
||||
TaskDescriptor task2 = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {'one': resultA.of(target)},
|
||||
[resultB]);
|
||||
taskManager.addTaskDescriptor(task1);
|
||||
taskManager.addTaskDescriptor(task2);
|
||||
// gather inputs
|
||||
WorkItem item = new WorkItem(context, target, task2, null, 0, null);
|
||||
WorkItem inputItem = item.gatherInputs(taskManager, []);
|
||||
expect(inputItem, isNotNull);
|
||||
}
|
||||
|
||||
test_gatherInputs_invalid() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor inputResult = new ResultDescriptor('input', null);
|
||||
TaskDescriptor descriptor = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {'one': inputResult.of(target)},
|
||||
[new ResultDescriptor('output', null)]);
|
||||
WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
|
||||
WorkItem result = item.gatherInputs(taskManager, []);
|
||||
expect(result, isNull);
|
||||
expect(item.exception, isNotNull);
|
||||
}
|
||||
|
||||
test_gatherInputs_aboutToComputeResult_hasResult() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor resultA = new ResultDescriptor('resultA', null);
|
||||
@@ -754,6 +729,57 @@ class WorkItemTest extends AbstractDriverTest {
|
||||
expect(inputItem.target, target);
|
||||
expect(inputItem.descriptor, task1);
|
||||
}
|
||||
|
||||
test_gatherInputs_complete() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
TaskDescriptor descriptor = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {},
|
||||
[new ResultDescriptor('output', null)]);
|
||||
WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
|
||||
WorkItem result = item.gatherInputs(taskManager, []);
|
||||
expect(result, isNull);
|
||||
expect(item.exception, isNull);
|
||||
}
|
||||
|
||||
test_gatherInputs_incomplete() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor resultA = new ResultDescriptor('resultA', null);
|
||||
ResultDescriptor resultB = new ResultDescriptor('resultB', null);
|
||||
// prepare tasks
|
||||
TaskDescriptor task1 = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) =>
|
||||
new TestAnalysisTask(context, target, results: [resultA]),
|
||||
(target) => {},
|
||||
[resultA]);
|
||||
TaskDescriptor task2 = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {'one': resultA.of(target)},
|
||||
[resultB]);
|
||||
taskManager.addTaskDescriptor(task1);
|
||||
taskManager.addTaskDescriptor(task2);
|
||||
// gather inputs
|
||||
WorkItem item = new WorkItem(context, target, task2, null, 0, null);
|
||||
WorkItem inputItem = item.gatherInputs(taskManager, []);
|
||||
expect(inputItem, isNotNull);
|
||||
}
|
||||
|
||||
test_gatherInputs_invalid() {
|
||||
AnalysisTarget target = new TestSource();
|
||||
ResultDescriptor inputResult = new ResultDescriptor('input', null);
|
||||
TaskDescriptor descriptor = new TaskDescriptor(
|
||||
'task',
|
||||
(context, target) => new TestAnalysisTask(context, target),
|
||||
(target) => {'one': inputResult.of(target)},
|
||||
[new ResultDescriptor('output', null)]);
|
||||
WorkItem item = new WorkItem(context, target, descriptor, null, 0, null);
|
||||
WorkItem result = item.gatherInputs(taskManager, []);
|
||||
expect(result, isNull);
|
||||
expect(item.exception, isNotNull);
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
|
||||
Reference in New Issue
Block a user