Skip to content

Commit

Permalink
Version 3.8.0-101.0.dev
Browse files Browse the repository at this point in the history
Merge 56f8296 into dev
  • Loading branch information
Dart CI committed Feb 14, 2025
2 parents f462db0 + 56f8296 commit 33a9981
Show file tree
Hide file tree
Showing 7 changed files with 170 additions and 267 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ main() {

#### Analyzer

- Add a new 'Go to imports' command to find the import directives that export a
declaration.
- Assists and quick fixes that add an import now consider the
`prefer_relative_imports` and `always_use_package_imports` lint rules.
- Add a new fix that converts a `~/` operation into `/`, when the `~/`
Expand All @@ -93,6 +95,8 @@ main() {
and with a `Flexible` widget.
- Offer an assist to "inline" an else-block's inner if-statement with the
else-block to read `else if`.
- Add a fix to `use_decorated_box` by swapping the `Container` with
`ColoredBox` as suggested by the lint.
- Add an additional fix to import an unknown prefixed identifier by updating
the `show` combinator on an existing import.
- Add a fix to import an unknown prefixed identifier by adding an
Expand Down
5 changes: 1 addition & 4 deletions pkg/analysis_server/lib/src/cider/rename.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,7 @@ class CanRenameResponse {
getElementKindName(newNameMember),
newName,
);
result.addError(
message,
newLocation_fromElement(newNameMember.asElement),
);
result.addError(message, newLocation_fromElement2(newNameMember));
}
}

Expand Down
159 changes: 22 additions & 137 deletions pkg/analysis_server/lib/src/protocol_server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +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.

// ignore_for_file: analyzer_use_new_elements

import 'package:analysis_server/plugin/protocol/protocol_dart.dart';
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/computer/computer_color.dart';
Expand All @@ -12,8 +10,6 @@ import 'package:analysis_server/src/services/search/search_engine.dart'
import 'package:analysis_server/src/utilities/extensions/element.dart';
import 'package:analyzer/dart/analysis/results.dart' as engine;
import 'package:analyzer/dart/ast/ast.dart' as engine;
import 'package:analyzer/dart/ast/token.dart' as engine;
import 'package:analyzer/dart/element/element.dart' as engine;
import 'package:analyzer/dart/element/element2.dart' as engine;
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/diagnostic/diagnostic.dart' as engine;
Expand All @@ -22,7 +18,6 @@ import 'package:analyzer/source/error_processor.dart';
import 'package:analyzer/source/source.dart' as engine;
import 'package:analyzer/source/source_range.dart' as engine;
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';

export 'package:analysis_server/plugin/protocol/protocol_dart.dart';
Expand All @@ -38,16 +33,6 @@ List<AnalysisError> doAnalysisError_listFromEngine(
return mapEngineErrors(result, result.errors, newAnalysisError_fromEngine);
}

/// Adds [edit] to the file containing the given [element].
void doSourceChange_addElementEdit(
SourceChange change,
engine.Element element,
SourceEdit edit,
) {
var source = element.source!;
doSourceChange_addSourceEdit(change, source, edit);
}

