Remove AnalysisOptionsForLink and plumb analysis options through linker.
This is a non-breaking change; the only way linking is exposed to
clients is through `SummaryBuilder`, which can get the analysis
options from the context.
Fixes #35747.
Change-Id: I273408f33a881ac32ab248cbc8f3e0644630563b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96829
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@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 feb231c..14cac2e 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -17,6 +17,7 @@
import 'package:analyzer/src/dart/analysis/driver.dart';
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/error/codes.dart';
import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult;
import 'package:analyzer/src/generated/sdk.dart';
@@ -1981,7 +1982,9 @@
String sdkExtPath = '$projPath/sdk_ext';
newFile('$projPath/test', content: 'test.dart');
newFile('$sdkExtPath/entry.dart');
- List<int> bytes = new SummaryBuilder([], null).build();
+ List<int> bytes = new SummaryBuilder(
+ [], RestrictedAnalysisContext(analysisOptions, null, null))
+ .build();
newFileWithBytes('$projPath/sdk.ds', bytes);
// Setup _embedder.yaml.
newFile('$libPath/_embedder.yaml', content: r'''
@@ -2045,8 +2048,10 @@
expect(
lintNames,
- unorderedEquals(
- ['avoid_as' /* embedder */, 'camel_case_types' /* options */]));
+ unorderedEquals([
+ 'avoid_as' /* embedder */,
+ 'camel_case_types' /* options */
+ ]));
// Sanity check embedder libs.
var source = sourceFactory.forUri('dart:foobar');
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 44f61a4..5b85508 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -63,15 +63,15 @@
store.addStore(externalSummaries);
}
- // Fill the store with summaries required for the initial library.
- load(targetLibrary);
-
analysisContext = new RestrictedAnalysisContext(
analysisOptions,
declaredVariables,
sourceFactory,
);
+ // Fill the store with summaries required for the initial library.
+ load(targetLibrary);
+
var provider = new InputPackagesResultProvider(analysisContext, store,
session: session);
resynthesizer = provider.resynthesizer;
@@ -173,7 +173,7 @@
}, (String uri) {
UnlinkedUnit unlinkedUnit = store.unlinkedMap[uri];
return unlinkedUnit;
- }, (_) => null);
+ }, (_) => null, analysisContext.analysisOptions);
logger.writeln('Linked ${linkedLibraries.length} libraries.');
});
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 8c0dbe8..05b9467 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -62,7 +62,6 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
import 'package:analyzer/src/dart/constant/value.dart';
import 'package:analyzer/src/dart/element/builder.dart';
@@ -117,10 +116,11 @@
GetDependencyCallback getDependency,
GetUnitCallback getUnit,
GetDeclaredVariable getDeclaredVariable,
+ AnalysisOptions analysisOptions,
[GetAstCallback getAst]) {
Map<String, LinkedLibraryBuilder> linkedLibraries =
setupForLink(libraryUris, getUnit, getDeclaredVariable);
- _relink(linkedLibraries, getDependency, getUnit, getAst);
+ _relink(linkedLibraries, getDependency, getUnit, getAst, analysisOptions);
return linkedLibraries;
}
@@ -301,8 +301,9 @@
Map<String, LinkedLibraryBuilder> libraries,
GetDependencyCallback getDependency,
GetUnitCallback getUnit,
- GetAstCallback getAst) {
- new Linker(libraries, getDependency, getUnit, getAst).link();
+ GetAstCallback getAst,
+ AnalysisOptions analysisOptions) {
+ new Linker(libraries, getDependency, getUnit, getAst, analysisOptions).link();
}
/// Create an [UnlinkedParam] representing the given [parameter], which should
@@ -412,41 +413,6 @@
/// [UnlinkedUnit] objects.
typedef UnlinkedUnit GetUnitCallback(String absoluteUri);
-/// Stub implementation of [AnalysisOptions] used during linking.
-class AnalysisOptionsForLink implements AnalysisOptionsImpl {
- final Linker _linker;
-
- AnalysisOptionsForLink(this._linker);
-
- @override
- ExperimentStatus get experimentStatus => new ExperimentStatus();
-
- @override
- bool get hint => false;
-
- @override
- bool get implicitCasts => true;
-
- @deprecated
- @override
- bool get previewDart2 => true;
-
- @override
- bool get strictInference => false;
-
- @override
- bool get strictRawTypes => false;
-
- @override
- bool get strongMode => true;
-
- @override
- bool get strongModeHints => false;
-
- @override
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
/// Element representing a class or enum resynthesized from a summary
/// during linking.
abstract class ClassElementForLink
@@ -2110,7 +2076,7 @@
ContextForLink(this._linker);
@override
- AnalysisOptionsForLink get analysisOptions => _linker.analysisOptions;
+ AnalysisOptions get analysisOptions => _linker.analysisOptions;
@override
TypeProvider get typeProvider => _linker.typeProvider;
@@ -3970,10 +3936,12 @@
SpecialTypeElementForLink _bottomElement;
InheritanceManager2 _inheritanceManager;
ContextForLink _context;
- AnalysisOptionsForLink _analysisOptions;
+
+ /// Gets an instance of [AnalysisOptions] for use during linking.
+ final AnalysisOptions analysisOptions;
Linker(Map<String, LinkedLibraryBuilder> linkedLibraries, this.getDependency,
- this.getUnit, this.getAst) {
+ this.getUnit, this.getAst, this.analysisOptions) {
// Create elements for the libraries to be linked. The rest of
// the element model will be created on demand.
linkedLibraries
@@ -3984,10 +3952,6 @@
});
}
- /// Get an instance of [AnalysisOptions] for use during linking.
- AnalysisOptionsForLink get analysisOptions =>
- _analysisOptions ??= new AnalysisOptionsForLink(this);
-
/// Get the library element for `dart:async`.
LibraryElementForLink get asyncLibrary =>
_asyncLibrary ??= getLibrary(Uri.parse('dart:async'));
diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
index 9d7b6ad..5f2a56b 100644
--- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart
+++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
@@ -25,11 +25,9 @@
class SummaryBuilder {
final Iterable<Source> librarySources;
final AnalysisContext context;
+
/**
* Create a summary builder for these [librarySources] and [context].
- *
- * TODO(paulberry): remove optional "strong" parameter once all callers have
- * stopped passing it in.
*/
SummaryBuilder(this.librarySources, this.context);
@@ -94,7 +92,7 @@
return unlinked;
}, (String name) {
throw new StateError('Unexpected call to GetDeclaredVariable($name).');
- });
+ }, context.analysisOptions);
map.forEach(bundleAssembler.addLinkedLibrary);
return bundleAssembler.assemble().toBuffer();
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
index 5094b40..0d08da6 100644
--- a/pkg/analyzer/test/src/summary/test_strategies.dart
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -11,6 +11,7 @@
import 'package:analyzer/src/dart/analysis/restricted_analysis_context.dart';
import 'package:analyzer/src/dart/scanner/reader.dart';
import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
@@ -174,8 +175,8 @@
.map((Source source) => source.uri.toString())
.toSet();
- Map<String, LinkedLibrary> linkedSummaries =
- link(nonSdkLibraryUris, getDependency, getUnit, declaredVariables.get);
+ Map<String, LinkedLibrary> linkedSummaries = link(nonSdkLibraryUris,
+ getDependency, getUnit, declaredVariables.get, analysisOptions);
var analysisContext = RestrictedAnalysisContext(
analysisOptions,
@@ -270,6 +271,7 @@
final Map<String, UnlinkedUnit> uriToUnlinkedUnit;
final Map<String, LinkedLibrary> uriToLinkedLibrary;
+
SerializedMockSdk._(this.uriToUnlinkedUnit, this.uriToLinkedLibrary);
static SerializedMockSdk _serializeMockSdk() {
@@ -441,7 +443,7 @@
_linkerInputs.getUnit,
_linkerInputs.getDeclaredVariable);
linker = new Linker(linkedLibraries, _linkerInputs.getDependency,
- _linkerInputs.getUnit, null);
+ _linkerInputs.getUnit, null, analysisOptions);
}
}
@@ -526,6 +528,9 @@
_LinkerInputs _linkerInputs;
+ AnalysisOptions get analysisOptions => AnalysisOptionsImpl()
+ ..enabledExperiments = experimentStatus.toStringList();
+
bool get _allowMissingFiles;
@override
@@ -550,7 +555,8 @@
linkerInputs.linkedLibraries,
linkerInputs.getDependency,
linkerInputs.getUnit,
- linkerInputs.getDeclaredVariable);
+ linkerInputs.getDeclaredVariable,
+ analysisOptions);
linkedLibraries.forEach(assembler.addLinkedLibrary);
linkerInputs._uriToUnit.forEach((String uri, UnlinkedUnit unit) {
assembler.addUnlinkedUnitViaUri(uri, unit);
@@ -614,7 +620,8 @@
_linkerInputs.linkedLibraries,
_linkerInputs.getDependency,
_linkerInputs.getUnit,
- (name) => null)[_linkerInputs._testDartUri.toString()];
+ (name) => null,
+ analysisOptions)[_linkerInputs._testDartUri.toString()];
expect(linked, isNotNull);
_validateLinkedLibrary(linked);
unlinkedUnits = <UnlinkedUnit>[_linkerInputs._unlinkedDefiningUnit];
diff --git a/pkg/analyzer/tool/summary/dump_inferred_types.dart b/pkg/analyzer/tool/summary/dump_inferred_types.dart
index a5167b0..ffc71af 100644
--- a/pkg/analyzer/tool/summary/dump_inferred_types.dart
+++ b/pkg/analyzer/tool/summary/dump_inferred_types.dart
@@ -7,6 +7,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer/src/summary/base.dart';
import 'package:analyzer/src/summary/idl.dart';
@@ -40,7 +41,8 @@
InferredTypeCollector(
GetDependencyCallback getDependency, GetUnitCallback getUnit)
- : _linker = new Linker({}, getDependency, getUnit, null);
+ : _linker =
+ new Linker({}, getDependency, getUnit, null, AnalysisOptionsImpl());
/**
* If an inferred type exists matching the given [slot], record that it is the
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index 49fbdd9..d8df284 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -354,8 +354,12 @@
uriToUnit[absoluteUri];
}
- Map<String, LinkedLibraryBuilder> linkResult = link(libraryUris,
- getDependency, getUnit, analysisDriver.declaredVariables.get);
+ Map<String, LinkedLibraryBuilder> linkResult = link(
+ libraryUris,
+ getDependency,
+ getUnit,
+ analysisDriver.declaredVariables.get,
+ analysisOptions);
linkResult.forEach(assembler.addLinkedLibrary);
});
}
diff --git a/pkg/dev_compiler/lib/src/analyzer/driver.dart b/pkg/dev_compiler/lib/src/analyzer/driver.dart
index cec419b..8755825 100644
--- a/pkg/dev_compiler/lib/src/analyzer/driver.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/driver.dart
@@ -235,7 +235,8 @@
libraryUris.toSet(),
(uri) => summaryData.linkedMap[uri],
(uri) => summaryData.unlinkedMap[uri] ?? uriToUnit[uri],
- declaredVariables.get);
+ declaredVariables.get,
+ analysisOptions);
linkResult.forEach(assembler.addLinkedLibrary);
var summaryBytes = assembler.assemble().toBuffer();