Elements. Make InterfaceElement2.name nullable.

Change-Id: I7dbbc3197507da2e8f5642e142e994583f5c0c10
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390781
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
index 8b38016..6d673f6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
@@ -35,6 +35,10 @@
       }
       var classElement = expressionType.element3;
       var className = classElement.name;
+      if (className == null) {
+        return;
+      }
+
       var caseNames = _caseNames(node);
       var missingNames = _constantNames(classElement)
         ..removeWhere((e) => caseNames.contains(e));
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart
index ce1ad27..5c43d5e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart
@@ -53,12 +53,15 @@
     var declaringElement = invokedElement.enclosingElement2;
 
     if (declaringElement is InterfaceElement2) {
-      _className = declaringElement.name;
-      await builder.addDartFileEdit(file, (builder) {
-        builder.addReplacement(range.node(target_final), (builder) {
-          builder.writeReference2(declaringElement);
+      var declaringElementName = declaringElement.name;
+      if (declaringElementName != null) {
+        _className = declaringElementName;
+        await builder.addDartFileEdit(file, (builder) {
+          builder.addReplacement(range.node(target_final), (builder) {
+            builder.writeReference2(declaringElement);
+          });
         });
-      });
+      }
     } else if (declaringElement is ExtensionElement2) {
       var extensionName = declaringElement.name;
       if (extensionName != null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index a408b47..97737c5 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -159,9 +159,15 @@
       return;
     }
 
-    // prepare target ClassDeclaration
     var targetElement = constructorElement.enclosingElement2;
     var targetFragment = (targetElement as ClassElement2).firstFragment;
+
+    var targetElementName = targetElement.name;
+    if (targetElementName == null) {
+      return;
+    }
+
+    // prepare target ClassDeclaration
     var targetResult =
         await sessionHelper.getElementDeclaration2(targetFragment);
     if (targetResult == null) {
@@ -181,7 +187,7 @@
     var targetFile = targetSource.fullName;
     await builder.addDartFileEdit(targetFile, (builder) {
       builder.insertConstructor(targetNode, (builder) {
-        builder.writeConstructorDeclaration(targetElement.name,
+        builder.writeConstructorDeclaration(targetElementName,
             argumentList: instanceCreation.argumentList);
       });
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
index bfa431e..bb3157a 100644
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
@@ -68,7 +68,9 @@
       _addSingleCharacterName(excluded, res, 0x73);
     } else if (expectedType is InterfaceType) {
       var className = expectedType.element3.name;
-      _addAll(excluded, res, getCamelWordCombinations(className));
+      if (className != null) {
+        _addAll(excluded, res, getCamelWordCombinations(className));
+      }
     }
   }
   // done
diff --git a/pkg/analyzer/lib/dart/element/element2.dart b/pkg/analyzer/lib/dart/element/element2.dart
index 6e732fe..a1c67f0 100644
--- a/pkg/analyzer/lib/dart/element/element2.dart
+++ b/pkg/analyzer/lib/dart/element/element2.dart
@@ -1125,9 +1125,6 @@
   /// guard against infinite loops.
   List<InterfaceType> get mixins;
 
-  @override
-  String get name;
-
   /// The superclass of this element.
   ///
   /// For [ClassElement] returns `null` only if this class is `Object`. If the
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 0032c3e..b7f135d 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -166,9 +166,6 @@
 
   @override
   List<ConstructorElement> constructors = [];
-
-  @override
-  String get name => super.name!;
 }
 
 class AugmentedMixinElementImpl extends AugmentedInterfaceElementImpl
@@ -8590,9 +8587,6 @@
   }
 
   @override
-  String get name => element.name;
-
-  @override
   ConstructorElement? get unnamedConstructor {
     return element.unnamedConstructor;
   }
diff --git a/pkg/linter/lib/src/rules/implicit_reopen.dart b/pkg/linter/lib/src/rules/implicit_reopen.dart
index b8017b6..dcb0da8 100644
--- a/pkg/linter/lib/src/rules/implicit_reopen.dart
+++ b/pkg/linter/lib/src/rules/implicit_reopen.dart
@@ -73,8 +73,14 @@
     required InterfaceElement2 other,
     required String reason,
   }) {
-    rule.reportLintForToken(member.name,
-        arguments: [type, target.name, other.name, reason]);
+    var targetName = target.name;
+    var otherName = other.name;
+    if (targetName != null && otherName != null) {
+      rule.reportLintForToken(
+        member.name,
+        arguments: [type, targetName, otherName, reason],
+      );
+    }
   }
 
   @override
diff --git a/pkg/linter/lib/src/rules/null_closures.dart b/pkg/linter/lib/src/rules/null_closures.dart
index c42d4c1..fd9ecde 100644
--- a/pkg/linter/lib/src/rules/null_closures.dart
+++ b/pkg/linter/lib/src/rules/null_closures.dart
@@ -233,13 +233,20 @@
     var element = type.element3;
     if (element.isSynthetic) return null;
 
-    var method = getMethod(element.library2.name, element.name);
+    var elementName = element.name;
+    if (elementName == null) {
+      return null;
+    }
+
+    var method = getMethod(element.library2.name, elementName);
     if (method != null) return method;
 
     for (var supertype in element.allSupertypes) {
       var superElement = supertype.element3;
-      method = getMethod(superElement.library2.name, superElement.name);
-      if (method != null) return method;
+      if (superElement.name case var superElementName?) {
+        method = getMethod(superElement.library2.name, superElementName);
+        if (method != null) return method;
+      }
     }
     return null;
   }