Deprecate Directive.element, use element2.

Change-Id: Ic18f9c579bcec0b6406070da04b476be2582a504
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/252721
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/status/ast_writer.dart b/pkg/analysis_server/lib/src/status/ast_writer.dart
index bc19b76..f571ee9 100644
--- a/pkg/analysis_server/lib/src/status/ast_writer.dart
+++ b/pkg/analysis_server/lib/src/status/ast_writer.dart
@@ -96,7 +96,7 @@
     } else if (node is InstanceCreationExpression) {
       properties['static type'] = node.staticType;
     } else if (node is LibraryDirective) {
-      properties['element'] = node.element;
+      properties['element'] = node.element2;
     } else if (node is MethodDeclaration) {
       properties['declaredElement'] = node.declaredElement;
       properties['external keyword'] = node.externalKeyword;
@@ -107,10 +107,10 @@
       properties['static invoke type'] = node.staticInvokeType;
       properties['static type'] = node.staticType;
     } else if (node is PartDirective) {
-      properties['element'] = node.element;
+      properties['element'] = node.element2;
       properties['uriSource'] = node.uriSource;
     } else if (node is PartOfDirective) {
-      properties['element'] = node.element;
+      properties['element'] = node.element2;
     } else if (node is PostfixExpression) {
       properties['static element'] = node.staticElement;
       properties['static type'] = node.staticType;
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index f7cf1fc..e16c1b4 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -4,6 +4,7 @@
 * Deprecated `ClassOrMixinDeclaration.getField`, filter `members` instead.
 * Deprecated `ClassOrMixinDeclaration.getMethod`, filter `members` instead.
 * Deprecated `ClassDeclaration.getConstructor`, filter `members` instead.
+* Deprecated `Directive.element`, use `element2` instead.
 
 ## 4.3.1
 * Fix `identifier` for `LibraryExportElement` and `LibraryImportElement`.
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 74bd94d..fc24d3d 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -630,8 +630,7 @@
   /// The token representing the 'augment' keyword.
   Token get augmentKeyword;
 
-  /// Return the element associated with this directive, or `null` if the AST
-  /// structure has not been resolved.
+  @Deprecated('Use element2 instead')
   @override
   AugmentationImportElement? get element;
 
@@ -1526,8 +1525,13 @@
   /// Return the element associated with this directive, or `null` if the AST
   /// structure has not been resolved or if this directive could not be
   /// resolved.
+  @Deprecated('Use element2 instead')
   Element? get element;
 
+  /// Return the element associated with this directive, or `null` if the AST
+  /// structure has not been resolved.
+  Element? get element2;
+
   /// Return the token representing the keyword that introduces this directive
   /// ('import', 'export', 'library' or 'part').
   @Deprecated('Use specific xyzToken instead')
@@ -1714,6 +1718,7 @@
 
   /// Return the element associated with this directive, or `null` if the AST
   /// structure has not been resolved.
+  @override
   LibraryExportElement? get element2;
 
   /// The token representing the 'export' keyword.
@@ -2893,6 +2898,7 @@
 
   /// Return the element associated with this directive, or `null` if the AST
   /// structure has not been resolved.
+  @override
   LibraryImportElement? get element2;
 
   /// The token representing the 'import' keyword.
@@ -3644,6 +3650,9 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class PartDirective implements UriBasedDirective {
+  @override
+  PartElement? get element2;
+
   /// Return the token representing the 'part' keyword.
   Token get partKeyword;
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 7ea2d0c..265798f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -793,7 +793,7 @@
 
   @override
   void visitPartDirective(PartDirective node) {
-    final partElement = node.element;
+    final partElement = node.element2;
     if (partElement is PartElement) {
       final partElementUri = partElement.uri;
       if (partElementUri is DirectiveUriWithUnit) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 3eb1e38..b0ad4c6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -590,7 +590,7 @@
       if (unitResult is ResolvedUnitResult) {
         CompilationUnit unit = unitResult.unit;
         for (Directive directive in unit.directives) {
-          if (directive is PartOfDirective && directive.element == element) {
+          if (directive is PartOfDirective && directive.element2 == element) {
             results.add(
               SearchResult._(
                 unit.declaredElement!,
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 00f3d6b..2c88c82 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -902,9 +902,15 @@
     _becomeParentOf(_uri);
   }
 
+  @Deprecated('Use element2 instead')
   @override
   AugmentationImportElement? get element {
-    return super.element as AugmentationImportElement?;
+    throw StateError('Use element2 instead');
+  }
+
+  @override
+  AugmentationImportElement? get element2 {
+    return super.element2 as AugmentationImportElement?;
   }
 
   @override
@@ -919,7 +925,7 @@
 
   @override
   LibraryAugmentationElement? get uriElement {
-    return element?.importedAugmentation;
+    return element2?.importedAugmentation;
   }
 
   @override
@@ -3274,6 +3280,7 @@
   /// attribute.
   DirectiveImpl(super.comment, super.metadata);
 
+  @Deprecated('Use element2 instead')
   @override
   Element? get element => _element;
 
@@ -3281,6 +3288,9 @@
   set element(Element? element) {
     _element = element;
   }
+
+  @override
+  Element? get element2 => _element;
 }
 
 /// A do statement.
@@ -3799,7 +3809,7 @@
   }
 
   @override
-  LibraryExportElement? get element2 => super.element as LibraryExportElement?;
+  LibraryExportElement? get element2 => super.element2 as LibraryExportElement?;
 
   @override
   Token get firstTokenAfterCommentAndMetadata => exportKeyword;
@@ -6449,7 +6459,7 @@
   }
 
   @override
-  LibraryImportElement? get element2 => super.element as LibraryImportElement?;
+  LibraryImportElement? get element2 => super.element2 as LibraryImportElement?;
 
   @override
   Token get firstTokenAfterCommentAndMetadata => importKeyword;
@@ -8796,6 +8806,11 @@
       : super(comment, metadata, partUri);
 
   @override
+  PartElement? get element2 {
+    return super.element2 as PartElement?;
+  }
+
+  @override
   Token get endToken => semicolon;
 
   @override
@@ -8807,8 +8822,7 @@
 
   @override
   CompilationUnitElement? get uriElement {
-    final partElement = element as PartElement?;
-    final partElementUri = partElement?.uri;
+    final partElementUri = element2?.uri;
     if (partElementUri is DirectiveUriWithUnit) {
       return partElementUri.unit;
     }
diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
index 8f676e4..279c3fb 100644
--- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart
+++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
@@ -98,12 +98,12 @@
     } else if (parent is LibraryIdentifier) {
       var grandParent = parent.parent;
       if (grandParent is PartOfDirective) {
-        var element = grandParent.element;
+        var element = grandParent.element2;
         if (element is LibraryElement) {
           return element.definingCompilationUnit;
         }
       } else if (grandParent is LibraryDirective) {
-        return grandParent.element;
+        return grandParent.element2;
       }
     }
     return node.writeOrReadElement;
@@ -126,7 +126,7 @@
 
   @override
   Element? visitLibraryDirective(LibraryDirective node) {
-    return node.element;
+    return node.element2;
   }
 
   @override
@@ -141,7 +141,7 @@
 
   @override
   Element? visitPartOfDirective(PartOfDirective node) {
-    return node.element;
+    return node.element2;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 5cea4ce..ed87486 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -151,7 +151,7 @@
 
   @override
   void visitAugmentationImportDirective(AugmentationImportDirective node) {
-    final element = node.element;
+    final element = node.element2;
     if (element is AugmentationImportElementImpl) {
       _setOrCreateMetadataElements(element, node.metadata);
     }
@@ -828,7 +828,7 @@
 
   @override
   void visitLibraryAugmentationDirective(LibraryAugmentationDirective node) {
-    final element = node.element;
+    final element = node.element2;
     if (element is LibraryOrAugmentationElementImpl) {
       _setOrCreateMetadataElements(element, node.metadata);
     }
@@ -841,7 +841,7 @@
   @override
   void visitLibraryDirective(LibraryDirective node) {
     ++_libraryDirectiveIndex;
-    var element = node.element;
+    var element = node.element2;
     if (element is LibraryElementImpl && _libraryDirectiveIndex == 1) {
       _setOrCreateMetadataElements(element, node.metadata);
     }
@@ -924,8 +924,8 @@
 
   @override
   void visitPartDirective(PartDirective node) {
-    var element = node.element;
-    if (element is CompilationUnitElementImpl) {
+    var element = node.element2;
+    if (element is PartElementImpl) {
       _setOrCreateMetadataElements(element, node.metadata);
     }
 
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 08a40f1..08751df 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -70,7 +70,7 @@
         _container.documentationComment = getCommentNodeRawText(
           firstDirective.documentationComment,
         );
-        var firstDirectiveMetadata = firstDirective.element?.metadata;
+        var firstDirectiveMetadata = firstDirective.element2?.metadata;
         if (firstDirectiveMetadata != null) {
           _container.metadata = firstDirectiveMetadata;
         }
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index fb9ae05..b382aee 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -135,7 +135,7 @@
 
   @override
   void visitLibraryDirective(LibraryDirective node) {
-    _checkResolved(node, node.element, (node) => node is LibraryElement);
+    _checkResolved(node, node.element2, (node) => node is LibraryElement);
   }
 
   @override
@@ -146,12 +146,12 @@
   @override
   void visitPartDirective(PartDirective node) {
     _checkResolved(
-        node, node.element, (node) => node is CompilationUnitElement);
+        node, node.element2, (node) => node is CompilationUnitElement);
   }
 
   @override
   void visitPartOfDirective(PartOfDirective node) {
-    _checkResolved(node, node.element, (node) => node is LibraryElement);
+    _checkResolved(node, node.element2, (node) => node is LibraryElement);
   }
 
   @override
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 3139dc0..d1c30e3 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -129,7 +129,7 @@
     _writeln('AugmentationImportDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
-      _writeElement('element', node.element);
+      _writeElement('element', node.element2);
       _writeRaw('uriContent', node.uriContent);
       _writeElement('uriElement', node.uriElement);
       _writeSource('uriSource', node.uriSource);
@@ -774,7 +774,7 @@
     _writeln('LibraryAugmentationDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
-      _writeElement('element', node.element);
+      _writeElement('element', node.element2);
     });
   }
 
@@ -783,7 +783,7 @@
     _writeln('LibraryDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
-      _writeElement('element', node.element);
+      _writeElement('element', node.element2);
     });
   }
 
@@ -901,7 +901,7 @@
     _writeln('PartDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
-      _writeElement('element', node.element);
+      _writeElement('element', node.element2);
       _writeRaw('uriContent', node.uriContent);
       _writePartUnitElement('uriElement', node.uriElement);
       _writeSource('uriSource', node.uriSource);
@@ -913,7 +913,7 @@
     _writeln('PartOfDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
-      _writeElement('element', node.element);
+      _writeElement('element', node.element2);
     });
   }
 
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index c58c3e2..d0b8b44 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -385,12 +385,12 @@
 
   @override
   void visitLibraryDirective(LibraryDirective node) {
-    computer._addRegionForNode(node.name, node.element);
+    computer._addRegionForNode(node.name, node.element2);
   }
 
   @override
   void visitPartDirective(PartDirective node) {
-    final element = node.element;
+    final element = node.element2;
     if (element is PartElement) {
       final uri = element.uri;
       if (uri is DirectiveUriWithUnit) {
@@ -413,7 +413,7 @@
 
   @override
   void visitPartOfDirective(PartOfDirective node) {
-    computer._addRegionForNode(node.libraryName ?? node.uri, node.element);
+    computer._addRegionForNode(node.libraryName ?? node.uri, node.element2);
     super.visitPartOfDirective(node);
   }