@@ -30,6 +30,56 @@ import 'package:convert/convert.dart';
30
30
import 'package:meta/meta.dart' ;
31
31
import 'package:yaml/yaml.dart' ;
32
32
33
+ const _elementKindClass = "ElementKind.CLASS" ;
34
+ const _elementKindConstructor = "ElementKind.CONSTRUCTOR" ;
35
+ const _elementKindConstructorConst = "ElementKind.CONSTRUCTOR+const" ;
36
+ const _elementKindEnum = "ElementKind.ENUM" ;
37
+ const _elementKindEnumConstant = "ElementKind.ENUM_CONSTANT" ;
38
+ const _elementKindEnumConstantConst = "ElementKind.ENUM_CONSTANT+const" ;
39
+ const _elementKindExtension = "ElementKind.EXTENSION" ;
40
+ const _elementKindField = "ElementKind.FIELD" ;
41
+ const _elementKindFieldConst = "ElementKind.FIELD+const" ;
42
+ const _elementKindFunction = "ElementKind.FUNCTION" ;
43
+ const _elementKindFunctionTypeAlias = "ElementKind.FUNCTION_TYPE_ALIAS" ;
44
+ const _elementKindMethod = "ElementKind.METHOD" ;
45
+ const _elementKindMixin = "ElementKind.MIXIN" ;
46
+ const _elementKindTopLevelVariable = "ElementKind.TOP_LEVEL_VARIABLE" ;
47
+ const _elementKindTopLevelVariableConst =
48
+ "ElementKind.TOP_LEVEL_VARIABLE+const" ;
49
+ const _elementKindTypeAlias = "ElementKind.TYPE_ALIAS" ;
50
+ const _hardcodedTags = {
51
+ _elementKindClass,
52
+ _elementKindConstructor,
53
+ _elementKindConstructorConst,
54
+ _elementKindEnum,
55
+ _elementKindEnumConstant,
56
+ _elementKindEnumConstantConst,
57
+ _elementKindExtension,
58
+ _elementKindField,
59
+ _elementKindFieldConst,
60
+ _elementKindFunction,
61
+ _elementKindFunctionTypeAlias,
62
+ _elementKindMethod,
63
+ _elementKindMixin,
64
+ _elementKindTopLevelVariable,
65
+ _elementKindTopLevelVariableConst,
66
+ _elementKindTypeAlias,
67
+ _tagBool,
68
+ _tagDouble,
69
+ _tagInt,
70
+ _tagString,
71
+ _tagList,
72
+ _tagMap,
73
+ _tagSet
74
+ };
75
+ const _tagBool = "dart:core::bool" ;
76
+ const _tagDouble = "dart:core::double" ;
77
+ const _tagInt = "dart:core::int" ;
78
+ const _tagList = "dart:core::List" ;
79
+ const _tagMap = "dart:core::Map" ;
80
+ const _tagSet = "dart:core::Set" ;
81
+ const _tagString = "dart:core::String" ;
82
+
33
83
/// A top-level public declaration.
34
84
class Declaration {
35
85
final List <Declaration > children;
@@ -83,15 +133,18 @@ class Declaration {
83
133
required this .locationStartColumn,
84
134
required this .locationStartLine,
85
135
required this .name,
86
- required this . parameters,
136
+ required String ? parameters,
87
137
required this .parameterNames,
88
138
required this .parameterTypes,
89
139
required this .parent,
90
140
required List <String > relevanceTagsInFile,
91
141
required this .requiredParameterCount,
92
- required this . returnType,
142
+ required String ? returnType,
93
143
required this .typeParameters,
94
- }) : _relevanceTagsInFile = relevanceTagsInFile;
144
+ }) : _relevanceTagsInFile = relevanceTagsInFile,
145
+ // De-duplicate the string "()".
146
+ parameters = parameters == "()" ? "()" : parameters,
147
+ returnType = _dedupReturnType (returnType);
95
148
96
149
Uri ? get locationLibraryUri => _locationLibraryUri;
97
150
@@ -104,6 +157,19 @@ class Declaration {
104
157
String toString () {
105
158
return '($kind , $name )' ;
106
159
}
160
+
161
+ static String ? _dedupReturnType (String ? input) {
162
+ if (input == null ) return input;
163
+ const knownReturnTypes = {
164
+ "" ,
165
+ "void" ,
166
+ "String" ,
167
+ "bool" ,
168
+ "int" ,
169
+ "Future<void>"
170
+ };
171
+ return knownReturnTypes.lookup (input) ?? input;
172
+ }
107
173
}
108
174
109
175
/// A kind of a top-level declaration.
@@ -930,20 +996,20 @@ class RelevanceTags {
930
996
931
997
static List <String >? _forExpression (Expression ? expression) {
932
998
if (expression is BooleanLiteral ) {
933
- return const ['dart:core::bool' ];
999
+ return const [_tagBool ];
934
1000
} else if (expression is DoubleLiteral ) {
935
- return const ['dart:core::double' ];
1001
+ return const [_tagDouble ];
936
1002
} else if (expression is IntegerLiteral ) {
937
- return const ['dart:core::int' ];
1003
+ return const [_tagInt ];
938
1004
} else if (expression is StringLiteral ) {
939
- return const ['dart:core::String' ];
1005
+ return const [_tagString ];
940
1006
} else if (expression is ListLiteral ) {
941
- return const ['dart:core::List' ];
1007
+ return const [_tagList ];
942
1008
} else if (expression is SetOrMapLiteral ) {
943
1009
if (expression.isMap) {
944
- return const ['dart:core::Map' ];
1010
+ return const [_tagMap ];
945
1011
} else if (expression.isSet) {
946
- return const ['dart:core::Set' ];
1012
+ return const [_tagSet ];
947
1013
}
948
1014
}
949
1015
@@ -968,6 +1034,13 @@ class _DeclarationStorage {
968
1034
var kind = kindFromIdl (d.kind);
969
1035
970
1036
var relevanceTags = d.relevanceTags.toList ();
1037
+ for (int i = 0 ; i < relevanceTags.length; i++ ) {
1038
+ var tag = relevanceTags[i];
1039
+ var lookedUp = _hardcodedTags.lookup (tag);
1040
+ if (lookedUp != null ) {
1041
+ relevanceTags[i] = lookedUp;
1042
+ }
1043
+ }
971
1044
972
1045
var children = < Declaration > [];
973
1046
var declaration = Declaration (
@@ -1489,8 +1562,8 @@ class _File {
1489
1562
parameterTypes: _getFormalParameterTypes (parameters),
1490
1563
parent: parent,
1491
1564
relevanceTags: [
1492
- 'ElementKind.CONSTRUCTOR' ,
1493
- if (isConst) 'ElementKind.CONSTRUCTOR+const'
1565
+ _elementKindConstructor ,
1566
+ if (isConst) _elementKindConstructorConst
1494
1567
],
1495
1568
requiredParameterCount:
1496
1569
_getFormalParameterRequiredCount (parameters),
@@ -1514,8 +1587,8 @@ class _File {
1514
1587
name: field.name,
1515
1588
parent: parent,
1516
1589
relevanceTags: [
1517
- 'ElementKind.FIELD' ,
1518
- if (isConst) 'ElementKind.FIELD+const' ,
1590
+ _elementKindField ,
1591
+ if (isConst) _elementKindFieldConst ,
1519
1592
...? RelevanceTags ._forExpression (field.initializer)
1520
1593
],
1521
1594
returnType: _getTypeAnnotationString (classMember.fields.type),
@@ -1531,7 +1604,7 @@ class _File {
1531
1604
kind: DeclarationKind .GETTER ,
1532
1605
name: classMember.name,
1533
1606
parent: parent,
1534
- relevanceTags: ['ElementKind.FIELD' ],
1607
+ relevanceTags: [_elementKindField ],
1535
1608
returnType: _getTypeAnnotationString (classMember.returnType),
1536
1609
);
1537
1610
} else if (classMember.isSetter && parameters != null ) {
@@ -1544,7 +1617,7 @@ class _File {
1544
1617
parameterNames: _getFormalParameterNames (parameters),
1545
1618
parameterTypes: _getFormalParameterTypes (parameters),
1546
1619
parent: parent,
1547
- relevanceTags: ['ElementKind.FIELD' ],
1620
+ relevanceTags: [_elementKindField ],
1548
1621
requiredParameterCount:
1549
1622
_getFormalParameterRequiredCount (parameters),
1550
1623
);
@@ -1561,7 +1634,7 @@ class _File {
1561
1634
parameterNames: _getFormalParameterNames (parameters),
1562
1635
parameterTypes: _getFormalParameterTypes (parameters),
1563
1636
parent: parent,
1564
- relevanceTags: ['ElementKind.METHOD' ],
1637
+ relevanceTags: [_elementKindMethod ],
1565
1638
requiredParameterCount:
1566
1639
_getFormalParameterRequiredCount (parameters),
1567
1640
returnType: _getTypeAnnotationString (classMember.returnType),
@@ -1578,7 +1651,7 @@ class _File {
1578
1651
isDeprecated: isDeprecated,
1579
1652
kind: DeclarationKind .CLASS ,
1580
1653
name: node.name,
1581
- relevanceTags: ['ElementKind.CLASS' ],
1654
+ relevanceTags: [_elementKindClass ],
1582
1655
);
1583
1656
if (classDeclaration == null ) continue ;
1584
1657
@@ -1610,7 +1683,7 @@ class _File {
1610
1683
parameterNames: [],
1611
1684
parameterTypes: [],
1612
1685
parent: classDeclaration,
1613
- relevanceTagsInFile: ['ElementKind.CONSTRUCTOR' ],
1686
+ relevanceTagsInFile: [_elementKindConstructor ],
1614
1687
requiredParameterCount: 0 ,
1615
1688
returnType: node.name.lexeme,
1616
1689
typeParameters: null ,
@@ -1621,14 +1694,14 @@ class _File {
1621
1694
isDeprecated: isDeprecated,
1622
1695
kind: DeclarationKind .CLASS_TYPE_ALIAS ,
1623
1696
name: node.name,
1624
- relevanceTags: ['ElementKind.CLASS' ],
1697
+ relevanceTags: [_elementKindClass ],
1625
1698
);
1626
1699
} else if (node is EnumDeclaration ) {
1627
1700
var enumDeclaration = addDeclaration (
1628
1701
isDeprecated: isDeprecated,
1629
1702
kind: DeclarationKind .ENUM ,
1630
1703
name: node.name,
1631
- relevanceTags: ['ElementKind.ENUM' ],
1704
+ relevanceTags: [_elementKindEnum ],
1632
1705
);
1633
1706
if (enumDeclaration == null ) continue ;
1634
1707
@@ -1641,8 +1714,8 @@ class _File {
1641
1714
name: constant.name,
1642
1715
parent: enumDeclaration,
1643
1716
relevanceTags: [
1644
- 'ElementKind.ENUM_CONSTANT' ,
1645
- 'ElementKind.ENUM_CONSTANT+const'
1717
+ _elementKindEnumConstant ,
1718
+ _elementKindEnumConstantConst
1646
1719
],
1647
1720
);
1648
1721
}
@@ -1653,7 +1726,7 @@ class _File {
1653
1726
isDeprecated: isDeprecated,
1654
1727
kind: DeclarationKind .EXTENSION ,
1655
1728
name: name,
1656
- relevanceTags: ['ElementKind.EXTENSION' ],
1729
+ relevanceTags: [_elementKindExtension ],
1657
1730
);
1658
1731
}
1659
1732
// TODO(brianwilkerson) Should we be creating declarations for the
@@ -1666,7 +1739,7 @@ class _File {
1666
1739
isDeprecated: isDeprecated,
1667
1740
kind: DeclarationKind .GETTER ,
1668
1741
name: node.name,
1669
- relevanceTags: ['ElementKind.FUNCTION' ],
1742
+ relevanceTags: [_elementKindFunction ],
1670
1743
returnType: _getTypeAnnotationString (node.returnType),
1671
1744
);
1672
1745
} else if (node.isSetter && parameters != null ) {
@@ -1677,7 +1750,7 @@ class _File {
1677
1750
parameters: parameters.toSource (),
1678
1751
parameterNames: _getFormalParameterNames (parameters),
1679
1752
parameterTypes: _getFormalParameterTypes (parameters),
1680
- relevanceTags: ['ElementKind.FUNCTION' ],
1753
+ relevanceTags: [_elementKindFunction ],
1681
1754
requiredParameterCount:
1682
1755
_getFormalParameterRequiredCount (parameters),
1683
1756
);
@@ -1692,7 +1765,7 @@ class _File {
1692
1765
parameters: parameters.toSource (),
1693
1766
parameterNames: _getFormalParameterNames (parameters),
1694
1767
parameterTypes: _getFormalParameterTypes (parameters),
1695
- relevanceTags: ['ElementKind.FUNCTION' ],
1768
+ relevanceTags: [_elementKindFunction ],
1696
1769
requiredParameterCount:
1697
1770
_getFormalParameterRequiredCount (parameters),
1698
1771
returnType: _getTypeAnnotationString (node.returnType),
@@ -1711,7 +1784,7 @@ class _File {
1711
1784
parameters: parameters.toSource (),
1712
1785
parameterNames: _getFormalParameterNames (parameters),
1713
1786
parameterTypes: _getFormalParameterTypes (parameters),
1714
- relevanceTags: ['ElementKind.FUNCTION_TYPE_ALIAS' ],
1787
+ relevanceTags: [_elementKindFunctionTypeAlias ],
1715
1788
requiredParameterCount:
1716
1789
_getFormalParameterRequiredCount (parameters),
1717
1790
returnType: _getTypeAnnotationString (functionType.returnType),
@@ -1722,7 +1795,7 @@ class _File {
1722
1795
isDeprecated: isDeprecated,
1723
1796
kind: DeclarationKind .TYPE_ALIAS ,
1724
1797
name: node.name,
1725
- relevanceTags: ['ElementKind.TYPE_ALIAS' ],
1798
+ relevanceTags: [_elementKindTypeAlias ],
1726
1799
);
1727
1800
}
1728
1801
} else if (node is FunctionTypeAlias ) {
@@ -1734,7 +1807,7 @@ class _File {
1734
1807
parameters: parameters.toSource (),
1735
1808
parameterNames: _getFormalParameterNames (parameters),
1736
1809
parameterTypes: _getFormalParameterTypes (parameters),
1737
- relevanceTags: ['ElementKind.FUNCTION_TYPE_ALIAS' ],
1810
+ relevanceTags: [_elementKindFunctionTypeAlias ],
1738
1811
requiredParameterCount: _getFormalParameterRequiredCount (parameters),
1739
1812
returnType: _getTypeAnnotationString (node.returnType),
1740
1813
typeParameters: node.typeParameters? .toSource (),
@@ -1744,7 +1817,7 @@ class _File {
1744
1817
isDeprecated: isDeprecated,
1745
1818
kind: DeclarationKind .MIXIN ,
1746
1819
name: node.name,
1747
- relevanceTags: ['ElementKind.MIXIN' ],
1820
+ relevanceTags: [_elementKindMixin ],
1748
1821
);
1749
1822
if (mixinDeclaration == null ) continue ;
1750
1823
addClassMembers (mixinDeclaration, false , node.members);
@@ -1760,8 +1833,8 @@ class _File {
1760
1833
kind: DeclarationKind .VARIABLE ,
1761
1834
name: variable.name,
1762
1835
relevanceTags: [
1763
- 'ElementKind.TOP_LEVEL_VARIABLE' ,
1764
- if (isConst) 'ElementKind.TOP_LEVEL_VARIABLE+const' ,
1836
+ _elementKindTopLevelVariable ,
1837
+ if (isConst) _elementKindTopLevelVariableConst ,
1765
1838
...? RelevanceTags ._forExpression (variable.initializer)
1766
1839
],
1767
1840
returnType: _getTypeAnnotationString (node.variables.type),
0 commit comments