Index: pkg/analyzer/test/src/task/strong/strong_test_helper.dart |
diff --git a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart |
index 8361c123e80264d4d20ac68a0d1d9ad942e1b493..dddce076a27577ce1f2abebc618266b6198165fe 100644 |
--- a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart |
+++ b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart |
@@ -17,7 +17,9 @@ import 'package:analyzer/error/listener.dart'; |
import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/file_system/memory_file_system.dart'; |
import 'package:analyzer/source/error_processor.dart'; |
+import 'package:analyzer/src/dart/analysis/byte_store.dart'; |
import 'package:analyzer/src/dart/analysis/driver.dart'; |
+import 'package:analyzer/src/dart/analysis/file_state.dart'; |
import 'package:analyzer/src/dart/ast/token.dart'; |
import 'package:analyzer/src/error/codes.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
@@ -226,6 +228,9 @@ class AbstractStrongTest { |
MemoryResourceProvider _resourceProvider = new MemoryResourceProvider(); |
bool _checkCalled = false; |
+ AnalysisContext _context = null; |
+ AnalysisDriver _driver = null; |
+ |
bool get enableNewAnalysisDriver => false; |
/// Adds a file to check. The file should contain: |
@@ -287,18 +292,31 @@ class AbstractStrongTest { |
} |
CompilationUnit mainUnit; |
- AnalysisContext context = null; |
- AnalysisDriver driver = null; |
if (enableNewAnalysisDriver) { |
- // TODO(scheglov) |
+ StringBuffer logBuffer = new StringBuffer(); |
+ FileContentOverlay fileContentOverlay = new FileContentOverlay(); |
+ PerformanceLog log = new PerformanceLog(logBuffer); |
+ AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(log); |
+ _driver = new AnalysisDriver( |
+ scheduler, |
+ log, |
+ _resourceProvider, |
+ new MemoryByteStore(), |
+ fileContentOverlay, |
+ 'test', |
+ sourceFactory, |
+ analysisOptions); |
+ scheduler.start(); |
+ |
+ mainUnit = (await _driver.getResult(mainFile.path)).unit; |
} else { |
- context = AnalysisEngine.instance.createAnalysisContext(); |
- context.analysisOptions = analysisOptions; |
- context.sourceFactory = sourceFactory; |
+ _context = AnalysisEngine.instance.createAnalysisContext(); |
+ _context.analysisOptions = analysisOptions; |
+ _context.sourceFactory = sourceFactory; |
// Run the checker on /main.dart. |
Source mainSource = sourceFactory.forUri2(mainFile.toUri()); |
- mainUnit = context.resolveCompilationUnit2(mainSource, mainSource); |
+ mainUnit = _context.resolveCompilationUnit2(mainSource, mainSource); |
} |
var collector = new _ErrorCollector(analysisOptions); |
@@ -318,7 +336,7 @@ class AbstractStrongTest { |
continue; |
} |
- var analysisResult = await _resolve(context, driver, source); |
+ var analysisResult = await _resolve(source); |
errors.addAll(analysisResult.errors.where((e) => |
// TODO(jmesserly): these are usually intentional dynamic calls. |
@@ -351,18 +369,19 @@ class AbstractStrongTest { |
void tearDown() { |
// This is a sanity check, in case only addFile is called. |
expect(_checkCalled, true, reason: 'must call check() method in test case'); |
+ _context?.dispose(); |
+ _driver?.dispose(); |
AnalysisEngine.instance.clearCaches(); |
} |
- Future<_TestAnalysisResult> _resolve( |
- AnalysisContext context, AnalysisDriver driver, Source source) async { |
+ Future<_TestAnalysisResult> _resolve(Source source) async { |
if (enableNewAnalysisDriver) { |
- // TODO(scheglov) implement |
- throw new UnimplementedError(); |
+ var result = await _driver.getResult(source.fullName); |
+ return new _TestAnalysisResult(source, result.unit, result.errors); |
} else { |
- List<Source> libraries = context.getLibrariesContaining(source); |
- var unit = context.resolveCompilationUnit2(source, libraries.single); |
- var errors = context.computeErrors(source); |
+ List<Source> libraries = _context.getLibrariesContaining(source); |
+ var unit = _context.resolveCompilationUnit2(source, libraries.single); |
+ var errors = _context.computeErrors(source); |
return new _TestAnalysisResult(source, unit, errors); |
} |
} |