Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(186)

Unified Diff: pkg/analyzer/tool/task_dependency_graph/generate.dart

Issue 3002293003: Convert GeneratedContent to async and use AnalysisDriver for tasks graph. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/tool/task_dependency_graph/generate.dart
diff --git a/pkg/analyzer/tool/task_dependency_graph/generate.dart b/pkg/analyzer/tool/task_dependency_graph/generate.dart
index c14692d2cbae1c3c28c95218120fed4cd59cd326..c109d99f2508a5e68f363ac4c6eb38fb7b958a21 100644
--- a/pkg/analyzer/tool/task_dependency_graph/generate.dart
+++ b/pkg/analyzer/tool/task_dependency_graph/generate.dart
@@ -17,6 +17,7 @@
*/
library analyzer.tool.task_dependency_graph.generate;
+import 'dart:async';
import 'dart:io' hide File;
import 'dart:io' as io;
@@ -27,12 +28,17 @@ import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/source/package_map_resolver.dart';
import 'package:analyzer/src/context/builder.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/generated/constant.dart';
import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/source_io.dart';
+import 'package:front_end/src/base/performace_logger.dart';
+import 'package:front_end/src/byte_store/byte_store.dart';
import 'package:front_end/src/codegen/tools.dart';
import 'package:path/path.dart' as path;
import 'package:path/path.dart';
@@ -40,10 +46,11 @@ import 'package:path/path.dart';
/**
* Generate the target .dot file.
*/
-main() {
+main() async {
String script = Platform.script.toFilePath(windows: Platform.isWindows);
String pkgPath = normalize(join(dirname(script), '..', '..'));
- GeneratedContent.generateAll(pkgPath, <GeneratedContent>[target, htmlTarget]);
+ await GeneratedContent
+ .generateAll(pkgPath, <GeneratedContent>[target, htmlTarget]);
}
final GeneratedFile htmlTarget = new GeneratedFile(
@@ -58,7 +65,7 @@ typedef void GetterFinderCallback(PropertyAccessorElement element);
class Driver {
static bool hasInitializedPlugins = false;
PhysicalResourceProvider resourceProvider;
- AnalysisContext context;
+ AnalysisDriver driver;
InterfaceType resultDescriptorType;
InterfaceType listOfResultDescriptorType;
ClassElement enginePluginClass;
@@ -126,7 +133,8 @@ class Driver {
/**
* Generate the task dependency graph and return it as a [String].
*/
- String generateFileContents() {
+ Future<String> generateFileContents() async {
+ String data = await generateGraphData();
return '''
// 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
@@ -139,12 +147,12 @@ class Driver {
// To render this graph using Graphviz (www.graphviz.org) use the command:
// "dot tasks.dot -Tpdf -O".
digraph G {
-${generateGraphData()}
+$data
}
''';
}
- String generateGraphData() {
+ Future<String> generateGraphData() async {
if (!hasInitializedPlugins) {
AnalysisEngine.instance.processRequiredPlugins();
hasInitializedPlugins = true;
@@ -153,7 +161,7 @@ ${generateGraphData()}
resourceProvider = PhysicalResourceProvider.INSTANCE;
DartSdk sdk = new FolderBasedDartSdk(resourceProvider,
FolderBasedDartSdk.defaultSdkDirectory(resourceProvider));
- context = AnalysisEngine.instance.createAnalysisContext();
+
ContextBuilderOptions builderOptions = new ContextBuilderOptions();
if (Platform.packageRoot != null) {
builderOptions.defaultPackagesDirectoryPath =
@@ -165,36 +173,52 @@ ${generateGraphData()}
// Let the context builder use the default algorithm for package
// resolution.
}
+
ContextBuilder builder = new ContextBuilder(resourceProvider, null, null,
options: builderOptions);
List<UriResolver> uriResolvers = [
new DartUriResolver(sdk),
new PackageMapUriResolver(resourceProvider,
builder.convertPackagesToMap(builder.createPackageMap(''))),
- new ResourceUriResolver(PhysicalResourceProvider.INSTANCE)
+ new ResourceUriResolver(resourceProvider)
];
- context.sourceFactory = new SourceFactory(uriResolvers);
- Source dartDartSource =
- setupSource(path.join('lib', 'src', 'task', 'dart.dart'));
- Source taskSource = setupSource(path.join('lib', 'plugin', 'task.dart'));
- Source modelSource = setupSource(path.join('lib', 'task', 'model.dart'));
- Source enginePluginSource =
- setupSource(path.join('lib', 'src', 'plugin', 'engine_plugin.dart'));
- CompilationUnitElement modelElement = getUnit(modelSource).element;
+
+ var logger = new PerformanceLog(null);
+ var scheduler = new AnalysisDriverScheduler(logger);
+ driver = new AnalysisDriver(
+ scheduler,
+ logger,
+ resourceProvider,
+ new MemoryByteStore(),
+ new FileContentOverlay(),
+ null,
+ new SourceFactory(uriResolvers),
+ new AnalysisOptionsImpl());
+ scheduler.start();
+
+ TypeProvider typeProvider = await driver.currentSession.typeProvider;
+
+ String dartDartPath = path.join(rootDir, 'lib', 'src', 'task', 'dart.dart');
+ String taskPath = path.join(rootDir, 'lib', 'plugin', 'task.dart');
+ String modelPath = path.join(rootDir, 'lib', 'task', 'model.dart');
+ String enginePluginPath =
+ path.join(rootDir, 'lib', 'src', 'plugin', 'engine_plugin.dart');
+
+ CompilationUnitElement modelElement = await getUnitElement(modelPath);
InterfaceType analysisTaskType = modelElement.getType('AnalysisTask').type;
- DartType dynamicType = context.typeProvider.dynamicType;
+ DartType dynamicType = typeProvider.dynamicType;
resultDescriptorType = modelElement
.getType('ResultDescriptor')
.type
.instantiate([dynamicType]);
listOfResultDescriptorType =
- context.typeProvider.listType.instantiate([resultDescriptorType]);
- CompilationUnit enginePluginUnit = getUnit(enginePluginSource);
+ typeProvider.listType.instantiate([resultDescriptorType]);
+ CompilationUnit enginePluginUnit = await getUnit(enginePluginPath);
enginePluginClass = enginePluginUnit.element.getType('EnginePlugin');
extensionPointIdType =
enginePluginUnit.element.getType('ExtensionPointId').type;
- CompilationUnit dartDartUnit = getUnit(dartDartSource);
- CompilationUnit taskUnit = getUnit(taskSource);
+ CompilationUnit dartDartUnit = await getUnit(dartDartPath);
+ CompilationUnit taskUnit = await getUnit(taskPath);
taskUnitElement = taskUnit.element;
Set<String> results = new Set<String>();
Set<String> resultLists = new Set<String>();
@@ -251,7 +275,8 @@ ${generateGraphData()}
return lines.join('\n');
}
- String generateHtml() {
+ Future<String> generateHtml() async {
+ var data = await generateGraphData();
return '''
<!DOCTYPE html>
<html>
@@ -269,7 +294,7 @@ digraph G {
tooltip="Analysis Task Dependency Graph";
node [fontname=Helvetica];
edge [fontname=Helvetica, fontcolor=gray];
-${generateGraphData()}
+$data
}
</script>
</body>
@@ -277,21 +302,14 @@ ${generateGraphData()}
''';
}
- CompilationUnit getUnit(Source source) =>
- context.resolveCompilationUnit2(source, source);
+ Future<CompilationUnit> getUnit(String path) async {
+ var result = await driver.getResult(path);
+ return result.unit;
+ }
- Source setupSource(String filename) {
- String filePath = path.join(rootDir, filename);
- File file = resourceProvider.getResource(filePath);
- Source source = file.createSource();
- Uri restoredUri = context.sourceFactory.restoreUri(source);
- if (restoredUri != null) {
- source = file.createSource(restoredUri);
- }
- ChangeSet changeSet = new ChangeSet();
- changeSet.addedSource(source);
- context.applyChanges(changeSet);
- return source;
+ Future<CompilationUnitElement> getUnitElement(String path) async {
+ UnitElementResult result = await driver.getUnitElement(path);
+ return result.element;
}
/**
« no previous file with comments | « pkg/analyzer/tool/task_dependency_graph/check_test.dart ('k') | pkg/analyzer_plugin/tool/spec/check_all_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698