Skip to content

Commit 6c14fd2

Browse files
authored
Fix truncation in middle of links for constants (#1544)
* Initial version * Basic tests * update test package docs, add substring test, dartfmt
1 parent e3233ec commit 6c14fd2

File tree

96 files changed

+1752
-51
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1752
-51
lines changed

lib/src/element_type.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ class ElementType {
8484
} else {
8585
typeArguments = type.typeFormals.map((f) => f.type);
8686
}
87-
return typeArguments
88-
.map(_getElementTypeFrom)
89-
.toList();
87+
return typeArguments.map(_getElementTypeFrom).toList();
9088
} else {
9189
return (_type as ParameterizedType)
9290
.typeArguments

lib/src/model.dart

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,9 @@ class Accessor extends ModelElement
245245

246246
/// Call exactly once to set the enclosing combo for this Accessor.
247247
set enclosingCombo(GetterSetterCombo combo) {
248-
assert(_enclosingCombo == null || combo == _enclosingCombo);
249-
assert(combo != null);
250-
_enclosingCombo = combo;
248+
assert(_enclosingCombo == null || combo == _enclosingCombo);
249+
assert(combo != null);
250+
_enclosingCombo = combo;
251251
}
252252

253253
bool get isSynthetic => element.isSynthetic;
@@ -274,7 +274,8 @@ class Accessor extends ModelElement
274274
@override
275275
String get computeDocumentationComment {
276276
if (isSynthetic) {
277-
String docComment = (element as PropertyAccessorElement).variable.documentationComment;
277+
String docComment =
278+
(element as PropertyAccessorElement).variable.documentationComment;
278279
// If we're a setter, only display something if we have something different than the getter.
279280
// TODO(jcollins-g): modify analyzer to do this itself?
280281
if (isGetter ||
@@ -1204,7 +1205,7 @@ class EnumField extends Field {
12041205
: super(element, library, getter, null);
12051206

12061207
@override
1207-
String get constantValue {
1208+
String get constantValueBase {
12081209
if (name == 'values') {
12091210
return 'const List<${_field.enclosingElement.name}>';
12101211
} else {
@@ -1260,7 +1261,6 @@ class EnumField extends Field {
12601261
class Field extends ModelElement
12611262
with GetterSetterCombo, Inheritable, SourceCodeMixin
12621263
implements EnclosedElement {
1263-
String _constantValue;
12641264
bool _isInherited = false;
12651265
Class _enclosingClass;
12661266
@override
@@ -1296,20 +1296,6 @@ class Field extends ModelElement
12961296
return super.documentation;
12971297
}
12981298

1299-
String get constantValue {
1300-
if (_constantValue != null) return _constantValue;
1301-
1302-
if (_field.computeNode() == null) return null;
1303-
var v = _field.computeNode().toSource();
1304-
if (v == null) return null;
1305-
var string = v.substring(v.indexOf('=') + 1, v.length).trim();
1306-
_constantValue = string.replaceAll("${modelType.name}", "${modelType.linkedName}");
1307-
1308-
return _constantValue;
1309-
}
1310-
1311-
String get constantValueTruncated => truncateString(constantValue, 200);
1312-
13131299
@override
13141300
ModelElement get enclosingElement {
13151301
if (_enclosingClass == null) {
@@ -1441,11 +1427,34 @@ abstract class GetterSetterCombo implements ModelElement {
14411427
return allFeatures;
14421428
}
14431429

1444-
14451430
@override
14461431
ModelElement enclosingElement;
14471432
bool get isInherited;
14481433

1434+
String _constantValueBase;
1435+
String get constantValueBase {
1436+
if (_constantValueBase == null) {
1437+
if (element.computeNode() != null) {
1438+
var v = element.computeNode().toSource();
1439+
if (v == null) return null;
1440+
var string = v.substring(v.indexOf('=') + 1, v.length).trim();
1441+
_constantValueBase =
1442+
const HtmlEscape(HtmlEscapeMode.UNKNOWN).convert(string);
1443+
}
1444+
}
1445+
return _constantValueBase;
1446+
}
1447+
1448+
String linkifyWithModelType(String text) {
1449+
RegExp r = new RegExp("\\b${modelType.name}\\b");
1450+
return text?.replaceAll(r, modelType.linkedName);
1451+
}
1452+
1453+
String get constantValue => linkifyWithModelType(constantValueBase);
1454+
1455+
String get constantValueTruncated =>
1456+
linkifyWithModelType(truncateString(constantValueBase, 200));
1457+
14491458
/// Returns true if both accessors are synthetic.
14501459
bool get hasSyntheticAccessors {
14511460
if ((hasPublicGetter && getter.element.isSynthetic) ||
@@ -2868,16 +2877,16 @@ abstract class ModelElement extends Nameable
28682877
Library lib;
28692878
// TODO(jcollins-g): get rid of dynamic special casing
28702879
if (element.kind != ElementKind.DYNAMIC) {
2871-
lib = _findOrCreateEnclosingLibraryFor((element as dynamic).type.element);
2880+
lib = _findOrCreateEnclosingLibraryFor(
2881+
(element as dynamic).type.element);
28722882
}
2873-
_modelType = new ElementType(
2874-
(element as dynamic).type, new ModelElement.from((element as dynamic).type.element, lib));
2883+
_modelType = new ElementType((element as dynamic).type,
2884+
new ModelElement.from((element as dynamic).type.element, lib));
28752885
}
28762886
}
28772887
return _modelType;
28782888
}
28792889

2880-
28812890
@override
28822891
String get name => element.name;
28832892

@@ -4402,16 +4411,6 @@ class TopLevelVariable extends ModelElement
44024411
@override
44034412
bool get isInherited => false;
44044413

4405-
String get constantValue {
4406-
var v = _variable.computeNode().toSource();
4407-
if (v == null) return '';
4408-
var string = v.substring(v.indexOf('=') + 1, v.length).trim();
4409-
string = HTML_ESCAPE.convert(string);
4410-
return string.replaceAll(modelType.name, modelType.linkedName);
4411-
}
4412-
4413-
String get constantValueTruncated => truncateString(constantValue, 200);
4414-
44154414
@override
44164415
String get documentation {
44174416
// Verify that hasSetter and hasGetterNoSetter are mutually exclusive,

lib/src/utils.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,11 @@ String stripComments(String str) {
4444

4545
String truncateString(String str, int length) {
4646
if (str != null && str.length > length) {
47-
return str.substring(0, length) + '…';
48-
} else {
49-
return str;
47+
// Do not call this on unsanitized HTML.
48+
assert(!str.contains("<"));
49+
return '${str.substring(0, length)}…';
5050
}
51+
return str;
5152
}
5253

5354
String pluralize(String word, int count) => count == 1 ? word : '${word}s';

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,4 +350,4 @@ packages:
350350
source: hosted
351351
version: "2.1.13"
352352
sdks:
353-
dart: ">=1.23.0 <=2.0.0-dev.7.0"
353+
dart: ">=1.23.0 <=2.0.0-dev.8.0"

test/model_test.dart

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ void main() {
697697
});
698698

699699
test('correctly finds all the classes', () {
700-
expect(classes, hasLength(22));
700+
expect(classes, hasLength(24));
701701
});
702702

703703
test('abstract', () {
@@ -1711,6 +1711,8 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
17111711
prettyColorsConstant,
17121712
deprecated;
17131713

1714+
Field aStaticConstField, aName;
1715+
17141716
setUp(() {
17151717
greenConstant =
17161718
exLibrary.constants.firstWhere((c) => c.name == 'COLOR_GREEN');
@@ -1721,6 +1723,19 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
17211723
cat = exLibrary.constants.firstWhere((c) => c.name == 'MY_CAT');
17221724
deprecated =
17231725
exLibrary.constants.firstWhere((c) => c.name == 'deprecated');
1726+
Class Dog = exLibrary.allClasses.firstWhere((c) => c.name == 'Dog');
1727+
aStaticConstField =
1728+
Dog.allFields.firstWhere((f) => f.name == 'aStaticConstField');
1729+
aName = Dog.allFields.firstWhere((f) => f.name == 'aName');
1730+
});
1731+
1732+
test('substrings of the constant values type are not linked (#1535)', () {
1733+
expect(aName.constantValue,
1734+
'const ExtendedShortName(&quot;hello there&quot;)');
1735+
});
1736+
1737+
test('constant field values are escaped', () {
1738+
expect(aStaticConstField.constantValue, '&quot;A Constant Dog&quot;');
17241739
});
17251740

17261741
test('has a fully qualified name', () {

testing/test_package/lib/example.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ typedef String processMessage<T>(String msg);
6767

6868
typedef String ParameterizedTypedef<T>(T msg, int foo);
6969

70+
class ShortName {
71+
final String aParameter;
72+
const ShortName(this.aParameter);
73+
}
74+
75+
class ExtendedShortName extends ShortName {
76+
const ExtendedShortName(String aParameter) : super(aParameter);
77+
}
78+
7079
/// Referencing [processMessage] (or other things) here should not break
7180
/// enum constants ala #1445
7281
enum Animal {
@@ -246,6 +255,9 @@ class Dog implements Cat, E {
246255
final int aFinalField;
247256
static const String aStaticConstField = "A Constant Dog";
248257

258+
/// Verify link substitution in constants (#1535)
259+
static const ShortName aName = const ExtendedShortName("hello there");
260+
249261
@protected
250262
final int aProtectedFinalField;
251263

testing/test_package_docs/ex/Animal-class.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/Apple-class.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/B-class.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/COLOR-constant.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/COLOR_GREEN-constant.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/COLOR_ORANGE-constant.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/COMPLEX_COLOR-constant.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/Cat-class.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/CatString-class.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

testing/test_package_docs/ex/ConstantCat-class.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h5>library ex</h5>
4949
<li><a href="ex/Deprecated-class.html">Deprecated</a></li>
5050
<li><a href="ex/Dog-class.html">Dog</a></li>
5151
<li><a href="ex/E-class.html">E</a></li>
52+
<li><a href="ex/ExtendedShortName-class.html">ExtendedShortName</a></li>
5253
<li><a href="ex/F-class.html">F</a></li>
5354
<li><a href="ex/ForAnnotation-class.html">ForAnnotation</a></li>
5455
<li><a href="ex/HasAnnotation-class.html">HasAnnotation</a></li>
@@ -57,6 +58,7 @@ <h5>library ex</h5>
5758
<li><a href="ex/PublicClassExtendsPrivateClass-class.html">PublicClassExtendsPrivateClass</a></li>
5859
<li><a href="ex/PublicClassImplementsPrivateInterface-class.html">PublicClassImplementsPrivateInterface</a></li>
5960
<li><a href="ex/ShapeType-class.html">ShapeType</a></li>
61+
<li><a href="ex/ShortName-class.html">ShortName</a></li>
6062
<li><a href="ex/SpecializedDuration-class.html">SpecializedDuration</a></li>
6163
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
6264
<li><a href="ex/WithGeneric-class.html">WithGeneric</a></li>

0 commit comments

Comments
 (0)