Elements. Migrate AddLate.
Change-Id: I26035d05790b0115f8233a3901bc9cbd31db220b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/386976
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/analyzer_use_new_elements.txt b/pkg/analysis_server/analyzer_use_new_elements.txt
index 034311b..0d58fae 100644
--- a/pkg/analysis_server/analyzer_use_new_elements.txt
+++ b/pkg/analysis_server/analyzer_use_new_elements.txt
@@ -10,3 +10,7 @@
lib/src/services/correction/dart/add_eol_at_end_of_file.dart
lib/src/services/correction/dart/add_explicit_call.dart
lib/src/services/correction/dart/add_explicit_cast.dart
+lib/src/services/correction/dart/add_field_formal_parameters.dart
+lib/src/services/correction/dart/add_key_to_constructors.dart
+lib/src/services/correction/dart/add_late.dart
+lib/src/services/correction/dart/add_leading_newline_to_string.dart
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
index 5ce3b54..9c7814f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
@@ -6,7 +6,7 @@
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/source/source.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -58,18 +58,18 @@
}
}
} else if (node is SimpleIdentifier) {
- var getter = node.writeOrReadElement;
- if (getter is PropertyAccessorElement &&
- getter.isGetter &&
+ var getter = node.writeOrReadElement2;
+ if (getter is GetterElement &&
getter.isSynthetic &&
- getter.enclosingElement3 is InterfaceElement) {
- var variableElement = getter.variable2;
+ getter.enclosingElement2 is InterfaceElement2) {
+ var variableElement = getter.variable3;
if (variableElement != null &&
!variableElement.isSynthetic &&
!variableElement.isLate &&
variableElement.setter == null) {
+ var variableFragment = variableElement.firstFragment!;
var declarationResult =
- await sessionHelper.getElementDeclaration(variableElement);
+ await sessionHelper.getElementDeclaration2(variableFragment);
if (declarationResult == null) {
return;
}
@@ -83,7 +83,7 @@
keywordToken != null &&
keywordToken.keyword == Keyword.FINAL) {
await _insertAt(builder, keywordToken.offset,
- source: declarationResult.element.source);
+ source: variableFragment.libraryFragment.source);
}
}
}
diff --git a/pkg/analyzer/lib/src/dart/ast/extensions.dart b/pkg/analyzer/lib/src/dart/ast/extensions.dart
index 989b146..9cf1688 100644
--- a/pkg/analyzer/lib/src/dart/ast/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/ast/extensions.dart
@@ -5,6 +5,7 @@
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';
@@ -57,6 +58,29 @@
}
// TODO(scheglov): https://github.com/dart-lang/sdk/issues/43608
+Element2? _writeElement2(AstNode node) {
+ var parent = node.parent;
+
+ if (parent is AssignmentExpression && parent.leftHandSide == node) {
+ return parent.writeElement2;
+ }
+ if (parent is PostfixExpression && parent.operand == node) {
+ return parent.writeElement2;
+ }
+ if (parent is PrefixExpression && parent.operand == node) {
+ return parent.writeElement2;
+ }
+
+ if (parent is PrefixedIdentifier && parent.identifier == node) {
+ return _writeElement2(parent);
+ }
+ if (parent is PropertyAccess && parent.propertyName == node) {
+ return _writeElement2(parent);
+ }
+ return null;
+}
+
+// TODO(scheglov): https://github.com/dart-lang/sdk/issues/43608
DartType? _writeType(AstNode node) {
var parent = node.parent;
@@ -211,6 +235,10 @@
return _writeElement(this) ?? staticElement;
}
+ Element2? get writeOrReadElement2 {
+ return _writeElement2(this) ?? element;
+ }
+
DartType? get writeOrReadType {
return _writeType(this) ?? staticType;
}