Skip to content

Commit

Permalink
Version 3.7.0-32.0.dev
Browse files Browse the repository at this point in the history
Merge 27ff526 into dev
  • Loading branch information
Dart CI committed Oct 16, 2024
2 parents b6e7fbd + 27ff526 commit 76824a2
Show file tree
Hide file tree
Showing 58 changed files with 840 additions and 257 deletions.
2 changes: 2 additions & 0 deletions pkg/analysis_server/analyzer_use_new_elements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ lib/src/lsp/handlers/code_actions/abstract_code_actions_producer.dart
lib/src/lsp/handlers/code_actions/analysis_options.dart
lib/src/lsp/handlers/code_actions/plugins.dart
lib/src/lsp/handlers/code_actions/pubspec.dart
lib/src/lsp/handlers/code_lens/abstract_code_lens_provider.dart
lib/src/lsp/handlers/code_lens/augmentations.dart
lib/src/lsp/handlers/commands/fix_all.dart
lib/src/lsp/handlers/commands/fix_all_in_workspace.dart
lib/src/lsp/handlers/commands/log_action.dart
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis_server/lib/src/cider/rename.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import 'package:analysis_server/src/services/refactoring/legacy/naming_conventio
import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
import 'package:analysis_server/src/services/search/hierarchy.dart';
import 'package:analysis_server/src/utilities/change_builder.dart';
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/source/line_info.dart';
Expand All @@ -18,6 +17,7 @@ import 'package:analyzer/src/dart/micro/resolve_file.dart';
import 'package:analyzer/src/dart/micro/utils.dart';
import 'package:analyzer/src/generated/java_core.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';

