Skip to content

Commit 8ffaefa

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Don't report InconsistentAnalysisException for package:build
Bug: dart-lang/source_gen#721 Change-Id: If9ecb9d9c39a314187121c0622e5663bbc261bd4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/386862 Reviewed-by: Phil Quitslund <pquitslund@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent dcc8c22 commit 8ffaefa

File tree

4 files changed

+92
-11
lines changed

4 files changed

+92
-11
lines changed

pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ AnalysisDriverForPackageBuild createAnalysisDriver({
6767
externalSummaries: dataStore,
6868
packages: packages,
6969
macroSupport: KernelMacroSupport(),
70+
shouldReportInconsistentAnalysisException: false,
7071
);
7172

7273
scheduler.start();

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

+4
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ class AnalysisDriver {
245245
/// Whether resolved units should be indexed.
246246
final bool enableIndex;
247247

248+
/// Whether analysis sessions should report inconsistent analysis.
249+
final bool shouldReportInconsistentAnalysisException;
250+
248251
/// The context in which libraries should be analyzed.
249252
LibraryContext? _libraryContext;
250253

@@ -286,6 +289,7 @@ class AnalysisDriver {
286289
UnlinkedUnitStore? unlinkedUnitStore,
287290
InfoDeclarationStore? infoDeclarationStore,
288291
this.enableIndex = false,
292+
this.shouldReportInconsistentAnalysisException = true,
289293
SummaryDataStore? externalSummaries,
290294
DeclaredVariables? declaredVariables,
291295
bool retainDataForTesting = false,

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

+4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ class AnalysisSessionImpl implements AnalysisSession {
5050
/// Check to see that results from this session will be consistent, and throw
5151
/// an [InconsistentAnalysisException] if they might not be.
5252
void checkConsistency() {
53+
if (!_driver.shouldReportInconsistentAnalysisException) {
54+
return;
55+
}
56+
5357
if (_driver.hasPendingFileChanges || _driver.currentSession != this) {
5458
throw InconsistentAnalysisException();
5559
}

pkg/analyzer/test/src/clients/build_resolvers/build_resolvers_test.dart

+83-11
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:analyzer/dart/analysis/results.dart';
56
import 'package:analyzer/dart/sdk/build_sdk_summary.dart';
7+
import 'package:analyzer/file_system/file_system.dart';
68
import 'package:analyzer/src/clients/build_resolvers/build_resolvers.dart';
9+
import 'package:analyzer/src/context/packages.dart';
10+
import 'package:analyzer/src/source/package_map_resolver.dart';
711
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
12+
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
813
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
914
import 'package:test/test.dart';
1015
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -17,7 +22,72 @@ main() {
1722

1823
@reflectiveTest
1924
class AnalysisDriverForPackageBuildTest with ResourceProviderMixin {
25+
File get testFile => getFile('$testPackageLibPath/test.dart');
26+
27+
String get testPackageLibPath => '$testPackageRootPath/lib';
28+
29+
String get testPackageRootPath => '$workspaceRootPath/test';
30+
31+
String get workspaceRootPath => '/home';
32+
33+
void setUp() {
34+
newPubspecYamlFile(testPackageRootPath, r'''
35+
name: test
36+
''');
37+
38+
newPackageConfigJsonFileFromBuilder(
39+
testPackageRootPath,
40+
PackageConfigFileBuilder()
41+
..add(
42+
name: 'test',
43+
rootPath: testPackageRootPath,
44+
),
45+
);
46+
}
47+
48+
test_currentSession_afterChangeFile() async {
49+
var analysisDriver = await _createAnalysisDriver();
50+
var analysisSession = analysisDriver.currentSession;
51+
52+
var a = newFile('$testPackageLibPath/a.dart', r'''
53+
class A {}
54+
''');
55+
56+
analysisDriver.changeFile(a.path);
57+
58+
var unitResult = await analysisSession.getResolvedUnit(a.path);
59+
unitResult as ResolvedUnitResult;
60+
}
61+
62+
test_currentSession_getResolvedUnit() async {
63+
var analysisDriver = await _createAnalysisDriver();
64+
var analysisSession = analysisDriver.currentSession;
65+
66+
var a = newFile('$testPackageLibPath/a.dart', r'''
67+
class A {}
68+
''');
69+
70+
var unitResult = await analysisSession.getResolvedUnit(a.path);
71+
unitResult as ResolvedUnitResult;
72+
expect(unitResult.unit.declarations, hasLength(1));
73+
}
74+
2075
test_sdkLibraryUris() async {
76+
var analysisDriver = await _createAnalysisDriver();
77+
78+
expect(
79+
analysisDriver.sdkLibraryUris,
80+
containsAll([
81+
Uri.parse('dart:core'),
82+
Uri.parse('dart:async'),
83+
Uri.parse('dart:io'),
84+
Uri.parse('dart:_internal'),
85+
]),
86+
);
87+
}
88+
89+
/// Creates the driver for [testFile].
90+
Future<AnalysisDriverForPackageBuild> _createAnalysisDriver() async {
2191
var sdkRoot = getFolder('/sdk');
2292

2393
createMockSdk(
@@ -30,22 +100,24 @@ class AnalysisDriverForPackageBuildTest with ResourceProviderMixin {
30100
sdkPath: sdkRoot.path,
31101
);
32102

103+
var packages = findPackagesFrom(resourceProvider, testFile);
104+
var uriResolver = _toPackageMapUriResolver(packages);
105+
33106
var analysisDriver = createAnalysisDriver(
34107
resourceProvider: resourceProvider,
35108
sdkSummaryBytes: sdkSummaryBytes,
36109
analysisOptions: AnalysisOptionsImpl(),
37-
uriResolvers: [],
38-
packages: Packages({}),
110+
packages: packages,
111+
uriResolvers: [uriResolver],
39112
);
113+
return analysisDriver;
114+
}
40115

41-
expect(
42-
analysisDriver.sdkLibraryUris,
43-
containsAll([
44-
Uri.parse('dart:core'),
45-
Uri.parse('dart:async'),
46-
Uri.parse('dart:io'),
47-
Uri.parse('dart:_internal'),
48-
]),
49-
);
116+
PackageMapUriResolver _toPackageMapUriResolver(Packages packages) {
117+
var map = <String, List<Folder>>{};
118+
for (var package in packages.packages) {
119+
map[package.name] = [package.libFolder];
120+
}
121+
return PackageMapUriResolver(resourceProvider, map);
50122
}
51123
}

0 commit comments

Comments
 (0)