[analysis_server] Add missing declaration semantic token modifier on classes/constructors

Fixes https://github.com/Dart-Code/Dart-Code/issues/4498.

Change-Id: Ia1c89d02a12fd51fe6f18ce4208ff88a7fbd7ba3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/295621
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 45dfc3c..7601e6cb 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -179,7 +179,10 @@
     } else {
       type = HighlightRegionType.CLASS;
       if (parent is ConstructorDeclaration) {
-        semanticModifiers = {CustomSemanticTokenModifiers.constructor};
+        semanticModifiers = {
+          CustomSemanticTokenModifiers.constructor,
+          SemanticTokenModifiers.declaration
+        };
       }
     }
 
@@ -707,7 +710,8 @@
     computer._addRegion_token(node.finalKeyword, HighlightRegionType.BUILT_IN);
     computer._addRegion_token(node.mixinKeyword, HighlightRegionType.BUILT_IN);
     computer._addRegion_token(node.classKeyword, HighlightRegionType.KEYWORD);
-    computer._addRegion_token(node.name, HighlightRegionType.CLASS);
+    computer._addRegion_token(node.name, HighlightRegionType.CLASS,
+        semanticTokenModifiers: {SemanticTokenModifiers.declaration});
     super.visitClassDeclaration(node);
   }
 
@@ -743,6 +747,7 @@
       semanticTokenType: SemanticTokenTypes.method,
       semanticTokenModifiers: {
         CustomSemanticTokenModifiers.constructor,
+        SemanticTokenModifiers.declaration,
       },
     );
     super.visitConstructorDeclaration(node);
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index fad605b..28d6421 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -150,7 +150,8 @@
       _Token('/// class docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('T', SemanticTokenTypes.typeParameter),
       _Token('// class comment', SemanticTokenTypes.comment),
       _Token('// Trailing comment', SemanticTokenTypes.comment),
@@ -176,19 +177,30 @@
 
     final expected = [
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('const', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_,
-          [CustomSemanticTokenModifiers.constructor]),
-      _Token('MyClass', SemanticTokenTypes.class_,
-          [CustomSemanticTokenModifiers.constructor]),
-      _Token('named', SemanticTokenTypes.method,
-          [CustomSemanticTokenModifiers.constructor]),
+      _Token('MyClass', SemanticTokenTypes.class_, [
+        CustomSemanticTokenModifiers.constructor,
+        SemanticTokenModifiers.declaration
+      ]),
+      _Token('MyClass', SemanticTokenTypes.class_, [
+        CustomSemanticTokenModifiers.constructor,
+        SemanticTokenModifiers.declaration
+      ]),
+      _Token('named', SemanticTokenTypes.method, [
+        CustomSemanticTokenModifiers.constructor,
+        SemanticTokenModifiers.declaration
+      ]),
       _Token('factory', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_,
-          [CustomSemanticTokenModifiers.constructor]),
-      _Token('factory', SemanticTokenTypes.method,
-          [CustomSemanticTokenModifiers.constructor]),
+      _Token('MyClass', SemanticTokenTypes.class_, [
+        CustomSemanticTokenModifiers.constructor,
+        SemanticTokenModifiers.declaration
+      ]),
+      _Token('factory', SemanticTokenTypes.method, [
+        CustomSemanticTokenModifiers.constructor,
+        SemanticTokenModifiers.declaration
+      ]),
       _Token('MyClass', SemanticTokenTypes.class_,
           [CustomSemanticTokenModifiers.constructor]),
       _Token('final', SemanticTokenTypes.keyword),
@@ -245,7 +257,8 @@
 
     final expected = [
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('/// field docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('String', SemanticTokenTypes.class_),
@@ -305,7 +318,8 @@
 
     final expected = [
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('/// getter docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('String', SemanticTokenTypes.class_),
@@ -387,7 +401,8 @@
 
     final expected = [
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('/// method docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('@', CustomSemanticTokenTypes.annotation),
@@ -458,7 +473,8 @@
       _Token('] after', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('String', SemanticTokenTypes.class_),
       _Token('aaa', SemanticTokenTypes.property, [
         SemanticTokenModifiers.declaration,
@@ -587,14 +603,16 @@
       _Token('/// class docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('// class comment', SemanticTokenTypes.comment),
     ];
     final expected2 = [
       _Token('/// class docs 2', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass2', SemanticTokenTypes.class_),
+      _Token('MyClass2', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('// class comment 2', SemanticTokenTypes.comment),
     ];
 
@@ -774,7 +792,8 @@
 
     final expected = [
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyTestClass', SemanticTokenTypes.class_),
+      _Token('MyTestClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       for (var i = 1; i <= 6; i++) ...[
         _Token('/// test', SemanticTokenTypes.comment,
             [SemanticTokenModifiers.documentation]),
@@ -850,7 +869,8 @@
       _Token(' */', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
     ];
 
     await _verifyTokens(content, expected);
@@ -1045,7 +1065,8 @@
     ''';
 
     final expected = [
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('T', SemanticTokenTypes.typeParameter),
       _Token('// class comment', SemanticTokenTypes.comment),
     ];
@@ -1067,7 +1088,8 @@
       _Token('/// class docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('class', SemanticTokenTypes.keyword),
-      _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [SemanticTokenModifiers.declaration]),
       _Token('T', SemanticTokenTypes.typeParameter),
       _Token('// class comment', SemanticTokenTypes.comment),
       _Token('// Trailing comment', SemanticTokenTypes.comment),