Skip to content

Commit 94d12a5

Browse files
committed
Merge branch 'master' of github.com:dart-lang/dartdoc into strong-mode-future-or
2 parents c98c386 + 56a78e0 commit 94d12a5

Some content is hidden

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

65 files changed

+1743
-64
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55
[future_or]: https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#1240---12-06-2017
66

7+
## 0.14.1
8+
* Add better support for GenericFunctionTypeElementImpl (#1506, #1509)
9+
* Fix up dartdoc so it can be used with the head analyzer again (#1509)
10+
* SDK constraint fixed (#1503)
11+
712
## 0.14.0
813
* Fix multiple issues with properties and top level variables in cases
914
of split inheritance (#1394, #1116)

appveyor.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ install:
99
- set PATH=%PATH%;C:\tools\dart-sdk\bin
1010
- set PATH=%PATH%;%APPDATA%\Pub\Cache\bin
1111
- pub get
12+
- cmd: cd testing
13+
- cmd: cd test_package
14+
- cmd: pub get
15+
- cmd: cd ..
16+
- cmd: cd ..
1217

1318
build: off
1419

lib/src/element_type.dart

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,38 @@ class ElementType {
2121

2222
bool get isFunctionType => (_type is FunctionType);
2323

24-
bool get isParameterizedType {
25-
if (_type is FunctionType) {
26-
return typeArguments.isNotEmpty;
27-
} else if (_type is ParameterizedType) {
28-
return (_type as ParameterizedType).typeArguments.isNotEmpty;
29-
}
30-
return false;
31-
}
24+
bool get isParameterizedType => (_type is ParameterizedType);
3225

3326
bool get isParameterType => (_type is TypeParameterType);
3427

3528
String get linkedName {
36-
if (_linkedName != null) return _linkedName;
29+
if (_linkedName == null) {
30+
StringBuffer buf = new StringBuffer();
3731

38-
StringBuffer buf = new StringBuffer();
39-
40-
if (isParameterType) {
41-
buf.write(name);
42-
} else {
43-
buf.write(element.linkedName);
44-
}
45-
46-
// not TypeParameterType or Void or Union type
47-
if (isParameterizedType) {
48-
if (typeArguments.every((t) => t.linkedName == 'dynamic')) {
49-
_linkedName = buf.toString();
50-
return _linkedName;
32+
if (isParameterType) {
33+
buf.write(name);
34+
} else {
35+
buf.write(element.linkedName);
5136
}
52-
if (typeArguments.isNotEmpty) {
53-
buf.write('<');
54-
buf.writeAll(typeArguments.map((t) => t.linkedName), ', ');
55-
buf.write('>');
37+
38+
// not TypeParameterType or Void or Union type
39+
if (isParameterizedType) {
40+
if (!typeArguments.every((t) => t.linkedName == 'dynamic') &&
41+
typeArguments.isNotEmpty) {
42+
buf.write('<');
43+
buf.writeAll(typeArguments.map((t) => t.linkedName), ', ');
44+
buf.write('>');
45+
}
46+
// Hide parameters if there's a an explicit typedef behind this
47+
// element, but if there is no typedef, be explicit.
48+
if (element is ModelFunctionAnonymous) {
49+
buf.write('(');
50+
buf.write(element.linkedParams());
51+
buf.write(')');
52+
}
5653
}
54+
_linkedName = buf.toString();
5755
}
58-
_linkedName = buf.toString();
59-
6056
return _linkedName;
6157
}
6258

@@ -71,22 +67,17 @@ class ElementType {
7167
if (e == null || e.library == null) {
7268
return null;
7369
}
74-
Library lib = element.package.findLibraryFor(e);
75-
if (lib == null) {
76-
lib = new Library(e.library, element.package);
77-
}
70+
Library lib = new ModelElement.from(e.library, element.library);
7871
return (new ModelElement.from(e, lib));
7972
}
8073

8174
List<ElementType> get typeArguments {
8275
var type = _type;
8376
if (type is FunctionType) {
8477
Iterable<DartType> typeArguments;
85-
if (type.element is FunctionTypeAliasElement &&
86-
type.typeFormals.isEmpty) {
87-
// TODO(jmesserly): simplify check above; we should have a way
88-
// to find instantiated typedefs without consulting the element.
89-
// 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.
9081
typeArguments = type.typeArguments;
9182
} else {
9283
typeArguments = type.typeFormals.map((f) => f.type);
@@ -104,7 +95,7 @@ class ElementType {
10495
var rt = _returnTypeCore;
10596
Library lib = element.package.findLibraryFor(rt.element);
10697
if (lib == null) {
107-
lib = new Library(rt.element.library, element.package);
98+
lib = new ModelElement.from(rt.element.library, element.library);
10899
}
109100
return new ElementType(rt, new ModelElement.from(rt.element, lib));
110101
}
@@ -136,9 +127,8 @@ class ElementType {
136127
ElementType _getElementTypeFrom(DartType f) {
137128
Library lib;
138129
// can happen if element is dynamic
139-
lib = element.package.findLibraryFor(f.element);
140-
if (lib == null && f.element.library != null) {
141-
lib = new Library(f.element.library, element.package);
130+
if (f.element.library != null) {
131+
lib = new ModelElement.from(f.element.library, element.library);
142132
}
143133
return new ElementType(f, new ModelElement.from(f.element, lib));
144134
}

lib/src/model.dart

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ class Class extends ModelElement implements EnclosedElement {
769769

770770
@override
771771
String get nameWithGenerics {
772-
if (!modelType.isParameterizedType) return name;
772+
if (!modelType.isParameterizedType || _typeParameters.isEmpty) return name;
773773
return '$name&lt;${_typeParameters.map((t) => t.name).join(', ')}&gt;';
774774
}
775775

@@ -2216,6 +2216,19 @@ abstract class ModelElement extends Nameable
22162216
}
22172217
if (e is FunctionElement) {
22182218
newModelElement = new ModelFunction(e, library);
2219+
} else if (e is GenericFunctionTypeElement) {
2220+
if (e is FunctionTypeAliasElement) {
2221+
assert(e.name != '');
2222+
newModelElement = new ModelFunctionTypedef(e, library);
2223+
} else {
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+
}
2231+
}
22192232
}
22202233
if (e is FunctionTypeAliasElement) {
22212234
newModelElement = new Typedef(e, library);
@@ -2285,10 +2298,6 @@ abstract class ModelElement extends Nameable
22852298
}
22862299
}
22872300
}
2288-
// TODO(jcollins-g): Consider subclass for ModelFunctionTyped.
2289-
if (e is GenericFunctionTypeElement) {
2290-
newModelElement = new ModelFunctionTyped(e, library);
2291-
}
22922301

22932302
if (newModelElement == null) throw "Unknown type ${e.runtimeType}";
22942303
if (enclosingClass != null) assert(newModelElement is Inheritable);
@@ -2897,7 +2906,8 @@ abstract class ModelElement extends Nameable
28972906
}
28982907
if (param.modelType.isFunctionType) {
28992908
var returnTypeName;
2900-
bool isTypedef = param.modelType.element is Typedef;
2909+
bool isTypedef = (param.modelType.element is Typedef ||
2910+
param.modelType.element is ModelFunctionTypedef);
29012911
if (isTypedef) {
29022912
returnTypeName = param.modelType.linkedName;
29032913
} else {
@@ -3203,6 +3213,7 @@ abstract class ModelElement extends Nameable
32033213
}
32043214
}
32053215

3216+
/// A [ModelElement] for a [FunctionElement] that isn't part of a type definition.
32063217
class ModelFunction extends ModelFunctionTyped {
32073218
ModelFunction(FunctionElement element, Library library)
32083219
: super(element, library);
@@ -3216,6 +3227,42 @@ class ModelFunction extends ModelFunctionTyped {
32163227
FunctionElement get _func => (element as FunctionElement);
32173228
}
32183229

3230+
/// A [ModelElement] for a [GenericModelFunctionElement] that is an
3231+
/// explicit typedef.
3232+
///
3233+
/// Distinct from ModelFunctionTypedef in that it doesn't
3234+
/// have a name, but we document it as "Function" to match how these are
3235+
/// written in declarations.
3236+
class ModelFunctionAnonymous extends ModelFunctionTyped {
3237+
ModelFunctionAnonymous(FunctionTypedElement element, Library library)
3238+
: super(element, library) {}
3239+
3240+
@override
3241+
String get name => 'Function';
3242+
3243+
@override
3244+
bool get isPublic => false;
3245+
}
3246+
3247+
/// A [ModelElement] for a [GenericModelFunctionElement] that is part of an
3248+
/// explicit typedef.
3249+
class ModelFunctionTypedef extends ModelFunctionTyped {
3250+
ModelFunctionTypedef(FunctionTypedElement element, Library library)
3251+
: super(element, library);
3252+
3253+
@override
3254+
String get name {
3255+
Element e = element;
3256+
while (e != null) {
3257+
if (e is FunctionTypeAliasElement || e is GenericTypeAliasElement)
3258+
return e.name;
3259+
e = e.enclosingElement;
3260+
}
3261+
assert(false);
3262+
return super.name;
3263+
}
3264+
}
3265+
32193266
class ModelFunctionTyped extends ModelElement
32203267
with SourceCodeMixin
32213268
implements EnclosedElement {
@@ -3238,13 +3285,6 @@ class ModelFunctionTyped extends ModelElement
32383285

32393286
String get fileName => "$name.html";
32403287

3241-
@override
3242-
String get name {
3243-
if (element.enclosingElement is ParameterElement && super.name.isEmpty)
3244-
return element.enclosingElement.name;
3245-
return super.name;
3246-
}
3247-
32483288
@override
32493289
String get href {
32503290
if (canonicalLibrary == null) return null;
@@ -4590,7 +4630,7 @@ class Typedef extends ModelElement
45904630

45914631
@override
45924632
String get nameWithGenerics {
4593-
if (!modelType.isParameterizedType) return name;
4633+
if (!modelType.isParameterizedType || _typeParameters.isEmpty) return name;
45944634
return '$name&lt;${_typeParameters.map((t) => t.name).join(', ')}&gt;';
45954635
}
45964636

lib/src/model_utils.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,12 @@ bool isInExportedLibraries(
5454

5555
final RegExp slashes = new RegExp('[\/]');
5656
bool hasPrivateName(Element e) {
57-
if (e.name.startsWith('_') ||
58-
(e is LibraryElement &&
59-
(e.identifier == 'dart:_internal' ||
60-
e.identifier == 'dart:nativewrappers'))) {
57+
if (e.name.startsWith('_')) {
58+
return true;
59+
}
60+
if (e is LibraryElement &&
61+
(e.identifier.startsWith('dart:_') ||
62+
['dart:nativewrappers'].contains(e.identifier))) {
6163
return true;
6264
}
6365
if (e is LibraryElement) {

pubspec.lock

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ packages:
121121
url: "https://pub.dartlang.org"
122122
source: hosted
123123
version: "1.0.0"
124+
js:
125+
description:
126+
name: js
127+
url: "https://pub.dartlang.org"
128+
source: hosted
129+
version: "0.6.1"
124130
kernel:
125131
description:
126132
name: kernel
@@ -169,6 +175,12 @@ packages:
169175
url: "https://pub.dartlang.org"
170176
source: hosted
171177
version: "1.1.0"
178+
node_preamble:
179+
description:
180+
name: node_preamble
181+
url: "https://pub.dartlang.org"
182+
source: hosted
183+
version: "1.4.0"
172184
package_config:
173185
description:
174186
name: package_config
@@ -294,7 +306,7 @@ packages:
294306
name: test
295307
url: "https://pub.dartlang.org"
296308
source: hosted
297-
version: "0.12.20+13"
309+
version: "0.12.24+6"
298310
tuple:
299311
description:
300312
name: tuple
@@ -350,4 +362,4 @@ packages:
350362
source: hosted
351363
version: "2.1.12"
352364
sdks:
353-
dart: ">=1.23.0-dev.11.5 <2.0.0"
365+
dart: ">=1.23.0 <=2.0.0-dev.2.0"

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.0
31+
test: '^0.12.24'
3232
executables:
3333
dartdoc: null

0 commit comments

Comments
 (0)