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

Unified Diff: pkg/front_end/lib/src/incremental_resolved_ast_generator_impl.dart

Issue 2892203003: Remove IncrementalResolvedAstGenerator. (Closed)
Patch Set: Created 3 years, 7 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/front_end/lib/src/incremental_resolved_ast_generator_impl.dart
diff --git a/pkg/front_end/lib/src/incremental_resolved_ast_generator_impl.dart b/pkg/front_end/lib/src/incremental_resolved_ast_generator_impl.dart
deleted file mode 100644
index 095c30871289a2e61b23a92e32ae31430e2981c6..0000000000000000000000000000000000000000
--- a/pkg/front_end/lib/src/incremental_resolved_ast_generator_impl.dart
+++ /dev/null
@@ -1,303 +0,0 @@
-// Copyright (c) 2017, 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.
-
-import 'dart:async';
-
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/context/context.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart' as driver;
-import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary/idl.dart';
-import 'package:analyzer/src/util/absolute_path.dart';
-import 'package:front_end/incremental_resolved_ast_generator.dart';
-import 'package:front_end/src/base/file_repository.dart';
-import 'package:front_end/src/base/performace_logger.dart';
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:front_end/src/base/resolve_relative_uri.dart';
-import 'package:front_end/src/base/source.dart';
-import 'package:front_end/src/dependency_grapher_impl.dart';
-import 'package:front_end/src/incremental/byte_store.dart';
-import 'package:path/src/context.dart';
-
-dynamic unimplemented() {
- // TODO(paulberry): get rid of this.
- throw new UnimplementedError();
-}
-
-/// Implementation of [IncrementalKernelGenerator].
-///
-/// Theory of operation: this class is a thin wrapper around
-/// [driver.AnalysisDriver]. When the client requests a new delta, we forward
-/// the request to the analysis driver. When the client calls an invalidate
-/// method, we ensure that the proper files will be re-read next time a delta is
-/// requested.
-///
-/// Note that the analysis driver expects to be able to read file contents
-/// synchronously based on filesystem path rather than asynchronously based on
-/// URI, so the file contents are first read into memory using the asynchronous
-/// FileSystem API, and then these are fed into the analysis driver using a
-/// proxy implementation of [ResourceProvider]. TODO(paulberry): make this (and
-/// other proxies in this file) unnecessary.
-class IncrementalResolvedAstGeneratorImpl
- implements IncrementalResolvedAstGenerator {
- driver.AnalysisDriverScheduler _scheduler;
- final _fileRepository = new FileRepository();
- _ResourceProviderProxy _resourceProvider;
- driver.AnalysisDriver _driver;
- bool _isInitialized = false;
- final ProcessedOptions _options;
- final Uri _source;
- bool _schedulerStarted = false;
- final _fileState = <Uri, String>{};
-
- IncrementalResolvedAstGeneratorImpl(this._source, this._options);
-
- @override
- Future<DeltaLibraries> computeDelta() async {
- if (!_isInitialized) {
- await init();
- }
- // The analysis driver doesn't currently support an asynchronous file API,
- // so we have to find all the files first to read their contents.
- // TODO(paulberry): this is an unnecessary source of duplicate work and
- // should be eliminated ASAP.
- var graph =
- await graphForProgram([_source], _options, fileReader: _fileReader);
- // TODO(paulberry): collect no-longer-referenced files from _fileState and
- // _fileRepository.
- var libraries = <Uri, Map<Uri, CompilationUnit>>{};
- if (!_schedulerStarted) {
- _scheduler.start();
- _schedulerStarted = true;
- }
- for (var libraryCycle in graph.topologicallySortedCycles) {
- for (var libraryUri in libraryCycle.libraries.keys) {
- var libraryNode = libraryCycle.libraries[libraryUri];
- for (var partUri in libraryNode.parts) {
- // TODO(paulberry): resolve the part URI.
- _fileReader(partUri, partUri);
- }
- }
- for (var libraryUri in libraryCycle.libraries.keys) {
- var libraryNode = libraryCycle.libraries[libraryUri];
- var result =
- await _driver.getResult(_fileRepository.pathForUri(libraryUri));
- // TODO(paulberry): handle errors.
- var units = {libraryUri: result.unit};
- for (var partUri in libraryNode.parts) {
- // Really we ought to have a driver API that lets us request a
- // specific part of a given library. Otherwise we will run into
- // problems if a part is included in multiple libraries.
- // TODO(paulberry): address this.
- var partResult =
- await _driver.getResult(_fileRepository.pathForUri(partUri));
- // TODO(paulberry): handle errors.
- units[partUri] = partResult.unit;
- }
- libraries[libraryUri] = units;
- }
- }
- _driver.addFile(_fileRepository.pathForUri(_source));
- // TODO(paulberry): stop the scheduler
- return new DeltaLibraries(libraries);
- }
-
- Future<Null> init() async {
- // TODO(paulberry): can we just use null?
- var performanceLog = new PerformanceLog(new _NullStringSink());
- _scheduler = new driver.AnalysisDriverScheduler(performanceLog);
- _resourceProvider = new _ResourceProviderProxy(_fileRepository);
- // TODO(paulberry): MemoryByteStore leaks memory (it never discards data).
- // Do something better here.
- var byteStore = new MemoryByteStore();
- // TODO(paulberry): can we just use null?
- var fileContentOverlay = new FileContentOverlay();
- var sdkContext = new AnalysisContextImpl();
- var sdkBundle = await _options.getSdkSummary();
- var dartSdk = new _DartSdkProxy(sdkBundle, sdkContext, _fileRepository);
- sdkContext.sourceFactory =
- new SourceFactory([new DartUriResolver(dartSdk)]);
-
- var sourceFactory = new _SourceFactoryProxy(dartSdk, _fileRepository);
- var analysisOptions = new AnalysisOptionsImpl();
- _driver = new driver.AnalysisDriver(
- _scheduler,
- performanceLog,
- _resourceProvider,
- byteStore,
- fileContentOverlay,
- null,
- sourceFactory,
- analysisOptions,
- sdkBundle: sdkBundle);
- _isInitialized = true;
- }
-
- @override
- void invalidate(String path) {
- throw new UnimplementedError();
- }
-
- @override
- void invalidateAll() {
- _fileState.clear();
- _fileRepository.clearContents();
- // TODO(paulberry): verify that this has an effect (requires a multi-file
- // test).
- if (_isInitialized) {
- _driver.knownFiles.forEach(_driver.changeFile);
- }
- }
-
- Future<String> _fileReader(Uri originalUri, Uri resolvedUri) async {
- String contents = _fileState[resolvedUri] ??=
- await _options.fileSystem.entityForUri(resolvedUri).readAsString();
- _fileRepository.store(originalUri, contents);
- return contents;
- }
-}
-
-class _DartSdkProxy implements DartSdk {
- final PackageBundle summary;
-
- final AnalysisContext context;
-
- final FileRepository _fileRepository;
-
- _DartSdkProxy(this.summary, this.context, this._fileRepository);
-
- @override
- PackageBundle getLinkedBundle() => summary;
-
- @override
- Source mapDartUri(String uriString) {
- var uri = Uri.parse(uriString);
- return new _SourceProxy(
- uri, _fileRepository.pathForUri(uri, allocate: true));
- }
-
- noSuchMethod(Invocation invocation) => unimplemented();
-}
-
-class _FileProxy implements File {
- final _SourceProxy _source;
-
- final _ResourceProviderProxy _resourceProvider;
-
- _FileProxy(this._source, this._resourceProvider);
-
- @override
- String get path => _source.fullName;
-
- @override
- String get shortName => path;
-
- @override
- Source createSource([Uri uri]) {
- assert(uri == null);
- return _source;
- }
-
- noSuchMethod(Invocation invocation) => unimplemented();
-
- @override
- String readAsStringSync() {
- return _resourceProvider._fileRepository.contentsForPath(path);
- }
-}
-
-/// A string sink that ignores everything written to it.
-class _NullStringSink implements StringSink {
- void write(Object obj) {}
- void writeAll(Iterable objects, [String separator = ""]) {}
- void writeCharCode(int charCode) {}
- void writeln([Object obj = ""]) {}
-}
-
-class _ResourceProviderProxy implements ResourceProvider {
- final FileRepository _fileRepository;
-
- _ResourceProviderProxy(this._fileRepository);
-
- @override
- AbsolutePathContext get absolutePathContext => throw new UnimplementedError();
-
- @override
- Context get pathContext => throw new UnimplementedError();
-
- @override
- File getFile(String path) {
- return new _FileProxy(
- new _SourceProxy(_fileRepository.uriForPath(path), path), this);
- }
-
- @override
- Folder getFolder(String path) => throw new UnimplementedError();
-
- @override
- Future<List<int>> getModificationTimes(List<Source> sources) =>
- throw new UnimplementedError();
-
- @override
- Resource getResource(String path) => throw new UnimplementedError();
-
- @override
- Folder getStateLocation(String pluginId) => throw new UnimplementedError();
-}
-
-class _SourceFactoryProxy implements SourceFactory {
- @override
- final DartSdk dartSdk;
-
- final FileRepository _fileRepository;
-
- @override
- AnalysisContext context;
-
- _SourceFactoryProxy(this.dartSdk, this._fileRepository);
-
- @override
- SourceFactory clone() => new _SourceFactoryProxy(dartSdk, _fileRepository);
-
- @override
- Source forUri(String absoluteUri) {
- Uri uri = Uri.parse(absoluteUri);
- return forUri2(uri);
- }
-
- @override
- Source forUri2(Uri absoluteUri) {
- return new _SourceProxy(
- absoluteUri, _fileRepository.pathForUri(absoluteUri, allocate: true));
- }
-
- noSuchMethod(Invocation invocation) => unimplemented();
-
- Source resolveUri(Source containingSource, String containedUri) {
- // TODO(paulberry): re-use code from dependency_grapher_impl, and support
- // SDK URI resolution logic.
- String absoluteUri =
- resolveRelativeUri(containingSource?.uri, Uri.parse(containedUri))
- .toString();
- return forUri(absoluteUri);
- }
-
- @override
- Uri restoreUri(Source source) => source.uri;
-}
-
-class _SourceProxy extends BasicSource {
- @override
- final String fullName;
-
- _SourceProxy(Uri uri, this.fullName) : super(uri);
-
- int get modificationStamp => 0;
-
- noSuchMethod(Invocation invocation) => unimplemented();
-}

Powered by Google App Engine
This is Rietveld 408576698