Index: pkg/front_end/lib/src/fasta/source/outline_builder.dart |
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart |
index 04486e5594ece7e6786f75cff6fb6434dd6924fb..9458cde75336c55b51ce4e4c030f24de47884895 100644 |
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart |
@@ -285,13 +285,7 @@ class OutlineBuilder extends UnhandledListener { |
Token implementsKeyword, |
Token endToken) { |
debugEvent("endClassDeclaration"); |
- |
- String documentationComment = null; |
- if (beginToken.precedingComments != null) { |
- documentationComment = beginToken.precedingComments.lexeme; |
- // TODO(scheglov): Add support for line comments. |
- } |
- |
+ String documentationComment = _getDocumentationComment(beginToken); |
List<TypeBuilder> interfaces = popList(interfacesCount); |
TypeBuilder supertype = pop(); |
List<TypeVariableBuilder> typeVariables = pop(); |
@@ -464,6 +458,7 @@ class OutlineBuilder extends UnhandledListener { |
void endNamedMixinApplication(Token beginToken, Token classKeyword, |
Token equals, Token implementsKeyword, Token endToken) { |
debugEvent("endNamedMixinApplication"); |
+ String documentationComment = _getDocumentationComment(beginToken); |
List<TypeBuilder> interfaces = popIfNotNull(implementsKeyword); |
TypeBuilder mixinApplication = pop(); |
List<TypeVariableBuilder> typeVariables = pop(); |
@@ -471,8 +466,8 @@ class OutlineBuilder extends UnhandledListener { |
String name = pop(); |
int modifiers = Modifier.validate(pop()); |
List<MetadataBuilder> metadata = pop(); |
- library.addNamedMixinApplication(metadata, name, typeVariables, modifiers, |
- mixinApplication, interfaces, charOffset); |
+ library.addNamedMixinApplication(documentationComment, metadata, name, |
+ typeVariables, modifiers, mixinApplication, interfaces, charOffset); |
checkEmpty(beginToken.charOffset); |
} |
@@ -916,6 +911,34 @@ class OutlineBuilder extends UnhandledListener { |
return removeNativeClause(identifiers, stringExpectedAfterNative); |
} |
+ /// Return the documentation comment for the entity that starts at the |
+ /// given [token], or `null` if there is no preceding documentation comment. |
+ String _getDocumentationComment(Token token) { |
+ Token docToken = token.precedingComments; |
+ if (docToken == null) return null; |
+ bool inSlash = false; |
+ var buffer = new StringBuffer(); |
+ while (docToken != null) { |
+ String lexeme = docToken.lexeme; |
+ if (lexeme.startsWith('/**')) { |
+ inSlash = false; |
+ buffer.clear(); |
+ buffer.write(lexeme); |
+ } else if (lexeme.startsWith('///')) { |
+ if (!inSlash) { |
+ inSlash = true; |
+ buffer.clear(); |
+ } |
+ if (buffer.isNotEmpty) { |
+ buffer.writeln(); |
+ } |
+ buffer.write(lexeme); |
+ } |
+ docToken = docToken.next; |
+ } |
+ return buffer.toString(); |
+ } |
+ |
@override |
void debugEvent(String name) { |
// printEvent(name); |