class CanRenameResponse {
final LineInfo lineInfo;
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis_server/lib/src/computer/computer_color.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand All @@ -11,6 +10,7 @@ import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/constant/value.dart' show GenericState;
import 'package:analyzer/src/lint/linter.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';
import 'package:collection/collection.dart';
import 'package:path/path.dart' as path;

Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis_server/lib/src/computer/computer_outline.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
// BSD-style license that can be found in the LICENSE file.

import 'package:analysis_server/src/collections.dart';
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element2.dart' as engine;
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';

/// A computer for [CompilationUnit] outline.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

import 'package:analysis_server/src/computer/computer_outline.dart';
import 'package:analysis_server/src/protocol_server.dart' as protocol;
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';

/// Computer for Flutter specific outlines.
class FlutterOutlineComputer {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ import 'package:analysis_server/src/lsp/constants.dart';
import 'package:analysis_server/src/lsp/error_or.dart';
import 'package:analysis_server/src/lsp/handlers/handlers.dart';
import 'package:analysis_server/src/lsp/mapping.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/dart/element/element2.dart';

/// A base class for providers that can contribute CodeLenses.
///
Expand All @@ -29,47 +28,44 @@ abstract class AbstractCodeLensProvider
bool clientSupportsGoToLocationCommand(LspClientCapabilities capabilities) =>
capabilities.supportedCommands.contains(ClientCommands.goToLocation);

/// Attempt to compute a [Location] to the declaration of [element].
/// Attempt to compute a [Location] to [fragment].
///
/// If for any reason the location cannot be computed, returns `null`.
Location? getLocation(Element element, Map<String, LineInfo?> lineInfoCache) {
var source = element.source;
if (source == null) {
Location? getLocation(Fragment fragment) {
// We can't produce a location to a name if there isn't one.
var nameOffset = fragment.nameOffset;
var nameLength = fragment.element.displayName.length;
if (nameOffset == null || nameOffset == -1) {
return null;
}

// Map the source onto a URI and only return this item if the client
// can handle the URI.
var source = fragment.libraryFragment.source;
var uri = server.uriConverter.toClientUri(source.fullName);
if (!server.uriConverter.supportedSchemes.contains(uri.scheme)) {
return null;
}

var lineInfo = lineInfoCache.putIfAbsent(
source.fullName, () => server.getLineInfo(source.fullName));
if (lineInfo == null) {
return null;
}

var lineInfo = fragment.libraryFragment.lineInfo;
return Location(
uri: uri,
range: toRange(lineInfo, element.nameOffset, element.nameLength),
range: toRange(lineInfo, nameOffset, nameLength),
);
}

/// Builds a [Command] that with the text [title] that navigate to the
/// declaration of [element].
/// [fragment].
///
/// If for any reason the location cannot be computed, returns `null`.
Command? getNavigationCommand(
LspClientCapabilities clientCapabilities,
String title,
Element element,
Map<String, LineInfo?> lineInfoCache,
Fragment fragment,
) {
assert(clientSupportsGoToLocationCommand(clientCapabilities));

var location = getLocation(element, lineInfoCache);
var location = getLocation(fragment);
if (location == null) {
return null;
}
Expand All @@ -85,7 +81,6 @@ abstract class AbstractCodeLensProvider
CodeLensParams params,
MessageInfo message,
CancellationToken token,
Map<String, LineInfo?> lineInfoCache,
);

bool isAvailable(
Expand Down
114 changes: 33 additions & 81 deletions pkg/analysis_server/lib/src/lsp/handlers/code_lens/augmentations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,8 @@ import 'package:analysis_server/src/lsp/handlers/code_lens/abstract_code_lens_pr
import 'package:analysis_server/src/lsp/handlers/handlers.dart';
import 'package:analysis_server/src/lsp/mapping.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/visitor.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/src/util/performance/operation_performance.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';

class AugmentationCodeLensProvider extends AbstractCodeLensProvider {
AugmentationCodeLensProvider(super.server);
Expand All @@ -28,7 +25,6 @@ class AugmentationCodeLensProvider extends AbstractCodeLensProvider {
CodeLensParams params,
MessageInfo message,
CancellationToken token,
Map<String, LineInfo?> lineInfoCache,
) async {
var clientCapabilities = message.clientCapabilities;
if (clientCapabilities == null) {
Expand All @@ -44,8 +40,8 @@ class AugmentationCodeLensProvider extends AbstractCodeLensProvider {
return await unit.mapResult((result) {
return performance.runAsync(
'_getCodeLenses',
(performance) => _getCodeLenses(
clientCapabilities, result, token, performance, lineInfoCache),
(performance) =>
_getCodeLenses(clientCapabilities, result, token, performance),
);
});
}
Expand All @@ -64,94 +60,50 @@ class AugmentationCodeLensProvider extends AbstractCodeLensProvider {
ResolvedUnitResult result,
CancellationToken token,
OperationPerformanceImpl performance,
Map<String, LineInfo?> lineInfoCache,
) async {
var lineInfo = result.lineInfo;
var codeLenses = <CodeLens>[];

/// Helper to add a CodeLens at [declaration] to [target] for [title].
void addCodeLens(String title, Element declaration, Element target) {
var command = getNavigationCommand(
clientCapabilities, title, target, lineInfoCache);
if (command != null && declaration.nameOffset != -1) {
/// Helper to add a CodeLens at [thisFragment] to [targetFragment] with
/// the text [title].
void addCodeLens(
String title,
Fragment thisFragment,
Fragment targetFragment,
) {
var command =
getNavigationCommand(clientCapabilities, title, targetFragment);
var nameOffset = thisFragment.nameOffset;
var nameLength = thisFragment.element.displayName.length;
if (command != null && nameOffset != null && nameOffset != -1) {
var range = toRange(
lineInfo,
declaration.nameOffset,
declaration.nameLength,
result.lineInfo,
nameOffset,
nameLength,
);
codeLenses.add(CodeLens(range: range, command: command));
}
}

var computer = _AugmentationComputer(result);
if (codeLens.augmented) {
for (var MapEntry(key: declaration, value: augmentated)
in computer.augmenteds.entries) {
addCodeLens('Go to Augmented', declaration, augmentated);
// Helper to add all CodeLenses for a [fragment] and child fragments
// recursively.
void addCodeLenses(Fragment fragment) {
var previousFragment = fragment.previousFragment;
var nextFragment = fragment.nextFragment;
if (codeLens.augmented && previousFragment != null) {
addCodeLens('Go to Augmented', fragment, previousFragment);
}
}
if (codeLens.augmentation) {
for (var MapEntry(key: declaration, value: augmentation)
in computer.augmentations.entries) {
addCodeLens('Go to Augmentation', declaration, augmentation);
}
}

return success(codeLenses);
}
}

class _AugmentationComputer {
/// A mapping of declarations to their augmentations.
final Map<Element, Element> augmentations = {};

/// A mapping of augmentations to their declarations.
final Map<Element, Element> augmenteds = {};

final ResolvedUnitResult result;

_AugmentationComputer(this.result) {
result.unit.declaredElement?.accept(_AugmentationVisitor(this));
}

void recordAugmentation(Element declaration, Element augmentation) {
augmentations[declaration] = augmentation;
}

void recordAugmented(Element declaration, Element augmented) {
augmenteds[declaration] = augmented;
}
}

/// Visits an AST and records mappings from augmentations to the declarations
/// they augment, and from declarations to their augmentations.
class _AugmentationVisitor extends GeneralizingElementVisitor<void> {
final _AugmentationComputer _computer;

_AugmentationVisitor(this._computer);

@override
void visitElement(Element element) {
assert(element.source?.fullName == _computer.result.path);
assert(element == element.declaration);

if (!element.isSynthetic) {
var agumentation = element.augmentation;
if (agumentation != null) {
_computer.recordAugmentation(element, agumentation);
if (codeLens.augmentation && nextFragment != null) {
addCodeLens('Go to Augmentation', fragment, nextFragment);
}

var augmented = switch (element) {
ExecutableElement element => element.augmentationTarget,
InstanceElement element => element.augmentationTarget,
PropertyInducingElement element => element.augmentationTarget,
_ => null,
};
if (augmented != null) {
_computer.recordAugmented(element, augmented);
for (var fragment in fragment.children3) {
addCodeLenses(fragment);
}
}

super.visitElement(element);
// Add fragments starting at the library.
addCodeLenses(result.libraryFragment);

return success(codeLenses);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import 'package:analysis_server/src/lsp/progress.dart';
import 'package:analysis_server/src/lsp/temporary_overlay_operation.dart';
import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
import 'package:analysis_server/src/utilities/source_change_merger.dart';
import 'package:analyzer/dart/analysis/results.dart';

class FixAllCommandHandler extends SimpleEditCommandHandler
with LspHandlerHelperMixin {
Expand Down Expand Up @@ -101,14 +100,10 @@ class _FixAllOperation extends TemporaryOverlayOperation
}) : super(server);

Future<ErrorOr<WorkspaceEdit?>> computeEdits() async {
return await lockRequestsWithTemporaryOverlays(() async {
var result = await requireResolvedUnit(path);
return result.mapResult(_computeEditsImpl);
});
return await lockRequestsWithTemporaryOverlays(_computeEditsImpl);
}

Future<ErrorOr<WorkspaceEdit?>> _computeEditsImpl(
ResolvedUnitResult result) async {
Future<ErrorOr<WorkspaceEdit?>> _computeEditsImpl() async {
if (cancellationToken.isCancellationRequested) {
return error(ErrorCodes.RequestCancelled, 'Request was cancelled');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import 'package:analysis_server/src/lsp/handlers/code_lens/abstract_code_lens_pr
import 'package:analysis_server/src/lsp/handlers/code_lens/augmentations.dart';
import 'package:analysis_server/src/lsp/handlers/handlers.dart';
import 'package:analysis_server/src/lsp/registration/feature_registration.dart';
import 'package:analyzer/source/line_info.dart';

class CodeLensHandler
extends SharedMessageHandler<CodeLensParams, List<CodeLens>> {
Expand Down Expand Up @@ -40,12 +39,10 @@ class CodeLensHandler
}

// Ask all providers to compute their CodeLenses.
var lineInfoCache = <String, LineInfo?>{};
var providerResults = await Future.wait(
codeLensProviders
.where((provider) => provider.isAvailable(clientCapabilities, params))
.map((provider) =>
provider.handle(params, message, token, lineInfoCache)),
.map((provider) => provider.handle(params, message, token)),
);

// Merge the results, but if any errors, propogate the first error.
Expand Down
2 changes: 1 addition & 1 deletion pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import 'package:analysis_server/src/server/error_notifier.dart';
import 'package:analysis_server/src/server/message_scheduler.dart';
import 'package:analysis_server/src/server/performance.dart';
import 'package:analysis_server/src/services/user_prompts/dart_fix_prompt_manager.dart';
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analysis_server/src/utilities/process.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/analysis/session.dart';
Expand All @@ -43,6 +42,7 @@ import 'package:analyzer/src/dart/analysis/status.dart' as analysis;
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:analyzer/src/util/performance/operation_performance.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
import 'package:analyzer_plugin/src/protocol/protocol_internal.dart' as plugin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import 'package:analysis_server/src/services/completion/dart/completion_state.da
import 'package:analysis_server/src/services/completion/dart/not_imported_completion_pass.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_collector.dart';
import 'package:analysis_server/src/services/completion/dart/visibility_tracker.dart';
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
Expand All @@ -22,6 +21,7 @@ import 'package:analyzer/src/dart/element/type_algebra.dart';
import 'package:analyzer/src/dart/resolver/applicable_extensions.dart';
import 'package:analyzer/src/dart/resolver/scope.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';
import 'package:analyzer/src/workspace/pub.dart';

/// A helper class that produces candidate suggestions for all of the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import 'package:analysis_server/src/services/completion/dart/utilities.dart';
import 'package:analysis_server/src/services/completion/dart/visibility_tracker.dart';
import 'package:analysis_server/src/utilities/extensions/ast.dart';
import 'package:analysis_server/src/utilities/extensions/completion_request.dart';
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analysis_server/src/utilities/extensions/object.dart';
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
Expand All @@ -30,6 +29,7 @@ import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/utilities/extensions/ast.dart';
import 'package:analyzer/src/utilities/extensions/flutter.dart';

/// A completion pass that will create candidate suggestions based on the
/// elements in scope in the library containing the selection, as well as
Expand Down
Loading

0 comments on commit 76824a2

Please sign in to comment.