Skip to content

Commit 600acad

Browse files
pqCommit Queue
authored and
Commit Queue
committed
start using getAnalysisOptionsForFile
Baby steps w/ context locator. Some TODOs show how this will thread through the driver into the library analyzer. Change-Id: I95f3047929c2bea6e7d5c1c9dc217c40ca9e4eef Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333302 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Phil Quitslund <[email protected]>
1 parent 4d9c408 commit 600acad

File tree

4 files changed

+50
-27
lines changed

4 files changed

+50
-27
lines changed

pkg/analyzer/lib/src/dart/analysis/context_builder2.dart

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,19 +185,15 @@ class ContextBuilderImpl2 implements ContextBuilder {
185185
var map = AnalysisOptionsMap();
186186
var provider = AnalysisOptionsProvider(sourceFactory);
187187
var pubspecFile = _findPubspecFile(contextRoot);
188-
for (var entry in (contextRoot as ContextRootImpl).optionsFileMap.entries) {
189-
var options = AnalysisOptionsImpl();
190-
var optionsYaml = provider.getOptionsFromFile(entry.value);
191-
options.applyOptions(optionsYaml);
192188

189+
void updateOptions(AnalysisOptionsImpl options) {
193190
if (pubspecFile != null) {
194191
var extractor = SdkConstraintExtractor(pubspecFile);
195192
var sdkVersionConstraint = extractor.constraint();
196193
if (sdkVersionConstraint != null) {
197194
options.sdkVersionConstraint = sdkVersionConstraint;
198195
}
199196
}
200-
201197
if (updateAnalysisOptions != null) {
202198
updateAnalysisOptions(options);
203199
} else if (updateAnalysisOptions2 != null) {
@@ -207,8 +203,25 @@ class ContextBuilderImpl2 implements ContextBuilder {
207203
sdk: sdk,
208204
);
209205
}
206+
}
207+
208+
var optionsMappings =
209+
(contextRoot as ContextRootImpl).optionsFileMap.entries;
210210

211-
map.add(entry.key, options);
211+
// If there are no options files, we still want to propagate sdk constraints
212+
// and options updates to the context root.
213+
if (optionsMappings.isEmpty) {
214+
var options = AnalysisOptionsImpl();
215+
updateOptions(options);
216+
map.add(contextRoot.root, options);
217+
} else {
218+
for (var entry in optionsMappings) {
219+
var options = AnalysisOptionsImpl();
220+
var optionsYaml = provider.getOptionsFromFile(entry.value);
221+
options.applyOptions(optionsYaml);
222+
updateOptions(options);
223+
map.add(entry.key, options);
224+
}
212225
}
213226

214227
return map;

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -669,8 +669,8 @@ class AnalysisDriver implements AnalysisDriverGeneric {
669669
}
670670

671671
@experimental
672-
AnalysisOptions? getAnalysisOptionsForFile(File file) =>
673-
_analysisOptionsMap?.getOptions(file);
672+
AnalysisOptions getAnalysisOptionsForFile(File file) =>
673+
_analysisOptionsMap?.getOptions(file) ?? AnalysisOptionsImpl();
674674

675675
/// Return the cached [ResolvedUnitResult] for the Dart file with the given
676676
/// [path]. If there is no cached result, return `null`. Usually only results
@@ -1370,6 +1370,9 @@ class AnalysisDriver implements AnalysisDriverGeneric {
13701370
performance: OperationPerformanceImpl('<root>'),
13711371
);
13721372

1373+
// todo(pq): pass this into the library analyzer.
1374+
//var options = libraryContext.analysisContext.getAnalysisOptionsForFile(file.resource);
1375+
13731376
var results = LibraryAnalyzer(
13741377
analysisOptions as AnalysisOptionsImpl,
13751378
declaredVariables,
@@ -1480,6 +1483,9 @@ class AnalysisDriver implements AnalysisDriverGeneric {
14801483
performance: OperationPerformanceImpl('<root>'),
14811484
);
14821485

1486+
// todo(pq): pass this into the library analyzer.
1487+
//var options = libraryContext.analysisContext.getAnalysisOptionsForFile(library.file.resource);
1488+
14831489
var unitResults = LibraryAnalyzer(
14841490
analysisOptions as AnalysisOptionsImpl,
14851491
declaredVariables,
@@ -1940,6 +1946,9 @@ class AnalysisDriver implements AnalysisDriverGeneric {
19401946
);
19411947
var unitElement = libraryContext.computeUnitElement(library, file);
19421948

1949+
// todo(pq): pass this into the library analyzer.
1950+
//var options = libraryContext.analysisContext.getAnalysisOptionsForFile(file.resource);
1951+
19431952
var analysisResult = LibraryAnalyzer(
19441953
analysisOptions as AnalysisOptionsImpl,
19451954
declaredVariables,

pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ class DriverBasedAnalysisContext implements AnalysisContext {
5858
}
5959

6060
@experimental
61-
AnalysisOptions? getAnalysisOptionsForFile(File file) =>
61+
AnalysisOptions getAnalysisOptionsForFile(File file) =>
6262
driver.getAnalysisOptionsForFile(file);
6363
}

pkg/analyzer/test/src/dart/analysis/context_builder2_test.dart

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import 'package:analyzer/dart/analysis/declared_variables.dart';
88
import 'package:analyzer/file_system/file_system.dart';
99
import 'package:analyzer/src/context/packages.dart';
1010
import 'package:analyzer/src/context/source.dart';
11-
import 'package:analyzer/src/dart/analysis/context_builder.dart';
1211
import 'package:analyzer/src/dart/analysis/context_builder2.dart';
13-
import 'package:analyzer/src/dart/analysis/context_locator.dart';
12+
import 'package:analyzer/src/dart/analysis/context_locator2.dart';
1413
import 'package:analyzer/src/dart/analysis/context_root.dart';
1514
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
1615
import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
@@ -29,12 +28,12 @@ import '../resolution/context_collection_resolution.dart';
2928

3029
main() {
3130
defineReflectiveSuite(() {
32-
defineReflectiveTests(ContextBuilderImplTest);
31+
defineReflectiveTests(ContextBuilderImplTest2);
3332
});
3433
}
3534

3635
@reflectiveTest
37-
class ContextBuilderImplTest with ResourceProviderMixin {
36+
class ContextBuilderImplTest2 with ResourceProviderMixin {
3837
late final ContextBuilderImpl2 contextBuilder;
3938
late final ContextRoot contextRoot;
4039

@@ -64,24 +63,26 @@ class ContextBuilderImplTest with ResourceProviderMixin {
6463

6564
void test_analysisOptions_invalid() {
6665
var projectPath = convertPath('/home/test');
67-
newAnalysisOptionsYamlFile(projectPath, ';');
66+
var optionsFile = newAnalysisOptionsYamlFile(projectPath, ';');
6867

6968
var analysisContext = _createSingleAnalysisContext(projectPath);
70-
var analysisOptions = analysisContext.analysisOptionsImpl;
69+
var analysisOptions =
70+
analysisContext.getAnalysisOptionsImplForFile(optionsFile);
7171
_expectEqualOptions(analysisOptions, AnalysisOptionsImpl());
7272
}
7373

7474
void test_analysisOptions_languageOptions() {
7575
var projectPath = convertPath('/home/test');
76-
newAnalysisOptionsYamlFile(
76+
var optionsFile = newAnalysisOptionsYamlFile(
7777
projectPath,
7878
AnalysisOptionsFileConfig(
7979
strictRawTypes: true,
8080
).toContent(),
8181
);
8282

8383
var analysisContext = _createSingleAnalysisContext(projectPath);
84-
var analysisOptions = analysisContext.analysisOptionsImpl;
84+
var analysisOptions =
85+
analysisContext.getAnalysisOptionsImplForFile(optionsFile);
8586
_expectEqualOptions(
8687
analysisOptions,
8788
AnalysisOptionsImpl()..strictRawTypes = true,
@@ -90,22 +91,23 @@ class ContextBuilderImplTest with ResourceProviderMixin {
9091

9192
void test_analysisOptions_sdkVersionConstraint_hasPubspec_hasSdk() {
9293
var projectPath = convertPath('/home/test');
93-
newPubspecYamlFile(projectPath, '''
94+
var pubspec = newPubspecYamlFile(projectPath, '''
9495
environment:
9596
sdk: ^2.1.0
9697
''');
9798

9899
var analysisContext = _createSingleAnalysisContext(projectPath);
99-
var analysisOptions = analysisContext.analysisOptionsImpl;
100+
var analysisOptions =
101+
analysisContext.getAnalysisOptionsImplForFile(pubspec);
100102
expect(analysisOptions.sdkVersionConstraint.toString(), '^2.1.0');
101103
}
102104

103105
void test_analysisOptions_sdkVersionConstraint_noPubspec() {
104106
var projectPath = convertPath('/home/test');
105-
newFile('$projectPath/lib/a.dart', '');
107+
var file = newFile('$projectPath/lib/a.dart', '');
106108

107109
var analysisContext = _createSingleAnalysisContext(projectPath);
108-
var analysisOptions = analysisContext.driver.analysisOptions;
110+
var analysisOptions = analysisContext.getAnalysisOptionsForFile(file);
109111
expect(analysisOptions.sdkVersionConstraint, isNull);
110112
}
111113

@@ -207,11 +209,11 @@ environment:
207209

208210
/// Return a single expected analysis context at the [path].
209211
DriverBasedAnalysisContext _createSingleAnalysisContext(String path) {
210-
var roots = ContextLocatorImpl(
212+
var roots = ContextLocatorImpl2(
211213
resourceProvider: resourceProvider,
212214
).locateRoots(includedPaths: [path]);
213215

214-
return ContextBuilderImpl(
216+
return ContextBuilderImpl2(
215217
resourceProvider: resourceProvider,
216218
).createContext(
217219
contextRoot: roots.single,
@@ -239,11 +241,10 @@ environment:
239241
}
240242

241243
extension on DriverBasedAnalysisContext {
242-
AnalysisOptionsImpl get analysisOptionsImpl {
243-
return driver.analysisOptions as AnalysisOptionsImpl;
244-
}
245-
246244
List<UriResolver> get uriResolvers {
247245
return (driver.sourceFactory as SourceFactoryImpl).resolvers;
248246
}
247+
248+
AnalysisOptionsImpl getAnalysisOptionsImplForFile(File file) =>
249+
getAnalysisOptionsForFile(file) as AnalysisOptionsImpl;
249250
}

0 commit comments

Comments
 (0)