Create a SynchronousSession class.
In the long term this class will take over much of the role played by
RestrictedAnalysisContext. For now it is simply a container for the
analysis options, declared variables, type provider, and type system.
In follow-up CLs I will plumb this object through various parts of the
analyzer, especially the LinterContext; this will enable the
canBeConst... methods to be moved into SynchronousSession, and that
will allow us to stop creating a LinterContext in
BestPracticesVerifier.
Change-Id: I7ac2d386c10d2e5339d9715848b185c163e1f858
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101860
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 88938f1..f30a1c3 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -18,6 +18,7 @@
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
import 'package:analyzer/src/dart/analysis/restricted_analysis_context.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult;
import 'package:analyzer/src/generated/sdk.dart';
@@ -1978,8 +1979,9 @@
String sdkExtPath = '$projPath/sdk_ext';
newFile('$projPath/test', content: 'test.dart');
newFile('$sdkExtPath/entry.dart');
+ var synchronousSession = SynchronousSession(analysisOptions, null);
List<int> bytes = new SummaryBuilder(
- [], RestrictedAnalysisContext(analysisOptions, null, null))
+ [], RestrictedAnalysisContext(synchronousSession, null))
.build();
newFileWithBytes('$projPath/sdk.ds', bytes);
// Setup _embedder.yaml.
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 62ba772..7340b1e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -12,6 +12,7 @@
import 'package:analyzer/src/dart/analysis/library_graph.dart';
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
import 'package:analyzer/src/dart/analysis/restricted_analysis_context.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/inheritance_manager2.dart';
import 'package:analyzer/src/generated/engine.dart'
@@ -72,9 +73,10 @@
store.addStore(externalSummaries);
}
+ var synchronousSession =
+ SynchronousSession(analysisOptions, declaredVariables);
analysisContext = new RestrictedAnalysisContext(
- analysisOptions,
- declaredVariables,
+ synchronousSession,
sourceFactory,
);
diff --git a/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart b/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart
index a68cdcd..f10e3a5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/analysis/declared_variables.dart';
import 'package:analyzer/src/context/context.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/source.dart';
@@ -14,40 +15,30 @@
/// functionality (which is task based), except what we intend to expose
/// through the new API.
class RestrictedAnalysisContext implements AnalysisContextImpl {
- @override
- final AnalysisOptionsImpl analysisOptions;
-
- @override
- final DeclaredVariables declaredVariables;
+ final SynchronousSession synchronousSession;
@override
final SourceFactory sourceFactory;
- TypeProvider _typeProvider;
-
- TypeSystem _typeSystem;
-
- RestrictedAnalysisContext(
- this.analysisOptions, this.declaredVariables, this.sourceFactory);
+ RestrictedAnalysisContext(this.synchronousSession, this.sourceFactory);
@override
- TypeProvider get typeProvider => _typeProvider;
+ AnalysisOptionsImpl get analysisOptions => synchronousSession.analysisOptions;
+
+ @override
+ DeclaredVariables get declaredVariables =>
+ synchronousSession.declaredVariables;
+
+ @override
+ TypeProvider get typeProvider => synchronousSession.typeProvider;
@override
set typeProvider(TypeProvider typeProvider) {
- if (_typeProvider != null) {
- throw StateError('TypeProvider can be set only once.');
- }
- _typeProvider = typeProvider;
+ synchronousSession.typeProvider = typeProvider;
}
@override
- TypeSystem get typeSystem {
- return _typeSystem ??= Dart2TypeSystem(
- typeProvider,
- implicitCasts: analysisOptions.implicitCasts,
- );
- }
+ TypeSystem get typeSystem => synchronousSession.typeSystem;
noSuchMethod(Invocation invocation) {
return super.noSuchMethod(invocation);
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 5c88736..7461fe9 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -14,6 +14,7 @@
import 'package:analyzer/src/dart/analysis/driver.dart' as driver;
import 'package:analyzer/src/dart/analysis/top_level_declaration.dart';
import 'package:analyzer/src/dart/analysis/uri_converter.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/source.dart';
@@ -192,3 +193,33 @@
}
}
}
+
+/// Data structure containing information about the analysis session that is
+/// available synchronously.
+class SynchronousSession {
+ final AnalysisOptionsImpl analysisOptions;
+
+ final DeclaredVariables declaredVariables;
+
+ TypeProvider _typeProvider;
+
+ TypeSystem _typeSystem;
+
+ SynchronousSession(this.analysisOptions, this.declaredVariables);
+
+ TypeProvider get typeProvider => _typeProvider;
+
+ set typeProvider(TypeProvider typeProvider) {
+ if (_typeProvider != null) {
+ throw StateError('TypeProvider can be set only once.');
+ }
+ _typeProvider = typeProvider;
+ }
+
+ TypeSystem get typeSystem {
+ return _typeSystem ??= Dart2TypeSystem(
+ typeProvider,
+ implicitCasts: analysisOptions.implicitCasts,
+ );
+ }
+}
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
index 9c286c5..e27b403 100644
--- a/pkg/analyzer/test/src/summary/test_strategies.dart
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -9,6 +9,7 @@
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/src/dart/analysis/restricted_analysis_context.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/scanner/reader.dart';
import 'package:analyzer/src/dart/scanner/scanner.dart';
import 'package:analyzer/src/generated/engine.dart';
@@ -181,9 +182,10 @@
Map<String, LinkedLibrary> linkedSummaries = link(nonSdkLibraryUris,
getDependency, getUnit, declaredVariables, analysisOptions);
+ var synchronousSession =
+ SynchronousSession(analysisOptions, declaredVariables);
var analysisContext = RestrictedAnalysisContext(
- analysisOptions,
- declaredVariables,
+ synchronousSession,
sourceFactory,
);
diff --git a/pkg/dev_compiler/lib/src/analyzer/driver.dart b/pkg/dev_compiler/lib/src/analyzer/driver.dart
index c1e1efc..8d55999 100644
--- a/pkg/dev_compiler/lib/src/analyzer/driver.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/driver.dart
@@ -14,6 +14,7 @@
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/analysis/library_analyzer.dart';
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/analysis/restricted_analysis_context.dart';
import 'package:analyzer/src/dart/element/inheritance_manager2.dart';
import 'package:analyzer/src/generated/engine.dart';
@@ -241,8 +242,9 @@
var bundle = PackageBundle.fromBuffer(summaryBytes);
/// Create an analysis context to contain the state for this build unit.
- var context = RestrictedAnalysisContext(
- analysisOptions, declaredVariables, sourceFactory);
+ var synchronousSession =
+ SynchronousSession(analysisOptions, declaredVariables);
+ var context = RestrictedAnalysisContext(synchronousSession, sourceFactory);
var resynthesizer = StoreBasedSummaryResynthesizer(
context,
null,