Include enum constants into available declarations.
R=brianwilkerson@google.com
Change-Id: I86c525981119a77ad8b69878f8134d927f873817
Reviewed-on: https://dart-review.googlesource.com/c/92662
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
index 1173472..adeea7f 100644
--- a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
+++ b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
@@ -128,6 +128,8 @@
return protocol.ElementKind.CLASS_TYPE_ALIAS;
case DeclarationKind.ENUM:
return protocol.ElementKind.ENUM;
+ case DeclarationKind.ENUM_CONSTANT:
+ return protocol.ElementKind.ENUM_CONSTANT;
case DeclarationKind.FUNCTION:
return protocol.ElementKind.FUNCTION;
case DeclarationKind.FUNCTION_TYPE_ALIAS:
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index 0ed764e..e70747d 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -90,6 +90,7 @@
CLASS,
CLASS_TYPE_ALIAS,
ENUM,
+ ENUM_CONSTANT,
FUNCTION,
FUNCTION_TYPE_ALIAS,
GETTER,
@@ -698,6 +699,9 @@
case DeclarationKind.FUNCTION_TYPE_ALIAS:
var name = declaration.name;
return <String>['$uriStr::$name'];
+ case DeclarationKind.ENUM_CONSTANT:
+ var name2 = declaration.name2;
+ return <String>['$uriStr::$name2'];
default:
return null;
}
@@ -777,6 +781,8 @@
return DeclarationKind.CLASS_TYPE_ALIAS;
case idl.AvailableDeclarationKind.ENUM:
return DeclarationKind.ENUM;
+ case idl.AvailableDeclarationKind.ENUM_CONSTANT:
+ return DeclarationKind.ENUM_CONSTANT;
case idl.AvailableDeclarationKind.FUNCTION:
return DeclarationKind.FUNCTION;
case idl.AvailableDeclarationKind.FUNCTION_TYPE_ALIAS:
@@ -802,6 +808,8 @@
return idl.AvailableDeclarationKind.CLASS_TYPE_ALIAS;
case DeclarationKind.ENUM:
return idl.AvailableDeclarationKind.ENUM;
+ case DeclarationKind.ENUM_CONSTANT:
+ return idl.AvailableDeclarationKind.ENUM_CONSTANT;
case DeclarationKind.FUNCTION:
return idl.AvailableDeclarationKind.FUNCTION;
case DeclarationKind.FUNCTION_TYPE_ALIAS:
@@ -892,7 +900,7 @@
class _File {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 4;
+ static const int DATA_VERSION = 5;
/// The next value for [id].
static int _nextId = 0;
@@ -1052,16 +1060,28 @@
var lineInfo = unit.lineInfo;
+ String docComplete = null;
+ String docSummary = null;
+
+ void setDartDoc(AnnotatedNode node) {
+ if (node.documentationComment != null) {
+ var rawText = getCommentNodeRawText(node.documentationComment);
+ docComplete = getDartDocPlainText(rawText);
+ docSummary = getDartDocSummary(docComplete);
+ } else {
+ docComplete = null;
+ docSummary = null;
+ }
+ }
+
void addDeclaration({
- @required String docComplete,
- @required String docSummary,
bool isAbstract = false,
bool isConst = false,
bool isDeprecated = false,
bool isFinal = false,
@required DeclarationKind kind,
@required Identifier name,
- String name2,
+ Identifier name2,
String parameters,
List<String> parameterNames,
List<String> parameterTypes,
@@ -1084,7 +1104,7 @@
locationOffset: locationOffset,
locationPath: path,
name: name.name,
- name2: name2,
+ name2: name2?.name,
locationStartColumn: lineLocation.columnNumber,
locationStartLine: lineLocation.lineNumber,
parameters: parameters,
@@ -1099,20 +1119,11 @@
}
for (var node in unit.declarations) {
- String docComplete = null;
- String docSummary = null;
- if (node.documentationComment != null) {
- var rawText = getCommentNodeRawText(node.documentationComment);
- docComplete = getDartDocPlainText(rawText);
- docSummary = getDartDocSummary(docComplete);
- }
-
+ setDartDoc(node);
var isDeprecated = _hasDeprecatedAnnotation(node);
if (node is ClassDeclaration) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isAbstract: node.isAbstract,
isDeprecated: isDeprecated,
kind: DeclarationKind.CLASS,
@@ -1120,27 +1131,31 @@
);
} else if (node is ClassTypeAlias) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.CLASS_TYPE_ALIAS,
name: node.name,
);
} else if (node is EnumDeclaration) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.ENUM,
name: node.name,
);
+ for (var constant in node.constants) {
+ setDartDoc(constant);
+ var isDeprecated = _hasDeprecatedAnnotation(constant);
+ addDeclaration(
+ isDeprecated: isDeprecated,
+ kind: DeclarationKind.ENUM_CONSTANT,
+ name: constant.name,
+ name2: node.name,
+ );
+ }
} else if (node is FunctionDeclaration) {
var functionExpression = node.functionExpression;
var parameters = functionExpression.parameters;
if (node.isGetter) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.GETTER,
name: node.name,
@@ -1148,8 +1163,6 @@
);
} else if (node.isSetter) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.SETTER,
name: node.name,
@@ -1161,8 +1174,6 @@
);
} else {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.FUNCTION,
name: node.name,
@@ -1179,8 +1190,6 @@
var functionType = node.functionType;
var parameters = functionType.parameters;
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
name: node.name,
@@ -1193,8 +1202,6 @@
);
} else if (node is MixinDeclaration) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isDeprecated: isDeprecated,
kind: DeclarationKind.MIXIN,
name: node.name,
@@ -1204,8 +1211,6 @@
var isFinal = node.variables.isFinal;
for (var variable in node.variables.variables) {
addDeclaration(
- docComplete: docComplete,
- docSummary: docSummary,
isConst: isConst,
isDeprecated: isDeprecated,
isFinal: isFinal,
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 3673aa3..640b861 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -14,6 +14,8 @@
ENUM,
+ ENUM_CONSTANT,
+
FUNCTION,
FUNCTION_TYPE_ALIAS,
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index ba77b62..6e3a1d8 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -360,6 +360,7 @@
CLASS,
CLASS_TYPE_ALIAS,
ENUM,
+ ENUM_CONSTANT,
FUNCTION,
FUNCTION_TYPE_ALIAS,
GETTER,
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index 886d3c1..aa2d4a4 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -846,6 +846,51 @@
);
}
+ test_ENUM_CONSTANT() async {
+ newFile('/home/test/lib/test.dart', content: r'''
+enum MyEnum {
+ a,
+
+ @deprecated
+ b,
+
+ /// aaa
+ ///
+ /// bbb bbb
+ c
+}
+''');
+
+ tracker.addContext(testAnalysisContext);
+ await _doAllTrackerWork();
+
+ var library = _getLibrary('package:test/test.dart');
+ _assertDeclaration(
+ library,
+ 'a',
+ DeclarationKind.ENUM_CONSTANT,
+ name2: 'MyEnum',
+ relevanceTags: ['package:test/test.dart::MyEnum'],
+ );
+ _assertDeclaration(
+ library,
+ 'b',
+ DeclarationKind.ENUM_CONSTANT,
+ isDeprecated: true,
+ name2: 'MyEnum',
+ relevanceTags: ['package:test/test.dart::MyEnum'],
+ );
+ _assertDeclaration(
+ library,
+ 'c',
+ DeclarationKind.ENUM_CONSTANT,
+ docSummary: 'aaa',
+ docComplete: 'aaa\n\nbbb bbb',
+ name2: 'MyEnum',
+ relevanceTags: ['package:test/test.dart::MyEnum'],
+ );
+ }
+
test_FUNCTION() async {
newFile('/home/test/lib/test.dart', content: r'''
void a() {}