Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(644)

Unified Diff: lib/src/closure/closure_annotation.dart

Issue 1676463002: Type annotations instead of closure comments. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: merged master Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | lib/src/closure/closure_annotator.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/closure/closure_annotation.dart
diff --git a/lib/src/closure/closure_annotation.dart b/lib/src/closure/closure_annotation.dart
index ef502bca2c2c8636286614e271257d435a85fe2e..b139a67706de9411e14699838552f5bd389c9f18 100644
--- a/lib/src/closure/closure_annotation.dart
+++ b/lib/src/closure/closure_annotation.dart
@@ -2,13 +2,14 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'closure_type.dart';
+import '../js/js_ast.dart' as JS show TypeRef, JsTypeRef, ClosureTypePrinter;
/// Set of closure annotations that can be [toString]ed to a single JsDoc comment.
/// See https://developers.google.com/closure/compiler/docs/js-for-compiler
///
/// TODO(ochafik): Support inclusion of 'normal' comments (including @param comments).
class ClosureAnnotation {
+ final String comment;
final bool isConst;
final bool isConstructor;
final bool isFinal;
@@ -19,18 +20,19 @@ class ClosureAnnotation {
final bool isProtected;
final bool isStruct;
final bool isTypedef;
- final ClosureType lendsToType;
- final ClosureType returnType;
- final ClosureType superType;
- final ClosureType thisType;
- final ClosureType throwsType;
- final ClosureType type;
- final List<ClosureType> interfaces;
+ final JS.TypeRef lendsToType;
+ final JS.TypeRef returnType;
+ final JS.TypeRef superType;
+ final JS.TypeRef thisType;
+ final JS.TypeRef throwsType;
+ final JS.TypeRef type;
+ final List<JS.TypeRef> interfaces;
final List<String> templates;
- final Map<String, ClosureType> paramTypes;
+ final Map<String, JS.TypeRef> paramTypes;
ClosureAnnotation(
- {this.interfaces: const [],
+ {this.comment,
+ this.interfaces: const [],
this.isConst: false,
this.isConstructor: false,
this.isFinal: false,
@@ -61,21 +63,24 @@ class ClosureAnnotation {
String toString([String indent = '']) =>
_cachedString.replaceAll('\n', '\n$indent');
+ String _print(JS.TypeRef t) =>
+ (new JS.ClosureTypePrinter()..visit(t)).toString();
+
String __cachedString;
String get _cachedString {
if (__cachedString == null) {
- bool isNonWildcard(ClosureType t) =>
- t != null && !t.isAll && !t.isUnknown;
+ bool isNonWildcard(JS.TypeRef t) => t != null && !t.isAny && !t.isUnknown;
var lines = <String>[];
+ if (comment != null) lines.addAll(comment.split('\n'));
if (templates != null && templates.isNotEmpty) {
lines.add('@template ${templates.join(', ')}');
}
- if (thisType != null) lines.add('@this {$thisType}');
+ if (thisType != null) lines.add('@this {${_print(thisType)}}');
if (isOverride) lines.add('@override');
if (isNoSideEffects) lines.add('@nosideeffects');
if (isNoCollapse) lines.add('@nocollapse');
- if (lendsToType != null) lines.add('@lends {$lendsToType}');
+ if (lendsToType != null) lines.add('@lends {${_print(lendsToType)}}');
{
var typeHolders = <String>[];
@@ -86,7 +91,7 @@ class ClosureAnnotation {
if (isTypedef) typeHolders.add('@typedef');
if (isNonWildcard(type)) {
if (typeHolders.isEmpty) typeHolders.add('@type');
- typeHolders.add('{$type}');
+ typeHolders.add('{${_print(type)}}');
}
if (!typeHolders.isEmpty) lines.add(typeHolders.join(' '));
}
@@ -96,22 +101,29 @@ class ClosureAnnotation {
if (isConstructor) constructorLine.add('@constructor');
if (isStruct) constructorLine.add('@struct');
if (isNonWildcard(superType)) {
- constructorLine.add('@extends {$superType}');
+ constructorLine.add('@extends {${_print(superType)}}');
}
if (constructorLine.isNotEmpty) lines.add(constructorLine.join(' '));
}
- for (var interface in interfaces) {
- if (isNonWildcard(interface)) lines.add('@implements {$interface}');
+ if (interfaces != null) {
+ for (var interface in interfaces) {
+ if (isNonWildcard(interface))
+ lines.add('@implements {${_print(interface)}}');
+ }
}
- paramTypes.forEach((String paramName, ClosureType paramType) {
- // Must output params even with wildcard type.
- lines.add('@param {$paramType} $paramName');
- });
- if (isNonWildcard(returnType)) lines.add('@return {$returnType}');
- if (isNonWildcard(throwsType)) lines.add('@throws {$throwsType}');
+ if (paramTypes != null) {
+ paramTypes.forEach((String paramName, JS.TypeRef paramType) {
+ // Must output params even with wildcard type.
+ lines.add('@param {${_print(paramType)}} $paramName');
+ });
+ }
+ if (isNonWildcard(returnType))
+ lines.add('@return {${_print(returnType)}}');
+ if (isNonWildcard(throwsType))
+ lines.add('@throws {${_print(throwsType)}}');
if (lines.length == 0) return '';
if (lines.length == 1) return '/** ${lines.single} */';
« no previous file with comments | « no previous file | lib/src/closure/closure_annotator.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698