blob: 17e55dbe40d626081ab3782737f01b46f21bed4e [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library test.src.task.driver_test;
import 'dart:async';
import 'dart:collection';
import 'package:analyzer/src/cancelable_future.dart';
import 'package:analyzer/src/context/cache.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/constant.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
import 'package:analyzer/src/generated/error.dart';
import 'package:analyzer/src/generated/html.dart';
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/task/driver.dart';
import 'package:analyzer/src/task/inputs.dart';
import 'package:analyzer/src/task/manager.dart';
import 'package:analyzer/task/model.dart';
import 'package:unittest/unittest.dart';
import '../../generated/resolver_test.dart';
import '../../generated/test_support.dart';
import '../../reflective_tests.dart';
import 'test_support.dart';
main() {
groupSep = ' | ';
runReflectiveTests(AnalysisDriverTest);
runReflectiveTests(WorkOrderTest);
runReflectiveTests(WorkItemTest);
}
@reflectiveTest
class AnalysisDriverTest extends EngineTestCase {
TaskManager manager;
_TestContext context;
AnalysisDriver driver;
void setUp() {
manager = new TaskManager();
context = new _TestContext();
driver = new AnalysisDriver(manager, context);
}
test_computeResult() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TestAnalysisTask task;
TaskDescriptor descriptor = new TaskDescriptor(
'task', (context, target) => task, (target) => {}, [result]);
task = new TestAnalysisTask(context, target, descriptor: descriptor);
manager.addTaskDescriptor(descriptor);
driver.computeResult(target, result);
expect(context.getCacheEntry(target).getValue(result), 1);
}
test_create() {
expect(driver, isNotNull);
expect(driver.context, context);
expect(driver.currentWorkOrder, isNull);
expect(driver.taskManager, manager);
}
test_createNextWorkOrder_complete() {
AnalysisTarget priorityTarget = new TestSource();
AnalysisTarget normalTarget = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
manager.addGeneralResult(result);
manager.addTaskDescriptor(descriptor);
context.priorityTargets.add(priorityTarget);
context.getCacheEntry(priorityTarget).setValue(result, '');
context.explicitTargets.add(normalTarget);
context.getCacheEntry(priorityTarget).setValue(result, '');
expect(driver.createNextWorkOrder(), isNull);
}
test_createNextWorkOrder_normalTarget() {
AnalysisTarget priorityTarget = new TestSource();
AnalysisTarget normalTarget = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
manager.addGeneralResult(result);
manager.addTaskDescriptor(descriptor);
context.priorityTargets.add(priorityTarget);
context.getCacheEntry(priorityTarget).setValue(result, '');
context.explicitTargets.add(normalTarget);
context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID);
WorkOrder workOrder = driver.createNextWorkOrder();
expect(workOrder, isNotNull);
expect(workOrder.moveNext(), true);
expect(workOrder.currentItem.target, normalTarget);
}
test_createNextWorkOrder_noTargets() {
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
manager.addGeneralResult(result);
manager.addTaskDescriptor(descriptor);
expect(driver.createNextWorkOrder(), isNull);
}
test_createNextWorkOrder_priorityTarget() {
AnalysisTarget priorityTarget = new TestSource();
AnalysisTarget normalTarget = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
manager.addGeneralResult(result);
manager.addTaskDescriptor(descriptor);
context.priorityTargets.add(priorityTarget);
context.getCacheEntry(priorityTarget).setState(result, CacheState.INVALID);
context.explicitTargets.add(normalTarget);
context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID);
WorkOrder workOrder = driver.createNextWorkOrder();
expect(workOrder, isNotNull);
expect(workOrder.moveNext(), true);
expect(workOrder.currentItem.target, priorityTarget);
}
test_createWorkOrderForResult_error() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
CaughtException exception = new CaughtException(null, null);
context.getCacheEntry(target).setErrorState(
exception, <ResultDescriptor>[result]);
expect(driver.createWorkOrderForResult(target, result), isNull);
}
test_createWorkOrderForResult_inProcess() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
context.getCacheEntry(target).setState(result, CacheState.IN_PROCESS);
expect(driver.createWorkOrderForResult(target, result), isNull);
}
test_createWorkOrderForResult_invalid() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
manager.addTaskDescriptor(descriptor);
context.getCacheEntry(target).setState(result, CacheState.INVALID);
WorkOrder workOrder = driver.createWorkOrderForResult(target, result);
expect(workOrder, isNotNull);
}
test_createWorkOrderForResult_valid() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
context.getCacheEntry(target).setValue(result, '');
expect(driver.createWorkOrderForResult(target, result), isNull);
}
test_createWorkOrderForTarget_complete_generalTarget_generalResult() {
_createWorkOrderForTarget(true, false, false);
}
test_createWorkOrderForTarget_complete_generalTarget_priorityResult() {
_createWorkOrderForTarget(true, false, true);
}
test_createWorkOrderForTarget_complete_priorityTarget_generalResult() {
_createWorkOrderForTarget(true, true, false);
}
test_createWorkOrderForTarget_complete_priorityTarget_priorityResult() {
_createWorkOrderForTarget(true, true, true);
}
test_createWorkOrderForTarget_incomplete_generalTarget_generalResult() {
_createWorkOrderForTarget(false, false, false);
}
test_createWorkOrderForTarget_incomplete_generalTarget_priorityResult() {
_createWorkOrderForTarget(false, false, true);
}
test_createWorkOrderForTarget_incomplete_priorityTarget_generalResult() {
_createWorkOrderForTarget(false, true, false);
}
test_createWorkOrderForTarget_incomplete_priorityTarget_priorityResult() {
_createWorkOrderForTarget(false, true, true);
}
test_performAnalysisTask() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TestAnalysisTask task;
TaskDescriptor descriptor = new TaskDescriptor(
'task', (context, target) => task, (target) => {}, [result]);
task = new TestAnalysisTask(context, target, descriptor: descriptor);
manager.addTaskDescriptor(descriptor);
manager.addGeneralResult(result);
context.priorityTargets.add(target);
expect(driver.performAnalysisTask(), true);
expect(driver.performAnalysisTask(), true);
expect(driver.performAnalysisTask(), false);
}
test_performAnalysisTask_inputsFirst() {
AnalysisTarget target = new TestSource();
ResultDescriptor resultA = new ResultDescriptor('resultA', -1);
ResultDescriptor resultB = new ResultDescriptor('resultB', -2);
// configure tasks
TestAnalysisTask task1;
TestAnalysisTask task2;
TaskDescriptor descriptor1 = new TaskDescriptor(
'task1', (context, target) => task1, (target) => {}, [resultA]);
TaskDescriptor descriptor2 = new TaskDescriptor('task2',
(context, target) => task2, (target) => {
'inputA': new SimpleTaskInput<int>(target, resultA)
}, [resultB]);
task1 = new TestAnalysisTask(context, target,
descriptor: descriptor1, results: [resultA], value: 10);
task2 = new TestAnalysisTask(context, target,
descriptor: descriptor2, value: 20);
manager.addTaskDescriptor(descriptor1);
manager.addTaskDescriptor(descriptor2);
context.explicitTargets.add(target);
manager.addGeneralResult(resultB);
// prepare work order
expect(driver.performAnalysisTask(), true);
expect(context.getCacheEntry(target).getValue(resultA), -1);
expect(context.getCacheEntry(target).getValue(resultB), -2);
// compute resultA
expect(driver.performAnalysisTask(), true);
expect(context.getCacheEntry(target).getValue(resultA), 10);
expect(context.getCacheEntry(target).getValue(resultB), -2);
// compute resultB
expect(driver.performAnalysisTask(), true);
expect(context.getCacheEntry(target).getValue(resultA), 10);
expect(context.getCacheEntry(target).getValue(resultB), 20);
// done
expect(driver.performAnalysisTask(), false);
}
test_performWorkItem_exceptionInTask() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
CaughtException exception =
new CaughtException(new AnalysisException(), null);
TestAnalysisTask task;
TaskDescriptor descriptor = new TaskDescriptor(
'task', (context, target) => task, (target) => {}, [result]);
task = new TestAnalysisTask(context, target,
descriptor: descriptor, exception: exception);
WorkItem item = new WorkItem(context, target, descriptor);
driver.performWorkItem(item);
CacheEntry targetEntry = context.getCacheEntry(item.target);
expect(targetEntry.exception, exception);
expect(targetEntry.getState(result), CacheState.ERROR);
}
test_performWorkItem_noException() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TestAnalysisTask task;
TaskDescriptor descriptor = new TaskDescriptor(
'task', (context, target) => task, (target) => {}, [result]);
task = new TestAnalysisTask(context, target, descriptor: descriptor);
WorkItem item = new WorkItem(context, target, descriptor);
driver.performWorkItem(item);
CacheEntry targetEntry = context.getCacheEntry(item.target);
expect(targetEntry.exception, isNull);
expect(targetEntry.getState(result), CacheState.VALID);
}
test_performWorkItem_preExistingException() {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
CaughtException exception =
new CaughtException(new AnalysisException(), null);
WorkItem item = new WorkItem(context, target, descriptor);
item.exception = exception;
driver.performWorkItem(item);
CacheEntry targetEntry = context.getCacheEntry(item.target);
expect(targetEntry.exception, exception);
expect(targetEntry.getState(result), CacheState.ERROR);
}
test_reset() {
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)]);
driver.currentWorkOrder =
new WorkOrder(manager, new WorkItem(null, null, descriptor));
driver.reset();
expect(driver.currentWorkOrder, isNull);
}
/**
* [complete] is `true` if the value of the result has already been computed.
* [priorityTarget] is `true` if the target is in the list of priority
* targets.
* [priorityResult] is `true` if the result should only be computed for
* priority targets.
*/
_createWorkOrderForTarget(
bool complete, bool priorityTarget, bool priorityResult) {
AnalysisTarget target = new TestSource();
ResultDescriptor result = new ResultDescriptor('result', null);
TaskDescriptor descriptor = new TaskDescriptor('task',
(context, target) => new TestAnalysisTask(context, target),
(target) => {}, [result]);
if (priorityResult) {
manager.addPriorityResult(result);
} else {
manager.addGeneralResult(result);
}
manager.addTaskDescriptor(descriptor);
if (priorityTarget) {
context.priorityTargets.add(target);
} else {
context.explicitTargets.add(target);
}
if (complete) {
context.getCacheEntry(target).setValue(result, '');
} else {
context.getCacheEntry(target).setState(result, CacheState.INVALID);
}
WorkOrder workOrder =
driver.createWorkOrderForTarget(target, priorityTarget);
if (complete) {
expect(workOrder, isNull);
} else if (priorityResult) {
expect(workOrder, priorityTarget ? isNotNull : isNull);
} else {
expect(workOrder, isNotNull);
}
}
}
@reflectiveTest
class WorkItemTest extends EngineTestCase {
test_buildTask_complete() {
AnalysisContext context = new _TestContext();
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);
AnalysisTask task = item.buildTask();
expect(task, isNotNull);
}
test_buildTask_incomplete() {
AnalysisContext context = new _TestContext();
AnalysisTarget target = new TestSource();
ResultDescriptor inputResult = new ResultDescriptor('input', null);
List<ResultDescriptor> outputResults =
<ResultDescriptor>[new ResultDescriptor('output', null)];
TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) =>
new TestAnalysisTask(context, target, results: outputResults),
(target) => {'one': inputResult.of(target)}, outputResults);
WorkItem item = new WorkItem(context, target, descriptor);
expect(() => item.buildTask(), throwsStateError);
}
test_create() {
AnalysisContext context = new _TestContext();
AnalysisTarget target = new TestSource();
TaskDescriptor descriptor = new TaskDescriptor(
'task', null, (target) => {}, [new ResultDescriptor('result', null)]);
WorkItem item = new WorkItem(context, target, descriptor);
expect(item, isNotNull);
expect(item.context, context);
expect(item.descriptor, descriptor);
expect(item.target, target);
}
test_gatherInputs_complete() {
TaskManager manager = new TaskManager();
AnalysisContext context = new _TestContext();
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);
WorkItem result = item.gatherInputs(manager);
expect(result, isNull);
expect(item.exception, isNull);
}
test_gatherInputs_incomplete() {
TaskManager manager = new TaskManager();
AnalysisContext context = new _TestContext();
AnalysisTarget target = new TestSource();
ResultDescriptor resultA = new ResultDescriptor('resultA', null);
ResultDescriptor resultB = new ResultDescriptor('resultB', null);
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]);
manager.addTaskDescriptor(task1);
manager.addTaskDescriptor(task2);
WorkItem item = new WorkItem(context, target, task2);
expect(item.gatherInputs(manager), isNotNull);
}
test_gatherInputs_invalid() {
TaskManager manager = new TaskManager();
AnalysisContext context = new _TestContext();
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);
WorkItem result = item.gatherInputs(manager);
expect(result, isNull);
expect(item.exception, isNotNull);
}
}
@reflectiveTest
class WorkOrderTest extends EngineTestCase {
test_create() {
TaskManager manager = new TaskManager();
TaskDescriptor descriptor = new TaskDescriptor(
'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
WorkOrder order =
new WorkOrder(manager, new WorkItem(null, null, descriptor));
expect(order, isNotNull);
expect(order.currentItem, isNull);
expect(order.pendingItems, hasLength(1));
expect(order.taskManager, manager);
}
test_moveNext() {
TaskManager manager = new TaskManager();
TaskDescriptor descriptor = new TaskDescriptor(
'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
WorkItem workItem = new WorkItem(null, null, descriptor);
WorkOrder order = new WorkOrder(manager, workItem);
// "item" has no child items
expect(order.moveNext(), isTrue);
expect(order.current, workItem);
// done
expect(order.moveNext(), isFalse);
expect(order.current, isNull);
}
}
class _TestContext implements ExtendedAnalysisContext {
InternalAnalysisContext baseContext =
AnalysisContextFactory.contextWithCore();
@override
List<AnalysisTarget> explicitTargets = <AnalysisTarget>[];
Map<AnalysisTarget, CacheEntry> entryMap =
new HashMap<AnalysisTarget, CacheEntry>();
@override
List<AnalysisTarget> priorityTargets = <AnalysisTarget>[];
String name = 'Test Context';
_TestContext();
AnalysisOptions get analysisOptions => baseContext.analysisOptions;
void set analysisOptions(AnalysisOptions options) {
baseContext.analysisOptions = options;
}
@override
void set analysisPriorityOrder(List<Source> sources) {
baseContext.analysisPriorityOrder = sources;
}
@override
set contentCache(ContentCache value) {
baseContext.contentCache = value;
}
@override
DeclaredVariables get declaredVariables => baseContext.declaredVariables;
@override
List<Source> get htmlSources => baseContext.htmlSources;
@override
bool get isDisposed => baseContext.isDisposed;
@override
List<Source> get launchableClientLibrarySources =>
baseContext.launchableClientLibrarySources;
@override
List<Source> get launchableServerLibrarySources =>
baseContext.launchableServerLibrarySources;
@override
List<Source> get librarySources => baseContext.librarySources;
@override
Stream<SourcesChangedEvent> get onSourcesChanged =>
baseContext.onSourcesChanged;
@override
List<Source> get prioritySources => baseContext.prioritySources;
@override
List<Source> get refactoringUnsafeSources =>
baseContext.refactoringUnsafeSources;
@override
ResolverVisitorFactory get resolverVisitorFactory =>
baseContext.resolverVisitorFactory;
SourceFactory get sourceFactory => baseContext.sourceFactory;
void set sourceFactory(SourceFactory factory) {
baseContext.sourceFactory = factory;
}
@override
List<Source> get sources => baseContext.sources;
@override
AnalysisContextStatistics get statistics => baseContext.statistics;
@override
TypeProvider get typeProvider => baseContext.typeProvider;
@override
void set typeProvider(TypeProvider typeProvider) {
baseContext.typeProvider = typeProvider;
}
@override
TypeResolverVisitorFactory get typeResolverVisitorFactory =>
baseContext.typeResolverVisitorFactory;
@override
void addListener(AnalysisListener listener) {
baseContext.addListener(listener);
}
@override
void addSourceInfo(Source source, SourceEntry info) {
baseContext.addSourceInfo(source, info);
}
@override
void applyAnalysisDelta(AnalysisDelta delta) {
baseContext.applyAnalysisDelta(delta);
}
@override
void applyChanges(ChangeSet changeSet) {
baseContext.applyChanges(changeSet);
}
@override
String computeDocumentationComment(Element element) {
return baseContext.computeDocumentationComment(element);
}
@override
List<AnalysisError> computeErrors(Source source) {
return baseContext.computeErrors(source);
}
@override
List<Source> computeExportedLibraries(Source source) {
return baseContext.computeExportedLibraries(source);
}
@override
HtmlElement computeHtmlElement(Source source) {
return baseContext.computeHtmlElement(source);
}
@override
List<Source> computeImportedLibraries(Source source) {
return baseContext.computeImportedLibraries(source);
}
@override
SourceKind computeKindOf(Source source) {
return baseContext.computeKindOf(source);
}
@override
LibraryElement computeLibraryElement(Source source) {
return baseContext.computeLibraryElement(source);
}
@override
LineInfo computeLineInfo(Source source) {
return baseContext.computeLineInfo(source);
}
@override
CompilationUnit computeResolvableCompilationUnit(Source source) {
return baseContext.computeResolvableCompilationUnit(source);
}
@override
CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync(
Source source, Source librarySource) {
return baseContext.computeResolvedCompilationUnitAsync(
source, librarySource);
}
@override
void dispose() {
baseContext.dispose();
}
@override
List<CompilationUnit> ensureResolvedDartUnits(Source source) {
return baseContext.ensureResolvedDartUnits(source);
}
@override
bool exists(Source source) {
return baseContext.exists(source);
}
@override
CacheEntry getCacheEntry(AnalysisTarget target) {
return entryMap.putIfAbsent(target, () => new CacheEntry());
}
@override
CompilationUnitElement getCompilationUnitElement(
Source unitSource, Source librarySource) {
return baseContext.getCompilationUnitElement(unitSource, librarySource);
}
@override
TimestampedData<String> getContents(Source source) {
return baseContext.getContents(source);
}
@override
InternalAnalysisContext getContextFor(Source source) {
return baseContext.getContextFor(source);
}
@override
Element getElement(ElementLocation location) {
return baseContext.getElement(location);
}
@override
AnalysisErrorInfo getErrors(Source source) {
return baseContext.getErrors(source);
}
@override
HtmlElement getHtmlElement(Source source) {
return baseContext.getHtmlElement(source);
}
@override
List<Source> getHtmlFilesReferencing(Source source) {
return baseContext.getHtmlFilesReferencing(source);
}
@override
SourceKind getKindOf(Source source) {
return baseContext.getKindOf(source);
}
@override
List<Source> getLibrariesContaining(Source source) {
return baseContext.getLibrariesContaining(source);
}
@override
List<Source> getLibrariesDependingOn(Source librarySource) {
return baseContext.getLibrariesDependingOn(librarySource);
}
@override
List<Source> getLibrariesReferencedFromHtml(Source htmlSource) {
return baseContext.getLibrariesReferencedFromHtml(htmlSource);
}
@override
LibraryElement getLibraryElement(Source source) {
return baseContext.getLibraryElement(source);
}
@override
LineInfo getLineInfo(Source source) {
return baseContext.getLineInfo(source);
}
@override
int getModificationStamp(Source source) {
return baseContext.getModificationStamp(source);
}
@override
Namespace getPublicNamespace(LibraryElement library) {
return baseContext.getPublicNamespace(library);
}
@override
CompilationUnit getResolvedCompilationUnit(
Source unitSource, LibraryElement library) {
return baseContext.getResolvedCompilationUnit(unitSource, library);
}
@override
CompilationUnit getResolvedCompilationUnit2(
Source unitSource, Source librarySource) {
return baseContext.getResolvedCompilationUnit2(unitSource, librarySource);
}
@override
HtmlUnit getResolvedHtmlUnit(Source htmlSource) {
return baseContext.getResolvedHtmlUnit(htmlSource);
}
@override
List<Source> getSourcesWithFullName(String path) {
return baseContext.getSourcesWithFullName(path);
}
@override
bool handleContentsChanged(
Source source, String originalContents, String newContents, bool notify) {
return baseContext.handleContentsChanged(
source, originalContents, newContents, notify);
}
@override
bool isClientLibrary(Source librarySource) {
return baseContext.isClientLibrary(librarySource);
}
@override
bool isServerLibrary(Source librarySource) {
return baseContext.isServerLibrary(librarySource);
}
@override
CompilationUnit parseCompilationUnit(Source source) {
return baseContext.parseCompilationUnit(source);
}
@override
HtmlUnit parseHtmlUnit(Source source) {
return baseContext.parseHtmlUnit(source);
}
@override
AnalysisResult performAnalysisTask() {
return baseContext.performAnalysisTask();
}
@override
void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
baseContext.recordLibraryElements(elementMap);
}
@override
void removeListener(AnalysisListener listener) {
baseContext.removeListener(listener);
}
@override
CompilationUnit resolveCompilationUnit(
Source unitSource, LibraryElement library) {
return baseContext.resolveCompilationUnit(unitSource, library);
}
@override
CompilationUnit resolveCompilationUnit2(
Source unitSource, Source librarySource) {
return baseContext.resolveCompilationUnit2(unitSource, librarySource);
}
@override
HtmlUnit resolveHtmlUnit(Source htmlSource) {
return baseContext.resolveHtmlUnit(htmlSource);
}
@override
void setChangedContents(Source source, String contents, int offset,
int oldLength, int newLength) {
baseContext.setChangedContents(
source, contents, offset, oldLength, newLength);
}
@override
void setContents(Source source, String contents) {
baseContext.setContents(source, contents);
}
@override
void visitCacheItems(void callback(Source source, SourceEntry dartEntry,
DataDescriptor rowDesc, CacheState state)) {
baseContext.visitCacheItems(callback);
}
}