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

Unified Diff: pkg/analyzer/lib/src/dart/analysis/driver.dart

Issue 2954153002: Add AnalysisSession to analyzer (Closed)
Patch Set: Created 3 years, 6 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/lib/src/dart/analysis/driver.dart
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 1df60ec490108660716460dff69268fc17ae3188..5d9914cf6e83a36d62b97d14992c6cda410fde14 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -9,6 +9,7 @@ import 'dart:typed_data';
import 'package:analyzer/context/context_root.dart';
import 'package:analyzer/context/declared_variables.dart';
import 'package:analyzer/dart/analysis/results.dart' as results;
+import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart'
show CompilationUnitElement, LibraryElement;
@@ -22,6 +23,7 @@ import 'package:analyzer/src/dart/analysis/index.dart';
import 'package:analyzer/src/dart/analysis/library_analyzer.dart';
import 'package:analyzer/src/dart/analysis/library_context.dart';
import 'package:analyzer/src/dart/analysis/search.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/analysis/status.dart';
import 'package:analyzer/src/dart/analysis/top_level_declaration.dart';
import 'package:analyzer/src/generated/engine.dart'
@@ -280,6 +282,14 @@ class AnalysisDriver implements AnalysisDriverGeneric {
final Map<String, AnalysisResult> _allCachedResults = {};
/**
+ * The current analysis session.
+ *
+ * TODO(brianwilkerson) Create a new session when the current session might
+ * produce inconsistent results.
+ */
+ AnalysisSession _currentSession;
+
+ /**
* Create a new instance of [AnalysisDriver].
*
* The given [SourceFactory] is cloned to ensure that it does not contain a
@@ -301,6 +311,7 @@ class AnalysisDriver implements AnalysisDriverGeneric {
_sourceFactory = sourceFactory.clone(),
_sdkBundle = sdkBundle,
_externalSummaries = externalSummaries {
+ _currentSession = new DriverBasedAnalysisSession(this);
_onResults = _resultController.stream.asBroadcastStream();
_testView = new AnalysisDriverTestView(this);
_createFileTracker();
@@ -319,6 +330,11 @@ class AnalysisDriver implements AnalysisDriverGeneric {
AnalysisOptions get analysisOptions => _analysisOptions;
/**
+ * Return the current analysis session.
+ */
+ AnalysisSession get currentSession => _currentSession;
+
+ /**
* Return the stream that produces [ExceptionResult]s.
*/
Stream<ExceptionResult> get exceptions => _exceptionController.stream;
@@ -538,8 +554,8 @@ class AnalysisDriver implements AnalysisDriverGeneric {
return null;
}
- return new ErrorsResult(path, analysisResult.uri, analysisResult.lineInfo,
- analysisResult.errors);
+ return new ErrorsResult(currentSession, path, analysisResult.uri,
+ analysisResult.lineInfo, analysisResult.errors);
}
/**
@@ -733,8 +749,8 @@ class AnalysisDriver implements AnalysisDriverGeneric {
FileState file = _fileTracker.verifyApiSignature(path);
RecordingErrorListener listener = new RecordingErrorListener();
CompilationUnit unit = file.parse(listener);
- return new ParseResult(file.path, file.uri, file.content, unit.lineInfo,
- unit, listener.errors);
+ return new ParseResult(currentSession, file.path, file.uri, file.content,
+ unit.lineInfo, unit, listener.errors);
}
@override
@@ -1067,7 +1083,8 @@ class AnalysisDriver implements AnalysisDriverGeneric {
CompilationUnitElement element =
libraryContext.computeUnitElement(library.source, file.source);
String signature = library.transitiveSignature;
- return new UnitElementResult(path, file.uri, signature, element);
+ return new UnitElementResult(
+ currentSession, path, file.uri, signature, element);
} finally {
libraryContext.dispose();
}
@@ -1599,7 +1616,8 @@ class AnalysisDriverTestView {
* Every result is independent, and is not guaranteed to be consistent with
* any previously returned result, even inside of the same library.
*/
-class AnalysisResult implements results.ResolveResult {
+class AnalysisResult extends BaseAnalysisResult
+ implements results.ResolveResult {
static final _UNCHANGED = new AnalysisResult(
null, null, null, null, null, null, null, null, null, null, null);
@@ -1613,12 +1631,6 @@ class AnalysisResult implements results.ResolveResult {
*/
final SourceFactory sourceFactory;
- @override
- final String path;
-
- @override
- final Uri uri;
-
/**
* Return `true` if the file exists.
*/
@@ -1651,15 +1663,16 @@ class AnalysisResult implements results.ResolveResult {
AnalysisResult(
this.driver,
this.sourceFactory,
- this.path,
- this.uri,
+ String path,
+ Uri uri,
this.exists,
this.content,
this.lineInfo,
this._signature,
this.unit,
this.errors,
- this._index);
+ this._index)
+ : super(driver?.currentSession, path, uri);
@override
LibraryElement get libraryElement => unit.element.library;
@@ -1672,6 +1685,19 @@ class AnalysisResult implements results.ResolveResult {
TypeProvider get typeProvider => unit.element.context.typeProvider;
}
+abstract class BaseAnalysisResult implements results.AnalysisResult {
+ @override
+ final String path;
+
+ @override
+ final AnalysisSession session;
scheglov 2017/06/26 15:30:03 This field should be the first.
Brian Wilkerson 2017/06/26 16:06:19 Done
+
+ @override
+ final Uri uri;
+
+ BaseAnalysisResult(this.session, this.path, this.uri);
+}
+
class DriverPerformance {
static final PerformanceTag driver =
PerformanceStatistics.analyzer.createChild('driver');
@@ -1704,20 +1730,16 @@ abstract class DriverWatcher {
* correspond to each other. But none of the results is guaranteed to be
* consistent with the state of the files.
*/
-class ErrorsResult implements results.ErrorsResult {
- @override
- final String path;
-
- @override
- final Uri uri;
-
+class ErrorsResult extends BaseAnalysisResult implements results.ErrorsResult {
@override
final LineInfo lineInfo;
@override
final List<AnalysisError> errors;
- ErrorsResult(this.path, this.uri, this.lineInfo, this.errors);
+ ErrorsResult(
+ AnalysisSession session, String path, Uri uri, this.lineInfo, this.errors)
+ : super(session, path, uri);
@override
results.ResultState get state => results.ResultState.VALID;
@@ -1757,13 +1779,7 @@ class ExceptionResult {
* resolved [unit] correspond to each other. But none of the results is
* guaranteed to be consistent with the state of the files.
*/
-class ParseResult implements results.ParseResult {
- @override
- final String path;
-
- @override
- final Uri uri;
-
+class ParseResult extends BaseAnalysisResult implements results.ParseResult {
@override
final String content;
@@ -1776,8 +1792,9 @@ class ParseResult implements results.ParseResult {
@override
final List<AnalysisError> errors;
- ParseResult(
- this.path, this.uri, this.content, this.lineInfo, this.unit, this.errors);
+ ParseResult(AnalysisSession session, String path, Uri uri, this.content,
+ this.lineInfo, this.unit, this.errors)
+ : super(session, path, uri);
@override
results.ResultState get state => results.ResultState.VALID;
@@ -1794,13 +1811,8 @@ class ParseResult implements results.ParseResult {
* Every result is independent, and is not guaranteed to be consistent with
* any previously returned result, even inside of the same library.
*/
-class UnitElementResult implements results.UnitElementResult {
- @override
- final String path;
-
- @override
- final Uri uri;
-
+class UnitElementResult extends BaseAnalysisResult
+ implements results.UnitElementResult {
/**
* The signature of the [element] is based the APIs of the files of the
* library (including the file itself) of the requested file and the
@@ -1813,7 +1825,9 @@ class UnitElementResult implements results.UnitElementResult {
*/
final CompilationUnitElement element;
- UnitElementResult(this.path, this.uri, this.signature, this.element);
+ UnitElementResult(AnalysisSession session, String path, Uri uri,
+ this.signature, this.element)
+ : super(session, path, uri);
@override
results.ResultState get state => results.ResultState.VALID;

Powered by Google App Engine
This is Rietveld 408576698