Skip to content

Commit f9f6061

Browse files
authored
Miscellaneous generic function & head analyzer fixups (#1509)
* tests working at head * Works on mainline analyzer * New test * Cleanups * dartfmt
1 parent daaaf3d commit f9f6061

17 files changed

+174
-31
lines changed

lib/src/element_type.dart

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,17 @@ class ElementType {
6767
if (e == null || e.library == null) {
6868
return null;
6969
}
70-
Library lib = element.package.findLibraryFor(e);
71-
if (lib == null) {
72-
lib = new Library(e.library, element.package);
73-
}
70+
Library lib = new ModelElement.from(e.library, element.library);
7471
return (new ModelElement.from(e, lib));
7572
}
7673

7774
List<ElementType> get typeArguments {
7875
var type = _type;
7976
if (type is FunctionType) {
8077
Iterable<DartType> typeArguments;
81-
if (type.element is FunctionTypeAliasElement &&
82-
type.typeFormals.isEmpty) {
83-
// TODO(jmesserly): simplify check above; we should have a way
84-
// to find instantiated typedefs without consulting the element.
85-
// Also, it will not work if we support typedefs declared inside classes.
78+
if (element is! ModelFunctionAnonymous && type.typeFormals.isEmpty) {
79+
// TODO(jcollins-g): replace with if (FunctionType.isInstantiated) once
80+
// that's reliable and revealed through the interface.
8681
typeArguments = type.typeArguments;
8782
} else {
8883
typeArguments = type.typeFormals.map((f) => f.type);
@@ -100,7 +95,7 @@ class ElementType {
10095
var rt = _returnTypeCore;
10196
Library lib = element.package.findLibraryFor(rt.element);
10297
if (lib == null) {
103-
lib = new Library(rt.element.library, element.package);
98+
lib = new ModelElement.from(rt.element.library, element.library);
10499
}
105100
return new ElementType(rt, new ModelElement.from(rt.element, lib));
106101
}
@@ -132,9 +127,8 @@ class ElementType {
132127
ElementType _getElementTypeFrom(DartType f) {
133128
Library lib;
134129
// can happen if element is dynamic
135-
lib = element.package.findLibraryFor(f.element);
136-
if (lib == null && f.element.library != null) {
137-
lib = new Library(f.element.library, element.package);
130+
if (f.element.library != null) {
131+
lib = new ModelElement.from(f.element.library, element.library);
138132
}
139133
return new ElementType(f, new ModelElement.from(f.element, lib));
140134
}

lib/src/model.dart

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2221,8 +2221,13 @@ abstract class ModelElement extends Nameable
22212221
assert(e.name != '');
22222222
newModelElement = new ModelFunctionTypedef(e, library);
22232223
} else {
2224-
assert(e.name == '');
2225-
newModelElement = new ModelFunctionAnonymous(e, library);
2224+
if (e.enclosingElement is GenericTypeAliasElement) {
2225+
assert(e.enclosingElement.name != '');
2226+
newModelElement = new ModelFunctionTypedef(e, library);
2227+
} else {
2228+
assert(e.name == '');
2229+
newModelElement = new ModelFunctionAnonymous(e, library);
2230+
}
22262231
}
22272232
}
22282233
if (e is FunctionTypeAliasElement) {
@@ -2294,7 +2299,6 @@ abstract class ModelElement extends Nameable
22942299
}
22952300
}
22962301

2297-
22982302
if (newModelElement == null) throw "Unknown type ${e.runtimeType}";
22992303
if (enclosingClass != null) assert(newModelElement is Inheritable);
23002304
if (library != null) {
@@ -2902,7 +2906,8 @@ abstract class ModelElement extends Nameable
29022906
}
29032907
if (param.modelType.isFunctionType) {
29042908
var returnTypeName;
2905-
bool isTypedef = param.modelType.element is Typedef;
2909+
bool isTypedef = (param.modelType.element is Typedef ||
2910+
param.modelType.element is ModelFunctionTypedef);
29062911
if (isTypedef) {
29072912
returnTypeName = param.modelType.linkedName;
29082913
} else {
@@ -3218,13 +3223,6 @@ class ModelFunction extends ModelFunctionTyped {
32183223
return _func.isStatic;
32193224
}
32203225

3221-
@override
3222-
String get name {
3223-
if (element.enclosingElement is ParameterElement && super.name.isEmpty)
3224-
return element.enclosingElement.name;
3225-
return super.name;
3226-
}
3227-
32283226
@override
32293227
FunctionElement get _func => (element as FunctionElement);
32303228
}
@@ -3250,13 +3248,14 @@ class ModelFunctionAnonymous extends ModelFunctionTyped {
32503248
/// explicit typedef.
32513249
class ModelFunctionTypedef extends ModelFunctionTyped {
32523250
ModelFunctionTypedef(FunctionTypedElement element, Library library)
3253-
: super(element, library) {}
3251+
: super(element, library);
32543252

32553253
@override
32563254
String get name {
32573255
Element e = element;
32583256
while (e != null) {
3259-
if (e is FunctionTypeAliasElement) return e.name;
3257+
if (e is FunctionTypeAliasElement || e is GenericTypeAliasElement)
3258+
return e.name;
32603259
e = e.enclosingElement;
32613260
}
32623261
assert(false);

lib/src/model_utils.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ bool hasPrivateName(Element e) {
6060
if (e is LibraryElement &&
6161
(e.identifier.startsWith('dart:_') ||
6262
['dart:nativewrappers'].contains(e.identifier))) {
63-
return true;
63+
return true;
6464
}
6565
if (e is LibraryElement) {
6666
List<String> locationParts = e.location.components[0].split(slashes);

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ dev_dependencies:
2828
http: ^0.11.0
2929
meta: ^1.0.0
3030
pub_semver: ^1.0.0
31-
test: '^0.12.20+24'
31+
test: '^0.12.24'
3232
executables:
3333
dartdoc: null

test/model_test.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
10301030
Class classB, klass, HasGenerics, Cat, CatString, TypedFunctionsWithoutTypedefs;
10311031
Method m1, isGreaterThan, m4, m5, m6, m7, convertToMap, abstractMethod;
10321032
Method inheritedClear, testGeneric, testGenericMethod;
1033-
Method getAFunctionReturningVoid;
1033+
Method getAFunctionReturningVoid, getAFunctionReturningBool;
10341034

10351035
setUp(() {
10361036
klass = exLibrary.classes.singleWhere((c) => c.name == 'Klass');
@@ -1064,6 +1064,7 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
10641064
.singleWhere((m) => m.name == 'convertToMap');
10651065
TypedFunctionsWithoutTypedefs = exLibrary.classes.singleWhere((c) => c.name == 'TypedFunctionsWithoutTypedefs');
10661066
getAFunctionReturningVoid = TypedFunctionsWithoutTypedefs.instanceMethods.singleWhere((m) => m.name == 'getAFunctionReturningVoid');
1067+
getAFunctionReturningBool = TypedFunctionsWithoutTypedefs.instanceMethods.singleWhere((m) => m.name == 'getAFunctionReturningBool');
10671068
});
10681069

10691070
tearDown(() {
@@ -1082,6 +1083,15 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
10821083
expect(getAFunctionReturningVoid.linkedReturnType, equals('Function(<span class="parameter" id="getAFunctionReturningVoid-param-"><span class="type-annotation">T1</span></span> <span class="parameter" id="getAFunctionReturningVoid-param-"><span class="type-annotation">T2</span></span>)'));
10831084
}, skip: 'blocked on https://github.com/dart-lang/sdk/issues/30146');
10841085

1086+
test('verify type parameters to anonymous functions are distinct from normal parameters and instantiated type parameters from method', () {
1087+
var matcher = new RegExp('Function&lt;T4&gt;\\(<span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">[^<]*</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">[^<]*</span></span>\\)');
1088+
expect(matcher.hasMatch(getAFunctionReturningBool.linkedReturnType), isTrue);
1089+
});
1090+
1091+
test('verify type parameters to anonymous functions are distinct from normal parameters and instantiated type parameters from method, displayed correctly', () {
1092+
expect(getAFunctionReturningBool.linkedReturnType, equals('Function&lt;T4&gt;(<span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">T1</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">T4</span></span>)'));
1093+
}, skip: 'blocked on https://github.com/dart-lang/sdk/issues/30146');
1094+
10851095
test('has a fully qualified name', () {
10861096
expect(m1.fullyQualifiedName, 'ex.B.m1');
10871097
});

testing/test_package/lib/example.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ abstract class TypedFunctionsWithoutTypedefs {
434434
void Function(T1, T2) getAFunctionReturningVoid<T1, T2>(
435435
void callback(T1 argument1, T2 argument2));
436436

437+
/// This helps us make sure we get both the empty and the non-empty
438+
/// case right for anonymous functions.
439+
bool Function<T4>(String, T1, T4) getAFunctionReturningBool<T1, T2, T3>();
440+
437441
/// Returns a complex typedef that includes some anonymous typed functions.
438442
aComplexTypedef getAComplexTypedef<A4, A5, A6>();
439443
}

testing/test_package_docs/ex/TypedFunctionsWithoutTypedefs-class.html

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,22 @@ <h2>Methods</h2>
148148
<dl class="callables">
149149
<dt id="getAComplexTypedef" class="callable">
150150
<span class="name"><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></span><span class="signature">&lt;A4, A5, A6&gt;(<wbr>)
151-
<span class="returntype parameter">&#8594; Function(<span class="parameter" id="aComplexTypedef-param-"><span class="type-annotation">A3</span></span> <span class="parameter" id="aComplexTypedef-param-"><span class="type-annotation">A3</span></span>)</span>
151+
<span class="returntype parameter">&#8594; <a href="ex/aComplexTypedef.html">aComplexTypedef</a></span>
152152
</span>
153153
</dt>
154154
<dd>
155155
Returns a complex typedef that includes some anonymous typed functions.
156156

157+
</dd>
158+
<dt id="getAFunctionReturningBool" class="callable">
159+
<span class="name"><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></span><span class="signature">&lt;T1, T2, T3&gt;(<wbr>)
160+
<span class="returntype parameter">&#8594; Function&lt;T4&gt;(<span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span>)</span>
161+
</span>
162+
</dt>
163+
<dd>
164+
This helps us make sure we get both the empty and the non-empty
165+
case right for anonymous functions.
166+
157167
</dd>
158168
<dt id="getAFunctionReturningVoid" class="callable">
159169
<span class="name"><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></span><span class="signature">&lt;T1, T2&gt;(<wbr><span class="parameter" id="getAFunctionReturningVoid-param-callback"><span class="type-annotation">void</span> <span class="parameter-name">callback</span>(<span class="parameter" id="callback-param-argument1"><span class="type-annotation">T1</span> <span class="parameter-name">argument1</span>, </span> <span class="parameter" id="callback-param-argument2"><span class="type-annotation">T2</span> <span class="parameter-name">argument2</span></span>)</span>)
@@ -219,6 +229,7 @@ <h5>class TypedFunctionsWithoutTypedefs</h5>
219229

220230
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-methods">Methods</a></li>
221231
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></li>
232+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></li>
222233
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></li>
223234
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/noSuchMethod.html">noSuchMethod</a></li>
224235
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/toString.html">toString</a></li>

testing/test_package_docs/ex/TypedFunctionsWithoutTypedefs/TypedFunctionsWithoutTypedefs.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ <h5>class TypedFunctionsWithoutTypedefs</h5>
5050

5151
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-methods">Methods</a></li>
5252
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></li>
53+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></li>
5354
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></li>
5455
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/noSuchMethod.html">noSuchMethod</a></li>
5556
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/toString.html">toString</a></li>

testing/test_package_docs/ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ <h5>class TypedFunctionsWithoutTypedefs</h5>
5050

5151
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-methods">Methods</a></li>
5252
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></li>
53+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></li>
5354
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></li>
5455
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/noSuchMethod.html">noSuchMethod</a></li>
5556
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/toString.html">toString</a></li>
@@ -64,7 +65,7 @@ <h5>class TypedFunctionsWithoutTypedefs</h5>
6465

6566
<div class="col-xs-12 col-sm-9 col-md-8 main-content">
6667
<section class="multi-line-signature">
67-
<span class="returntype">Function(<span class="parameter" id="aComplexTypedef-param-"><span class="type-annotation">A3</span></span> <span class="parameter" id="aComplexTypedef-param-"><span class="type-annotation">A3</span></span>)</span>
68+
<span class="returntype"><a href="ex/aComplexTypedef.html">aComplexTypedef</a></span>
6869
<span class="name ">getAComplexTypedef</span>&lt;A4, A5, A6&gt;(<wbr>)
6970
</section>
7071
<section class="desc markdown">
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<meta name="description" content="API docs for the getAFunctionReturningBool method from the TypedFunctionsWithoutTypedefs class, for the Dart programming language.">
8+
<title>getAFunctionReturningBool method - TypedFunctionsWithoutTypedefs class - ex library - Dart API</title>
9+
<!-- required because all the links are pseudo-absolute -->
10+
<base href="../..">
11+
12+
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500,400i,400,300|Source+Sans+Pro:400,300,700" rel="stylesheet">
13+
<link rel="stylesheet" href="static-assets/github.css">
14+
<link rel="stylesheet" href="static-assets/styles.css">
15+
<link rel="icon" href="static-assets/favicon.png">
16+
17+
</head>
18+
19+
<body>
20+
21+
<div id="overlay-under-drawer"></div>
22+
23+
<header id="title">
24+
<button id="sidenav-left-toggle" type="button">&nbsp;</button>
25+
<ol class="breadcrumbs gt-separated dark hidden-xs">
26+
<li><a href="index.html">test_package</a></li>
27+
<li><a href="ex/ex-library.html">ex</a></li>
28+
<li><a href="ex/TypedFunctionsWithoutTypedefs-class.html">TypedFunctionsWithoutTypedefs</a></li>
29+
<li class="self-crumb">abstract method getAFunctionReturningBool&lt;T1, T2, T3&gt;</li>
30+
</ol>
31+
<div class="self-name">getAFunctionReturningBool</div>
32+
<form class="search navbar-right" role="search">
33+
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
34+
</form>
35+
</header>
36+
37+
<main>
38+
39+
<div class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left">
40+
<h5>class TypedFunctionsWithoutTypedefs</h5>
41+
<ol>
42+
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#constructors">Constructors</a></li>
43+
<li><a href="ex/TypedFunctionsWithoutTypedefs/TypedFunctionsWithoutTypedefs.html">TypedFunctionsWithoutTypedefs</a></li>
44+
45+
<li class="section-title inherited">
46+
<a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-properties">Properties</a>
47+
</li>
48+
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/hashCode.html">hashCode</a></li>
49+
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/runtimeType.html">runtimeType</a></li>
50+
51+
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-methods">Methods</a></li>
52+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></li>
53+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></li>
54+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></li>
55+
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/noSuchMethod.html">noSuchMethod</a></li>
56+
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/toString.html">toString</a></li>
57+
58+
<li class="section-title inherited"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#operators">Operators</a></li>
59+
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/operator_equals.html">operator ==</a></li>
60+
61+
62+
63+
</ol>
64+
</div><!--/.sidebar-offcanvas-->
65+
66+
<div class="col-xs-12 col-sm-9 col-md-8 main-content">
67+
<section class="multi-line-signature">
68+
<span class="returntype">Function&lt;T4&gt;(<span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span> <span class="parameter" id="getAFunctionReturningBool-param-"><span class="type-annotation">String</span></span>)</span>
69+
<span class="name ">getAFunctionReturningBool</span>&lt;T1, T2, T3&gt;(<wbr>)
70+
</section>
71+
<section class="desc markdown">
72+
<p>This helps us make sure we get both the empty and the non-empty
73+
case right for anonymous functions.</p>
74+
</section>
75+
76+
77+
78+
</div> <!-- /.main-content -->
79+
80+
<div class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
81+
<h5>method getAFunctionReturningBool</h5>
82+
</div><!--/.sidebar-offcanvas-->
83+
84+
</main>
85+
86+
<footer>
87+
<span class="no-break">
88+
test_package 0.0.1
89+
</span>
90+
&bull;
91+
<span class="copyright no-break">
92+
<a href="http://creativecommons.org/licenses/by-sa/4.0/">cc license</a>
93+
</span>
94+
95+
</footer>
96+
97+
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
98+
<script src="static-assets/typeahead.bundle.min.js"></script>
99+
<script src="static-assets/highlight.pack.js"></script>
100+
<script src="static-assets/URI.js"></script>
101+
<script src="static-assets/script.js"></script>
102+
103+
104+
</body>
105+
106+
</html>

testing/test_package_docs/ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ <h5>class TypedFunctionsWithoutTypedefs</h5>
5050

5151
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-methods">Methods</a></li>
5252
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></li>
53+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></li>
5354
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></li>
5455
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/noSuchMethod.html">noSuchMethod</a></li>
5556
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/toString.html">toString</a></li>

testing/test_package_docs/ex/TypedFunctionsWithoutTypedefs/hashCode.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ <h5>class TypedFunctionsWithoutTypedefs</h5>
5050

5151
<li class="section-title"><a href="ex/TypedFunctionsWithoutTypedefs-class.html#instance-methods">Methods</a></li>
5252
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAComplexTypedef.html">getAComplexTypedef</a></li>
53+
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningBool.html">getAFunctionReturningBool</a></li>
5354
<li><a href="ex/TypedFunctionsWithoutTypedefs/getAFunctionReturningVoid.html">getAFunctionReturningVoid</a></li>
5455
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/noSuchMethod.html">noSuchMethod</a></li>
5556
<li class="inherited"><a href="ex/TypedFunctionsWithoutTypedefs/toString.html">toString</a></li>

0 commit comments

Comments
 (0)