Adds library result
R=scheglov@google.com
Fixes https://github.com/dart-lang/sdk/issues/57092
Change-Id: I125c53e138c97e57fc22d69b2362351ddcbb6b4b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/395420
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Felipe Morschel <fmorschel.dev@gmail.com>
diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart b/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
index b5d93f9..11675b0 100644
--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
+++ b/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
@@ -16,19 +16,22 @@
/// fix from being composed.
InstrumentationService get instrumentationService;
+ /// The resolved library result in which assist operates.
+ ResolvedLibraryResult get libraryResult;
+
/// A mapping of [ProducerGenerator]s to the set of lint names with which they
/// are associated (can fix).
Map<ProducerGenerator, Set<LintCode>> get producerGeneratorsForLintRules;
- /// The resolution result in which assist operates.
- ResolvedUnitResult get resolveResult;
-
/// The length of the selection.
int get selectionLength;
/// The start of the selection.
int get selectionOffset;
+ /// The unit result in which assist operates.
+ ResolvedUnitResult get unitResult;
+
/// The workspace in which the fix contributor operates.
ChangeWorkspace get workspace;
}
diff --git a/pkg/analysis_server/lib/src/cider/assists.dart b/pkg/analysis_server/lib/src/cider/assists.dart
index 52a376c..548341a 100644
--- a/pkg/analysis_server/lib/src/cider/assists.dart
+++ b/pkg/analysis_server/lib/src/cider/assists.dart
@@ -35,7 +35,9 @@
int length,
) async {
var result = <Assist>[];
- var resolvedUnit = await _fileResolver.resolve(path: path);
+ var resolvedLibrary = await _fileResolver.resolveLibrary2(path: path);
+ var resolvedUnit = resolvedLibrary.unitWithPath(path)!;
+
var lineInfo = resolvedUnit.lineInfo;
var offset = lineInfo.getOffsetOfLine(lineNumber) + colNumber;
@@ -45,6 +47,7 @@
var context = DartAssistContextImpl(
InstrumentationService.NULL_SERVICE,
workspace,
+ resolvedLibrary,
resolvedUnit,
_producerGeneratorsForLintRules,
offset,
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index 78628ac..ec1c45a6 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -39,7 +39,8 @@
/// Compute quick fixes for errors on the line with the [offset].
Future<List<CiderErrorFixes>> compute(String path, int lineNumber) async {
var result = <CiderErrorFixes>[];
- var resolvedUnit = await _fileResolver.resolve(path: path);
+ var resolvedLibrary = await _fileResolver.resolveLibrary2(path: path);
+ var resolvedUnit = resolvedLibrary.unitWithPath(path)!;
var lineInfo = resolvedUnit.lineInfo;
@@ -51,7 +52,8 @@
var context = _CiderDartFixContextImpl(
_fileResolver,
workspace: workspace,
- resolvedResult: resolvedUnit,
+ libraryResult: resolvedLibrary,
+ unitResult: resolvedUnit,
error: error,
);
@@ -75,7 +77,8 @@
_CiderDartFixContextImpl(
this._fileResolver, {
required super.workspace,
- required super.resolvedResult,
+ required super.libraryResult,
+ required super.unitResult,
required super.error,
}) : super(instrumentationService: InstrumentationService.NULL_SERVICE);
diff --git a/pkg/analysis_server/lib/src/g3/fixes.dart b/pkg/analysis_server/lib/src/g3/fixes.dart
index cdd0e78..b514fd2 100644
--- a/pkg/analysis_server/lib/src/g3/fixes.dart
+++ b/pkg/analysis_server/lib/src/g3/fixes.dart
@@ -66,8 +66,10 @@
var analysisContext = collection.contextFor(path);
var analysisSession = analysisContext.currentSession;
- var unitResult = await analysisSession.getResolvedUnit(path);
- unitResult as ResolvedUnitResult;
+ var resolvedLibrary = await analysisSession.getResolvedLibrary(path);
+ resolvedLibrary as ResolvedLibraryResult;
+
+ var unitResult = resolvedLibrary.unitWithPath(path)!;
AnalysisError error;
var errors = unitResult.errors;
@@ -95,7 +97,8 @@
var context = DartFixContext(
instrumentationService: InstrumentationService.NULL_SERVICE,
workspace: workspace,
- resolvedResult: unitResult,
+ libraryResult: resolvedLibrary,
+ unitResult: unitResult,
error: error,
);
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
index 28e5f4c..a01ab25 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
@@ -100,14 +100,16 @@
) async {
var changes = <SourceChange>[];
- var result = await server.getResolvedUnit(file);
+ var libraryResult = await server.getResolvedLibrary(file);
server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
- if (result != null) {
+ if (libraryResult != null) {
+ var unitResult = libraryResult.unitWithPath(file)!;
var context = DartAssistContextImpl(
server.instrumentationService,
DartChangeWorkspace(await server.currentSessions),
- result,
+ libraryResult,
+ unitResult,
server.producerGeneratorsForLintRules,
offset,
length,
@@ -128,7 +130,7 @@
length: $length
''';
throw CaughtExceptionWithFiles(exception, stackTrace, {
- file: result.content,
+ file: unitResult.content,
'parameters': parametersFile,
});
}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
index 7853329..8c37357 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
@@ -187,19 +187,21 @@
int offset,
) async {
var errorFixesList = <AnalysisErrorFixes>[];
- var result = await server.getResolvedUnit(file);
+ var libraryResult = await server.getResolvedLibrary(file);
server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
- if (result != null) {
- var lineInfo = result.lineInfo;
+ if (libraryResult != null) {
+ var unitResult = libraryResult.unitWithPath(file)!;
+ var lineInfo = unitResult.lineInfo;
var requestLine = lineInfo.getLocation(offset).lineNumber;
- for (var error in result.errors) {
+ for (var error in unitResult.errors) {
var errorLine = lineInfo.getLocation(error.offset).lineNumber;
if (errorLine == requestLine) {
var workspace = DartChangeWorkspace(await server.currentSessions);
var context = DartFixContext(
instrumentationService: server.instrumentationService,
workspace: workspace,
- resolvedResult: result,
+ libraryResult: libraryResult,
+ unitResult: unitResult,
error: error,
);
@@ -215,14 +217,14 @@
error.errorCode: ${error.errorCode}
''';
throw CaughtExceptionWithFiles(exception, stackTrace, {
- file: result.content,
+ file: unitResult.content,
'parameters': parametersFile,
});
}
if (fixes.isNotEmpty) {
fixes.sort(Fix.compareFixes);
- var serverError = newAnalysisError_fromEngine(result, error);
+ var serverError = newAnalysisError_fromEngine(unitResult, error);
var errorFixes = AnalysisErrorFixes(serverError);
errorFixesList.add(errorFixes);
for (var fix in fixes) {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart b/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart
index 3ed20f9..a3a45ea 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart
@@ -28,8 +28,8 @@
/// Produces [CodeAction]s from Dart source commands, fixes, assists and
/// refactors from the server.
class DartCodeActionsProducer extends AbstractCodeActionsProducer {
- ResolvedLibraryResult library;
- ResolvedUnitResult unit;
+ ResolvedLibraryResult libraryResult;
+ ResolvedUnitResult unitResult;
Range range;
final OptionalVersionedTextDocumentIdentifier docIdentifier;
final CodeActionTriggerKind? triggerKind;
@@ -39,8 +39,8 @@
super.file,
super.lineInfo,
this.docIdentifier,
- this.library,
- this.unit, {
+ this.libraryResult,
+ this.unitResult, {
required this.range,
required super.offset,
required super.length,
@@ -126,7 +126,8 @@
var context = DartAssistContextImpl(
server.instrumentationService,
workspace,
- unit,
+ libraryResult,
+ unitResult,
server.producerGeneratorsForLintRules,
offset,
length,
@@ -137,8 +138,8 @@
return assists.map((assist) {
var action = createAssistAction(
assist.change,
- unit.path,
- unit.lineInfo,
+ unitResult.path,
+ unitResult.lineInfo,
);
return (action: action, priority: assist.kind.priority);
}).toList();
@@ -157,12 +158,12 @@
return [];
}
- var lineInfo = unit.lineInfo;
+ var lineInfo = unitResult.lineInfo;
var codeActions = <CodeActionWithPriority>[];
try {
var workspace = DartChangeWorkspace(await server.currentSessions);
- for (var error in unit.errors) {
+ for (var error in unitResult.errors) {
// Return fixes for any part of the line where a diagnostic is.
// If a diagnostic spans multiple lines, the fix will be included for
// all of those lines.
@@ -177,14 +178,15 @@
var context = DartFixContext(
instrumentationService: server.instrumentationService,
workspace: workspace,
- resolvedResult: unit,
+ libraryResult: libraryResult,
+ unitResult: unitResult,
error: error,
);
var fixes = await computeFixes(context);
if (fixes.isNotEmpty) {
var diagnostic = toDiagnostic(
server.uriConverter,
- unit,
+ unitResult,
error,
supportedTags: supportedDiagnosticTags,
clientSupportsCodeDescription: supportsCodeDescription,
@@ -227,8 +229,8 @@
var context = RefactoringContext(
server: server,
startSessions: await server.currentSessions,
- resolvedLibraryResult: library,
- resolvedUnitResult: unit,
+ resolvedLibraryResult: libraryResult,
+ resolvedUnitResult: unitResult,
clientCapabilities: capabilities,
selectionOffset: offset,
selectionLength: length,
@@ -244,7 +246,7 @@
// Extract Method
if (ExtractMethodRefactoring(
server.searchEngine,
- unit,
+ unitResult,
offset,
length,
).isAvailable()) {
@@ -258,7 +260,7 @@
}
// Extract Local Variable
- if (ExtractLocalRefactoring(unit, offset, length).isAvailable()) {
+ if (ExtractLocalRefactoring(unitResult, offset, length).isAvailable()) {
refactorActions.add(
createRefactor(
CodeActionKind.RefactorExtract,
@@ -271,7 +273,7 @@
// Extract Widget
if (ExtractWidgetRefactoring(
server.searchEngine,
- unit,
+ unitResult,
offset,
length,
).isAvailable()) {
@@ -290,7 +292,7 @@
// Inline Local Variable
if (InlineLocalRefactoring(
server.searchEngine,
- unit,
+ unitResult,
offset,
).isAvailable()) {
refactorActions.add(
@@ -305,7 +307,7 @@
// Inline Method
if (InlineMethodRefactoring(
server.searchEngine,
- unit,
+ unitResult,
offset,
).isAvailable()) {
refactorActions.add(
@@ -320,14 +322,14 @@
// Converts/Rewrites
if (shouldIncludeKind(CodeActionKind.RefactorRewrite)) {
- var node = NodeLocator(offset).searchWithin(unit.unit);
+ var node = NodeLocator(offset).searchWithin(unitResult.unit);
var element = server.getElementOfNode(node).asElement2;
// Getter to Method
if (element is GetterElement &&
ConvertGetterToMethodRefactoring(
server.refactoringWorkspace,
- unit.session,
+ unitResult.session,
element,
).isAvailable()) {
refactorActions.add(
@@ -343,7 +345,7 @@
if (element is ExecutableElement2 &&
ConvertMethodToGetterRefactoring(
server.refactoringWorkspace,
- unit.session,
+ unitResult.session,
element,
).isAvailable()) {
refactorActions.add(
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index cfa6d81..35aa496 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -19,7 +19,10 @@
final ChangeWorkspace workspace;
@override
- final ResolvedUnitResult resolveResult;
+ final ResolvedLibraryResult libraryResult;
+
+ @override
+ final ResolvedUnitResult unitResult;
@override
final Map<ProducerGenerator, Set<LintCode>> producerGeneratorsForLintRules;
@@ -33,7 +36,8 @@
DartAssistContextImpl(
this.instrumentationService,
this.workspace,
- this.resolveResult,
+ this.libraryResult,
+ this.unitResult,
this.producerGeneratorsForLintRules,
this.selectionOffset,
this.selectionLength,
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 70e6ab6..949e6bc 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -178,7 +178,7 @@
AssistProcessor(this._assistContext);
Future<List<Assist>> compute() async {
- if (isMacroGenerated(_assistContext.resolveResult.file.path)) {
+ if (isMacroGenerated(_assistContext.unitResult.file.path)) {
return _assists;
}
await _addFromProducers();
@@ -201,9 +201,10 @@
Future<void> _addFromProducers() async {
var context = CorrectionProducerContext.createResolved(
+ libraryResult: _assistContext.libraryResult,
+ unitResult: _assistContext.unitResult,
selectionOffset: _assistContext.selectionOffset,
selectionLength: _assistContext.selectionLength,
- resolvedResult: _assistContext.resolveResult,
);
Future<void> compute(CorrectionProducer producer) async {
@@ -258,15 +259,15 @@
var selectionEnd =
_assistContext.selectionOffset + _assistContext.selectionLength;
var locator = NodeLocator(_assistContext.selectionOffset, selectionEnd);
- var node = locator.searchWithin(_assistContext.resolveResult.unit);
+ var node = locator.searchWithin(_assistContext.unitResult.unit);
if (node == null) {
return false;
}
var fileOffset = node.offset;
- for (var error in _assistContext.resolveResult.errors) {
+ for (var error in _assistContext.unitResult.errors) {
var errorSource = error.source;
- if (_assistContext.resolveResult.path == errorSource.fullName) {
+ if (_assistContext.unitResult.path == errorSource.fullName) {
if (fileOffset >= error.offset &&
fileOffset <= error.offset + error.length) {
if (errorCodes.contains(error.errorCode)) {
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 733d48d..e4ef5e2 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -230,15 +230,15 @@
if (file_paths.isDart(pathContext, path) &&
!file_paths.isGenerated(path) &&
!file_paths.isMacroGenerated(path)) {
- var library = await performance.runAsync(
+ var libraryResult = await performance.runAsync(
'getResolvedLibrary',
(_) => context.currentSession.getResolvedContainingLibrary(path),
);
- var unit = library?.unitWithPath(path);
- if (!isCancelled && library != null && unit != null) {
+ var unitResult = libraryResult?.unitWithPath(path);
+ if (!isCancelled && libraryResult != null && unitResult != null) {
await _fixErrorsInLibraryUnit(
- unit,
- library,
+ libraryResult,
+ unitResult,
autoTriggered: autoTriggered,
);
}
@@ -266,16 +266,16 @@
continue;
}
- var result = context.currentSession.getParsedLibrary(path);
+ var parsedLibrary = context.currentSession.getParsedLibrary(path);
if (isCancelled) {
break;
}
- if (result is ParsedLibraryResult) {
+ if (parsedLibrary is ParsedLibraryResult) {
var errorListener = RecordingErrorListener();
var unitContexts = <LintRuleUnitContext>[];
- for (var parsedUnit in result.units) {
+ for (var parsedUnit in parsedLibrary.units) {
var errorReporter = ErrorReporter(
errorListener,
StringSource(parsedUnit.content, null),
@@ -293,7 +293,7 @@
_computeParsedResultLint(unitContext, unitContexts);
}
await _fixErrorsInParsedLibrary(
- result,
+ parsedLibrary,
errorListener.errors,
stopAfterFirst: false,
);
@@ -424,13 +424,13 @@
);
// Get the list of imports used in the files.
- var result = context.currentSession.getParsedLibrary(path);
- if (result is! ParsedLibraryResult) {
+ var libraryResult = context.currentSession.getParsedLibrary(path);
+ if (libraryResult is! ParsedLibraryResult) {
return (edits: fixes, details: details);
}
- for (var unit in result.units) {
- var directives = unit.unit.directives;
+ for (var unitResult in libraryResult.units) {
+ var directives = unitResult.unit.directives;
for (var directive in directives) {
var uri =
(directive is ImportDirective) ? directive.uri.stringValue : '';
@@ -519,21 +519,25 @@
continue;
}
- var library = await context.currentSession.getResolvedLibrary(path);
+ var resolvedLibrary = await context.currentSession.getResolvedLibrary(
+ path,
+ );
if (isCancelled) {
break;
}
- if (library is NotLibraryButPartResult) {
- var unit = await context.currentSession.getResolvedUnit(path);
- if (unit is ResolvedUnitResult) {
- library = await context.currentSession.getResolvedLibraryByElement2(
- unit.libraryElement2,
- );
+ if (resolvedLibrary is NotLibraryButPartResult) {
+ var resolvedUnit = await context.currentSession.getResolvedUnit(path);
+ if (resolvedUnit is ResolvedUnitResult) {
+ resolvedLibrary = await context.currentSession
+ .getResolvedLibraryByElement2(resolvedUnit.libraryElement2);
}
}
- if (library is ResolvedLibraryResult) {
- await _fixErrorsInLibrary(library, stopAfterFirst: stopAfterFirst);
+ if (resolvedLibrary is ResolvedLibraryResult) {
+ await _fixErrorsInLibrary(
+ resolvedLibrary,
+ stopAfterFirst: stopAfterFirst,
+ );
if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
break;
}
@@ -585,16 +589,16 @@
}
/// Uses the change [builder] to create fixes for the diagnostics in the
- /// library associated with the analysis [result].
+ /// library associated with the analysis [libraryResult].
Future<void> _fixErrorsInLibrary(
- ResolvedLibraryResult result, {
+ ResolvedLibraryResult libraryResult, {
bool stopAfterFirst = false,
bool autoTriggered = false,
}) async {
- for (var unitResult in result.units) {
+ for (var unitResult in libraryResult.units) {
await _fixErrorsInLibraryUnit(
+ libraryResult,
unitResult,
- result,
stopAfterFirst: stopAfterFirst,
autoTriggered: autoTriggered,
);
@@ -602,21 +606,22 @@
}
/// Uses the change [builder] to create fixes for the diagnostics in
- /// [unit].
+ /// [unitResult].
Future<void> _fixErrorsInLibraryUnit(
- ResolvedUnitResult unit,
- ResolvedLibraryResult library, {
+ ResolvedLibraryResult libraryResult,
+ ResolvedUnitResult unitResult, {
bool stopAfterFirst = false,
bool autoTriggered = false,
}) async {
- var analysisOptions = unit.session.analysisContext
- .getAnalysisOptionsForFile(unit.file);
+ var analysisOptions = unitResult.session.analysisContext
+ .getAnalysisOptionsForFile(unitResult.file);
DartFixContext fixContext(AnalysisError diagnostic) {
return DartFixContext(
instrumentationService: _instrumentationService,
workspace: _workspace,
- resolvedResult: unit,
+ libraryResult: libraryResult,
+ unitResult: unitResult,
error: diagnostic,
autoTriggered: autoTriggered,
);
@@ -624,10 +629,11 @@
CorrectionProducerContext correctionContext(AnalysisError diagnostic) {
return CorrectionProducerContext.createResolved(
+ libraryResult: libraryResult,
+ unitResult: unitResult,
applyingBulkFixes: true,
dartFixContext: fixContext(diagnostic),
diagnostic: diagnostic,
- resolvedResult: unit,
selectionOffset: diagnostic.offset,
selectionLength: diagnostic.length,
);
@@ -636,9 +642,9 @@
//
// Attempt to apply the fixes that aren't related to directives.
//
- for (var error in _filterErrors(analysisOptions, unit.errors)) {
+ for (var error in _filterErrors(analysisOptions, unitResult.errors)) {
var context = fixContext(error);
- await _fixSingleError(context, unit, error);
+ await _fixSingleError(context, libraryResult, unitResult, error);
if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
return;
}
@@ -646,15 +652,15 @@
// Only if this unit is the defining unit, we don't have other fixes and
// we were not auto-triggered should be continue with fixes for directives.
- if (unit != library.units.first ||
+ if (unitResult != libraryResult.units.first ||
autoTriggered ||
- builder.hasEditsFor(unit.path)) {
+ builder.hasEditsFor(unitResult.path)) {
return;
}
AnalysisError? directivesOrderingError;
var unusedImportErrors = <AnalysisError>[];
- for (var error in _filterErrors(analysisOptions, unit.errors)) {
+ for (var error in _filterErrors(analysisOptions, unitResult.errors)) {
var errorCode = error.errorCode;
if (errorCode is LintCode) {
if (DirectivesOrdering.allCodes.contains(errorCode)) {
@@ -695,15 +701,15 @@
}
Future<void> _fixErrorsInParsedLibrary(
- ParsedLibraryResult result,
+ ParsedLibraryResult parsedLibrary,
List<AnalysisError> errors, {
required bool stopAfterFirst,
}) async {
- for (var unitResult in result.units) {
- var analysisOptions = result.session.analysisContext
+ for (var unitResult in parsedLibrary.units) {
+ var analysisOptions = parsedLibrary.session.analysisContext
.getAnalysisOptionsForFile(unitResult.file);
for (var error in _filterErrors(analysisOptions, errors)) {
- await _fixSingleParseError(unitResult, error);
+ await _fixSingleParseError(parsedLibrary, unitResult, error);
if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
return;
}
@@ -713,17 +719,19 @@
/// Uses the change [builder] and the [fixContext] to create a fix for the
/// given [diagnostic] in the compilation unit associated with the analysis
- /// [result].
+ /// [unitResult].
Future<void> _fixSingleError(
DartFixContext fixContext,
- ResolvedUnitResult result,
+ ResolvedLibraryResult libraryResult,
+ ResolvedUnitResult unitResult,
AnalysisError diagnostic,
) async {
var context = CorrectionProducerContext.createResolved(
+ libraryResult: libraryResult,
+ unitResult: unitResult,
applyingBulkFixes: true,
dartFixContext: fixContext,
diagnostic: diagnostic,
- resolvedResult: result,
selectionOffset: diagnostic.offset,
selectionLength: diagnostic.length,
);
@@ -769,7 +777,7 @@
}
} catch (e, s) {
throw CaughtException.withMessage(
- 'Exception generating fix for $codeName in ${result.path}',
+ 'Exception generating fix for $codeName in ${unitResult.path}',
e,
s,
);
@@ -777,15 +785,17 @@
}
/// Uses the change [builder] to create a fix for the given [diagnostic] in
- /// the compilation unit associated with the analysis [result].
+ /// the compilation unit associated with the analysis [unitResult].
Future<void> _fixSingleParseError(
- ParsedUnitResult result,
+ ParsedLibraryResult libraryResult,
+ ParsedUnitResult unitResult,
AnalysisError diagnostic,
) async {
var context = CorrectionProducerContext.createParsed(
+ libraryResult: libraryResult,
+ unitResult: unitResult,
applyingBulkFixes: true,
diagnostic: diagnostic,
- resolvedResult: result,
selectionOffset: diagnostic.offset,
selectionLength: diagnostic.length,
);
@@ -803,7 +813,7 @@
}
} catch (e, s) {
throw CaughtException.withMessage(
- 'Exception generating fix for $codeName in ${result.path}',
+ 'Exception generating fix for $codeName in ${unitResult.path}',
e,
s,
);
@@ -821,19 +831,19 @@
file_paths.isMacroGenerated(path)) {
continue;
}
- var result =
+ var unitResult =
context.currentSession.getParsedUnit(path) as ParsedUnitResult;
- if (result.errors.isNotEmpty) {
+ if (unitResult.errors.isNotEmpty) {
continue;
}
- var formatResult = generateEditsForFormatting(result);
+ var formatResult = generateEditsForFormatting(unitResult);
await formatResult.mapResult((formatResult) async {
var edits = formatResult ?? [];
if (edits.isNotEmpty) {
await builder.addDartFileEdit(path, (builder) {
for (var edit in edits) {
- var lineInfo = result.lineInfo;
+ var lineInfo = unitResult.lineInfo;
var startOffset =
lineInfo.getOffsetOfLine(edit.range.start.line) +
edit.range.start.character;
@@ -895,10 +905,10 @@
file_paths.isMacroGenerated(path)) {
continue;
}
- var result =
+ var unitResult =
context.currentSession.getParsedUnit(path) as ParsedUnitResult;
- var code = result.content;
- var errors = result.errors;
+ var code = unitResult.content;
+ var errors = unitResult.errors;
// Check if there are scan/parse errors in the file.
var hasParseErrors = errors.any(
(error) =>
@@ -909,7 +919,7 @@
// Cannot process files with parse errors.
continue;
}
- var sorter = ImportOrganizer(code, result.unit, errors);
+ var sorter = ImportOrganizer(code, unitResult.unit, errors);
var edits = sorter.organize();
await builder.addDartFileEdit(path, (builder) {
for (var edit in edits) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart
index 12ca656..f8b9976 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart
@@ -24,7 +24,7 @@
var dartFixContext = context.dartFixContext;
if (dartFixContext == null) return const [];
- var libraryFragment = dartFixContext.resolvedResult.unit.declaredElement!;
+ var libraryFragment = dartFixContext.unitResult.unit.declaredElement!;
var libraryElement = libraryFragment.library;
var nodeName = Name(libraryElement.source.uri, node.name);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart
index b5f9d1b..2afb153 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart
@@ -13,9 +13,7 @@
import 'package:linter/src/lint_names.dart';
class ConvertRelatedToCascade extends ResolvedCorrectionProducer {
- final CorrectionProducerContext _context;
-
- ConvertRelatedToCascade({required super.context}) : _context = context;
+ ConvertRelatedToCascade({required super.context});
@override
CorrectionApplicability get applicability =>
@@ -34,13 +32,13 @@
var block = node.parent;
if (block is! Block) return;
- var errors = _context.dartFixContext?.resolvedResult.errors
+ var errors = unitResult.errors
.where((error) => error.errorCode.name == LintNames.cascade_invocations)
.whereNot(
(error) => error.offset == node.offset && error.length == node.length,
);
- if (errors == null || errors.isEmpty) return;
+ if (errors.isEmpty) return;
var previous = _getPrevious(block, node);
var next = _getNext(block, node);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
index b74c4f1..9fa65bd 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
@@ -375,7 +375,7 @@
}
var name = Name(
- dartFixContext.resolvedResult.libraryElement.source.uri,
+ dartFixContext.unitResult.libraryElement.source.uri,
memberName,
);
var producers = <ResolvedCorrectionProducer>[];
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart
index 86eb9d1..97fd349 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart
@@ -63,10 +63,11 @@
class _UseDifferentDivisionOperator extends ResolvedCorrectionProducer {
@override
final FixKind fixKind;
- final CorrectionProducerContext _context;
- _UseDifferentDivisionOperator({required super.context, required this.fixKind})
- : _context = context;
+ _UseDifferentDivisionOperator({
+ required super.context,
+ required this.fixKind,
+ });
@override
CorrectionApplicability get applicability =>
@@ -102,23 +103,17 @@
}
// All extensions available in the current scope for the left operand that
// define the other division operator.
- var name = Name(
- _context.dartFixContext!.resolvedResult.libraryElement.source.uri,
- otherOperator.lexeme,
- );
+ var name = Name(unitResult.libraryElement.source.uri, otherOperator.lexeme);
var hasNoExtensionWithOtherDivisionOperator =
- await _context.dartFixContext!
- .librariesWithExtensions(otherOperator.lexeme)
- .where((library) {
- return library.exportedExtensions
- .havingMemberWithBaseName(name)
- .applicableTo(
- targetLibrary: libraryElement,
- targetType: leftType!,
- )
- .isNotEmpty;
- })
- .isEmpty;
+ await librariesWithExtensions(otherOperator.lexeme).where((library) {
+ return library.exportedExtensions
+ .havingMemberWithBaseName(name)
+ .applicableTo(
+ targetLibrary: libraryElement,
+ targetType: leftType!,
+ )
+ .isNotEmpty;
+ }).isEmpty;
if (hasNoExtensionWithOtherDivisionOperator && operators.isEmpty) {
return;
}
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 7299977..5efb1de 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -12,6 +12,7 @@
import 'package:analyzer/src/test_utilities/find_element.dart';
import 'package:analyzer/src/test_utilities/find_element2.dart';
import 'package:analyzer/src/test_utilities/find_node.dart';
+import 'package:analyzer/src/utilities/extensions/analysis_session.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:test/test.dart';
@@ -22,6 +23,7 @@
late String testCode;
late ParsedUnitResult testParsedResult;
+ late ResolvedLibraryResult? testLibraryResult;
late ResolvedUnitResult testAnalysisResult;
late CompilationUnit testUnit;
late CompilationUnitElement testUnitElement;
@@ -50,25 +52,28 @@
@override
Future<ParsedUnitResult> getParsedUnit(File file) async {
- var result = await super.getParsedUnit(file);
- testParsedResult = result;
- testCode = result.content;
- testUnit = result.unit;
+ var unitResult = await super.getParsedUnit(file);
+ testParsedResult = unitResult;
+ testCode = unitResult.content;
+ testUnit = unitResult.unit;
findNode = FindNode(testCode, testUnit);
findElement = FindElement(testUnit);
findElement2 = FindElement2(testUnit);
- return result;
+ return unitResult;
}
@override
Future<ResolvedUnitResult> getResolvedUnit(File file) async {
- var result = await super.getResolvedUnit(file);
- testAnalysisResult = result;
- testCode = result.content;
- testUnit = result.unit;
+ var session = await this.session;
+ testLibraryResult = await session.getResolvedContainingLibrary(file.path);
+ var unitResult = testLibraryResult?.unitWithPath(file.path);
+ unitResult ??= await super.getResolvedUnit(file);
+ testAnalysisResult = unitResult;
+ testCode = testAnalysisResult.content;
+ testUnit = testAnalysisResult.unit;
if (verifyNoTestUnitErrors) {
expect(
- result.errors.where((AnalysisError error) {
+ testAnalysisResult.errors.where((AnalysisError error) {
return error.errorCode != WarningCode.DEAD_CODE &&
error.errorCode != WarningCode.UNUSED_CATCH_CLAUSE &&
error.errorCode != WarningCode.UNUSED_CATCH_STACK &&
@@ -85,7 +90,7 @@
findNode = FindNode(testCode, testUnit);
findElement = FindElement(testUnit);
findElement2 = FindElement2(testUnit);
- return result;
+ return testAnalysisResult;
}
Future<void> parseTestCode(String code) async {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
index c292eee..0d541da 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
@@ -211,9 +211,14 @@
}
Future<List<Assist>> _computeAssists() async {
+ var libraryResult = testLibraryResult;
+ if (libraryResult == null) {
+ return const [];
+ }
var context = DartAssistContextImpl(
TestInstrumentationService(),
await workspace,
+ libraryResult,
testAnalysisResult,
_producerGeneratorsForLintRules,
_offset,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index bb1dbc2..990c844 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -258,10 +258,15 @@
/// Computes fixes for the given [error] in [testUnit].
Future<List<Fix>> _computeFixes(AnalysisError error) async {
+ var libraryResult = testLibraryResult;
+ if (libraryResult == null) {
+ return const [];
+ }
var context = DartFixContext(
instrumentationService: TestInstrumentationService(),
workspace: await workspace,
- resolvedResult: testAnalysisResult,
+ libraryResult: libraryResult,
+ unitResult: testAnalysisResult,
error: error,
);
@@ -584,10 +589,15 @@
/// Computes fixes for the given [error] in [testUnit].
Future<List<Fix>> _computeFixes(AnalysisError error) async {
+ var libraryResult = testLibraryResult;
+ if (libraryResult == null) {
+ return const [];
+ }
var context = DartFixContext(
instrumentationService: TestInstrumentationService(),
workspace: await workspace,
- resolvedResult: testAnalysisResult,
+ libraryResult: libraryResult,
+ unitResult: testAnalysisResult,
error: error,
);
return await computeFixes(context);
diff --git a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
index dfdac9f..27c213d 100644
--- a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
+++ b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
@@ -207,6 +207,7 @@
final CorrectionUtils _utils;
final AnalysisSessionHelper _sessionHelper;
+ final ParsedLibraryResult _libraryResult;
final ParsedUnitResult _unitResult;
final DartFixContext? dartFixContext;
@@ -222,6 +223,7 @@
final Token _token;
CorrectionProducerContext._({
+ required ParsedLibraryResult libraryResult,
required ParsedUnitResult unitResult,
required bool applyingBulkFixes,
required this.dartFixContext,
@@ -230,7 +232,8 @@
required Token token,
required int selectionOffset,
required int selectionLength,
- }) : _unitResult = unitResult,
+ }) : _libraryResult = libraryResult,
+ _unitResult = unitResult,
_sessionHelper = AnalysisSessionHelper(unitResult.session),
_utils = CorrectionUtils(unitResult),
_applyingBulkFixes = applyingBulkFixes,
@@ -244,24 +247,26 @@
int get _selectionEnd => _selectionOffset + _selectionLength;
static CorrectionProducerContext createParsed({
- required ParsedUnitResult resolvedResult,
+ required ParsedLibraryResult libraryResult,
+ required ParsedUnitResult unitResult,
bool applyingBulkFixes = false,
DartFixContext? dartFixContext,
Diagnostic? diagnostic,
int selectionOffset = -1,
int selectionLength = 0,
}) {
- var selection = resolvedResult.unit.select(
+ var selection = unitResult.unit.select(
offset: selectionOffset,
length: selectionLength,
);
var node = selection?.coveringNode;
- node ??= resolvedResult.unit;
+ node ??= unitResult.unit;
var token = _tokenAt(node, selectionOffset) ?? node.beginToken;
return CorrectionProducerContext._(
- unitResult: resolvedResult,
+ libraryResult: libraryResult,
+ unitResult: unitResult,
node: node,
token: token,
applyingBulkFixes: applyingBulkFixes,
@@ -273,7 +278,8 @@
}
static CorrectionProducerContext createResolved({
- required ResolvedUnitResult resolvedResult,
+ required ResolvedLibraryResult libraryResult,
+ required ResolvedUnitResult unitResult,
bool applyingBulkFixes = false,
DartFixContext? dartFixContext,
Diagnostic? diagnostic,
@@ -282,13 +288,14 @@
}) {
var selectionEnd = selectionOffset + selectionLength;
var locator = NodeLocator(selectionOffset, selectionEnd);
- var node = locator.searchWithin(resolvedResult.unit);
- node ??= resolvedResult.unit;
+ var node = locator.searchWithin(unitResult.unit);
+ node ??= unitResult.unit;
var token = _tokenAt(node, selectionOffset) ?? node.beginToken;
return CorrectionProducerContext._(
- unitResult: resolvedResult,
+ libraryResult: libraryResult,
+ unitResult: unitResult,
node: node,
token: token,
applyingBulkFixes: applyingBulkFixes,
@@ -336,6 +343,10 @@
/// produced.
LibraryElement get libraryElement => unitResult.libraryElement;
+ @override
+ ResolvedLibraryResult get libraryResult =>
+ super.libraryResult as ResolvedLibraryResult;
+
/// The individual producers generated by this producer.
Future<List<ResolvedCorrectionProducer>> get producers;
@@ -387,6 +398,10 @@
/// produced.
LibraryElement2 get libraryElement2 => unitResult.libraryElement2;
+ @override
+ ResolvedLibraryResult get libraryResult =>
+ super.libraryResult as ResolvedLibraryResult;
+
TypeProvider get typeProvider => unitResult.typeProvider;
/// The type system appropriate to the library in which the correction is
@@ -697,6 +712,8 @@
String get file => _context.path;
+ ParsedLibraryResult get libraryResult => _context._libraryResult;
+
AstNode get node => _context.node;
ResourceProvider get resourceProvider => unitResult.session.resourceProvider;
diff --git a/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart b/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart
index 07ff6b5..5e6347c 100644
--- a/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart
+++ b/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart
@@ -30,8 +30,11 @@
/// being composed.
final InstrumentationService instrumentationService;
- /// The resolution result in which the fix operates.
- final ResolvedUnitResult resolvedResult;
+ /// The library result in which the fix operates.
+ final ResolvedLibraryResult libraryResult;
+
+ /// The unit result in which the fix operates.
+ final ResolvedUnitResult unitResult;
/// The workspace in which the fix contributor operates.
final ChangeWorkspace workspace;
@@ -42,7 +45,8 @@
DartFixContext({
required this.instrumentationService,
required this.workspace,
- required this.resolvedResult,
+ required this.libraryResult,
+ required this.unitResult,
required this.error,
this.autoTriggered = false,
});
@@ -54,20 +58,20 @@
/// For getters and setters the corresponding top-level variable is returned.
Future<Map<LibraryElement, Element>> getTopLevelDeclarations(
String name) async {
- return TopLevelDeclarations(resolvedResult).withName(name);
+ return TopLevelDeclarations(unitResult).withName(name);
}
/// Returns libraries with extensions that declare non-static public
/// extension members with the [memberName].
// TODO(srawlins): The documentation above is wrong; `memberName` is unused.
Stream<LibraryElement> librariesWithExtensions(String memberName) async* {
- var analysisContext = resolvedResult.session.analysisContext;
+ var analysisContext = unitResult.session.analysisContext;
var analysisDriver = (analysisContext as DriverBasedAnalysisContext).driver;
await analysisDriver.discoverAvailableFiles();
var fsState = analysisDriver.fsState;
var filter = FileStateFilter(
- fsState.getFileForPath(resolvedResult.path),
+ fsState.getFileForPath(unitResult.path),
);
for (var file in fsState.knownFiles.toList()) {
@@ -88,13 +92,13 @@
/// extension members with the [memberName].
// TODO(srawlins): The documentation above is wrong; `memberName` is unused.
Stream<LibraryElement2> librariesWithExtensions2(String memberName) async* {
- var analysisContext = resolvedResult.session.analysisContext;
+ var analysisContext = unitResult.session.analysisContext;
var analysisDriver = (analysisContext as DriverBasedAnalysisContext).driver;
await analysisDriver.discoverAvailableFiles();
var fsState = analysisDriver.fsState;
var filter = FileStateFilter(
- fsState.getFileForPath(resolvedResult.path),
+ fsState.getFileForPath(unitResult.path),
);
for (var file in fsState.knownFiles.toList()) {
diff --git a/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart b/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart
index 2a5fbbe..142546e 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart
@@ -20,7 +20,7 @@
Future<List<Fix>> compute() async {
var error = _fixContext.error;
- var errors = _fixContext.resolvedResult.errors
+ var errors = _fixContext.unitResult.errors
.where((e) => error.errorCode.name == e.errorCode.name);
if (errors.length < 2) {
return const <Fix>[];
@@ -41,7 +41,8 @@
var fixContext = DartFixContext(
instrumentationService: _fixContext.instrumentationService,
workspace: _fixContext.workspace,
- resolvedResult: _fixContext.resolvedResult,
+ libraryResult: _fixContext.libraryResult,
+ unitResult: _fixContext.unitResult,
error: error,
);
fixState = await _fixError(fixContext, fixState, generator, error);
@@ -56,7 +57,8 @@
var fixContext = DartFixContext(
instrumentationService: _fixContext.instrumentationService,
workspace: _fixContext.workspace,
- resolvedResult: _fixContext.resolvedResult,
+ libraryResult: _fixContext.libraryResult,
+ unitResult: _fixContext.unitResult,
error: error,
);
fixState = await _fixError(fixContext, fixState, generator, error);
@@ -85,7 +87,8 @@
applyingBulkFixes: true,
dartFixContext: fixContext,
diagnostic: diagnostic,
- resolvedResult: fixContext.resolvedResult,
+ libraryResult: fixContext.libraryResult,
+ unitResult: fixContext.unitResult,
selectionOffset: diagnostic.offset,
selectionLength: diagnostic.length,
);
diff --git a/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart b/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
index 2a20898..4906559 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
@@ -29,7 +29,7 @@
FixProcessor(this._fixContext);
Future<List<Fix>> compute() async {
- if (isMacroGenerated(_fixContext.resolvedResult.file.path)) {
+ if (isMacroGenerated(_fixContext.unitResult.file.path)) {
return _fixes;
}
await _addFromProducers();
@@ -55,9 +55,10 @@
Future<void> _addFromProducers() async {
var error = _fixContext.error;
var context = CorrectionProducerContext.createResolved(
+ libraryResult: _fixContext.libraryResult,
+ unitResult: _fixContext.unitResult,
dartFixContext: _fixContext,
diagnostic: error,
- resolvedResult: _fixContext.resolvedResult,
selectionOffset: _fixContext.error.offset,
selectionLength: _fixContext.error.length,
);
diff --git a/pkg/analysis_server_plugin/lib/src/plugin_server.dart b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
index 1a8bf75..77ad2ac 100644
--- a/pkg/analysis_server_plugin/lib/src/plugin_server.dart
+++ b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
@@ -116,8 +116,8 @@
if (libraryResult is! ResolvedLibraryResult) {
return protocol.EditGetFixesResult(const []);
}
- var result = await analysisContext.currentSession.getResolvedUnit(path);
- if (result is! ResolvedUnitResult) {
+ var unitResult = libraryResult.unitWithPath(path);
+ if (unitResult is! ResolvedUnitResult) {
return protocol.EditGetFixesResult(const []);
}
@@ -133,7 +133,8 @@
// implementations get InstrumentationService from AnalysisServer.
instrumentationService: InstrumentationService.NULL_SERVICE,
workspace: workspace,
- resolvedResult: result,
+ libraryResult: libraryResult,
+ unitResult: unitResult,
error: error,
);
@@ -256,27 +257,27 @@
if (libraryResult is! ResolvedLibraryResult) {
return [];
}
- var result = await analysisContext.currentSession.getResolvedUnit(path);
- if (result is! ResolvedUnitResult) {
+ var unitResult = await analysisContext.currentSession.getResolvedUnit(path);
+ if (unitResult is! ResolvedUnitResult) {
return [];
}
var listener = RecordingErrorListener();
- var errorReporter =
- ErrorReporter(listener, result.libraryElement2.firstFragment.source);
+ var errorReporter = ErrorReporter(
+ listener, unitResult.libraryElement2.firstFragment.source);
var currentUnit = LintRuleUnitContext(
- file: result.file,
- content: result.content,
+ file: unitResult.file,
+ content: unitResult.content,
errorReporter: errorReporter,
- unit: result.unit,
+ unit: unitResult.unit,
);
var allUnits = [
- for (var unit in libraryResult.units)
+ for (var unitResult in libraryResult.units)
LintRuleUnitContext(
- file: unit.file,
- content: unit.content,
+ file: unitResult.file,
+ content: unitResult.content,
errorReporter: errorReporter,
- unit: unit.unit,
+ unit: unitResult.unit,
),
];