/// Adds [edit] to the file containing the given [fragment].
void doSourceChange_addFragmentEdit(
SourceChange change,
Expand All @@ -69,14 +54,6 @@ void doSourceChange_addSourceEdit(
change.addEdit(file, isNewFile ? -1 : 0, edit);
}

String? getAliasedTypeString(engine.Element element) {
if (element is engine.TypeAliasElement) {
var aliasedType = element.aliasedType;
return aliasedType.getDisplayString();
}
return null;
}

String? getAliasedTypeString2(engine.Element2 element) {
if (element is engine.TypeAliasElement2) {
var aliasedType = element.aliasedType;
Expand All @@ -85,25 +62,6 @@ String? getAliasedTypeString2(engine.Element2 element) {
return null;
}

/// Returns a color hex code (in the form '#FFFFFF') if [element] represents
/// a color.
String? getColorHexString(engine.Element? element) {
if (element is engine.VariableElement) {
var dartValue = element.computeConstantValue();
if (dartValue != null) {
var color = ColorComputer.getColorForObject(dartValue);
if (color != null) {
return '#'
'${color.red.toRadixString(16).padLeft(2, '0')}'
'${color.green.toRadixString(16).padLeft(2, '0')}'
'${color.blue.toRadixString(16).padLeft(2, '0')}'
.toUpperCase();
}
}
}
return null;
}

/// Returns a color hex code (in the form '#FFFFFF') if [element] represents
/// a color.
String? getColorHexString2(engine.Element2? element) {
Expand All @@ -123,26 +81,6 @@ String? getColorHexString2(engine.Element2? element) {
return null;
}

String? getReturnTypeString(engine.Element element) {
if (element is engine.ExecutableElement) {
if (element.kind == engine.ElementKind.SETTER) {
return null;
} else {
return element.returnType.getDisplayString();
}
} else if (element is engine.VariableElement) {
var type = element.type;
return type.getDisplayString();
} else if (element is engine.TypeAliasElement) {
var aliasedType = element.aliasedType;
if (aliasedType is FunctionType) {
var returnType = aliasedType.returnType;
return returnType.getDisplayString();
}
}
return null;
}

String? getReturnTypeString2(engine.Element2 element) {
if (element is engine.ExecutableElement2) {
if (element.kind == engine.ElementKind.SETTER) {
Expand Down Expand Up @@ -294,23 +232,6 @@ DiagnosticMessage newDiagnosticMessage(
);
}

/// Create a Location based on an [engine.Element].
Location? newLocation_fromElement(engine.Element? element) {
if (element == null || element.source == null) {
return null;
}
var offset = element.nameOffset;
var length = element.nameLength;
if (element is engine.CompilationUnitElement ||
(element is engine.LibraryElement && offset < 0)) {
offset = 0;
length = 0;
}
var unitElement = _getUnitElement(element);
var range = engine.SourceRange(offset, length);
return _locationForArgs(unitElement, range);
}

/// Create a Location based on an [engine.Element2].
Location? newLocation_fromElement2(engine.Element2? element) {
if (element == null) {
Expand Down Expand Up @@ -351,33 +272,24 @@ Location? newLocation_fromFragment(engine.Fragment? fragment) {

/// Create a Location based on an [engine.SearchMatch].
Location newLocation_fromMatch(engine.SearchMatch match) {
var unitElement = _getUnitElement(match.element2.asElement!);
return _locationForArgs(unitElement, match.sourceRange);
var libraryFragment = _getUnitElement(match.element2);
return _locationForArgs(libraryFragment, match.sourceRange);
}

/// Create a Location based on an [engine.AstNode].
Location newLocation_fromNode(engine.AstNode node) {
var unit = node.thisOrAncestorOfType<engine.CompilationUnit>()!;
var unitElement = unit.declaredElement!;
var libraryFragment = unit.declaredFragment!;
var range = engine.SourceRange(node.offset, node.length);
return _locationForArgs(unitElement, range);
}

/// Create a Location based on an [engine.AstNode].
Location newLocation_fromToken({
required engine.CompilationUnitElement unitElement,
required engine.Token token,
}) {
var range = engine.SourceRange(token.offset, token.length);
return _locationForArgs(unitElement, range);
return _locationForArgs(libraryFragment, range);
}

/// Create a Location based on an [engine.CompilationUnit].
Location newLocation_fromUnit(
engine.CompilationUnit unit,
engine.SourceRange range,
) {
return _locationForArgs(unit.declaredElement!, range);
return _locationForArgs(unit.declaredFragment!, range);
}

/// Construct based on an element from the analyzer engine.
Expand All @@ -391,7 +303,7 @@ OverriddenMember newOverriddenMember_fromEngine(engine.Element2 member) {
SearchResult newSearchResult_fromMatch(engine.SearchMatch match) {
var kind = newSearchResultKind_fromEngine(match.kind);
var location = newLocation_fromMatch(match);
var path = _computePath(match.element2.asElement!);
var path = _computePath(match.element2);
return SearchResult(location, kind, !match.isResolved, path);
}

Expand Down Expand Up @@ -428,61 +340,34 @@ SourceEdit newSourceEdit_range(
return SourceEdit(range.offset, range.length, replacement, id: id);
}

List<Element> _computePath(engine.Element element) {
List<Element> _computePath(engine.Element2 element) {
var path = <Element>[];

if (element is engine.PrefixElement) {
element = element.enclosingElement3;
}

var element2 = element.asElement2;
if (element2 != null) {
for (var fragment in element2.firstFragment.withAncestors) {
if (fragment case engine.Element e) {
if (fragment is engine.LibraryFragment) {
path.add(
convertLibraryFragment(fragment as CompilationUnitElementImpl),
);
}
path.add(convertElement(e.asElement2!));
}
for (var fragment in element.firstFragment.withAncestors) {
if (fragment is engine.LibraryFragment) {
path.add(convertLibraryFragment(fragment as CompilationUnitElementImpl));
}
path.add(convertElement(fragment.element));
}

return path;
}

engine.CompilationUnitElement _getUnitElement(engine.Element element) {
if (element is engine.CompilationUnitElement) {
return element;
}

if (element.enclosingElement3 case engine.LibraryElement enclosing) {
return enclosing.definingCompilationUnit;
engine.LibraryFragment _getUnitElement(engine.Element2 element) {
if (element is engine.LibraryElement2) {
return element.firstFragment;
}

if (element is engine.LibraryElement) {
return element.definingCompilationUnit;
}

var element2 = element.asElement2;
if (element2 != null) {
for (var fragment in element2.firstFragment.withAncestors) {
if (fragment case engine.CompilationUnitElement unit) {
return unit;
}
}
var fragment = element.firstFragment.libraryFragment;
if (fragment == null) {
throw StateError('No unit: $element');
}

throw StateError('No unit: $element');
return fragment;
}

/// Creates a new [Location].
/// Returns a new [Location] based on a source [range] with a [libraryFragment].
Location _locationForArgs(
engine.CompilationUnitElement unitElement,
engine.LibraryFragment libraryFragment,
engine.SourceRange range,
) {
var lineInfo = unitElement.lineInfo;
var lineInfo = libraryFragment.lineInfo;

var startLocation = lineInfo.getLocation(range.offset);
var endLocation = lineInfo.getLocation(range.end);
Expand All @@ -493,7 +378,7 @@ Location _locationForArgs(
var endColumn = endLocation.columnNumber;

return Location(
unitElement.source.fullName,
libraryFragment.source.fullName,
range.offset,
range.length,
startLine,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,6 @@ Future<void> addLibraryImports(
return;
}

// TODO(brianwilkerson): Use `targetLibrary2` everywhere below and rename it
// to `targetLibrary`.
var targetLibrary = targetLibrary2.asElement;
var libUtils = CorrectionUtils(resolveResult);
var eol = libUtils.endOfLine;
// Prepare information about existing imports.
Expand Down Expand Up @@ -110,9 +107,9 @@ Future<void> addLibraryImports(
}
if (importUri.compareTo(existingImport.uri) < 0) {
var importCode = 'import $quote$importUri$quote;$eol';
doSourceChange_addElementEdit(
doSourceChange_addFragmentEdit(
change,
targetLibrary,
targetLibrary2.firstFragment,
SourceEdit(existingImport.offset, 0, importCode),
);
inserted = true;
Expand All @@ -124,9 +121,9 @@ Future<void> addLibraryImports(
if (isPackage && isFirstPackage && isAfterDart) {
importCode = eol + importCode;
}
doSourceChange_addElementEdit(
doSourceChange_addFragmentEdit(
change,
targetLibrary,
targetLibrary2.firstFragment,
SourceEdit(importDirectives.last.end, 0, importCode),
);
}
Expand All @@ -143,9 +140,9 @@ Future<void> addLibraryImports(
for (var importUri in uriList) {
var importCode = '${prefix}import $quote$importUri$quote;';
prefix = eol;
doSourceChange_addElementEdit(
doSourceChange_addFragmentEdit(
change,
targetLibrary,
targetLibrary2.firstFragment,
SourceEdit(libraryDirective.end, 0, importCode),
);
}
Expand Down Expand Up @@ -208,9 +205,9 @@ Future<void> addLibraryImports(
if (i == uriList.length - 1 && insertEmptyLineAfter) {
importCode = '$importCode$eol';
}
doSourceChange_addElementEdit(
doSourceChange_addFragmentEdit(
change,
targetLibrary,
targetLibrary2.firstFragment,
SourceEdit(offset, 0, importCode),
);
}
Expand Down Expand Up @@ -493,9 +490,9 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
}
// add replace edit
var edit = newSourceEdit_range(range, invocationSource);
doSourceChange_addElementEdit(
doSourceChange_addFragmentEdit(
change,
_resolveResult.unit.declaredElement!,
_resolveResult.unit.declaredFragment!,
edit,
);
}
Expand Down Expand Up @@ -579,9 +576,9 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
if (declarationSource != null) {
var offset = _parentMember!.end;
var edit = SourceEdit(offset, 0, '$eol$eol$prefix$declarationSource');
doSourceChange_addElementEdit(
doSourceChange_addFragmentEdit(
change,
_resolveResult.unit.declaredElement!,
_resolveResult.unit.declaredFragment!,
edit,
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,11 @@ class RenameProcessor {
required String code,
}) {
var edit = SourceEdit(offset, length, code);
doSourceChange_addElementEdit(change, referenceElement, edit);
doSourceChange_addFragmentEdit(
change,
referenceElement.asElement2!.firstFragment,
edit,
);
}

/// Add an edit that replaces the specified region with [code].
Expand Down
Loading

0 comments on commit 33a9981

Please sign in to comment.