Index: sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart |
index cede225be99a109917dbbcaa04c9047e58434ebd..3eeb36b0f941409646506034f03fad9a22b06239 100644 |
--- a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart |
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart |
@@ -113,3 +113,49 @@ class HierarchyIterator implements Iterator<ClassMirror> { |
bool get hasNext => !queue.isEmpty || object != null; |
} |
+ |
+final RegExp _singleLineCommentStart = new RegExp(r'^///? ?(.*)'); |
+final RegExp _multiLineCommentStartEnd = |
+ new RegExp(r'^/\*\*? ?([\s\S]*)\*/$', multiLine: true); |
+final RegExp _multiLineCommentLineStart = new RegExp(r'^[ \t]*\* ?(.*)'); |
+ |
+/** |
+ * Pulls the raw text out of a comment (i.e. removes the comment |
+ * characters). |
+ */ |
+String stripComment(String comment) { |
+ Match match = _singleLineCommentStart.firstMatch(comment); |
+ if (match != null) { |
+ return match[1]; |
+ } |
+ match = _multiLineCommentStartEnd.firstMatch(comment); |
+ if (match != null) { |
+ comment = match[1]; |
+ bool first = true; |
+ var sb = new StringBuffer(); |
+ Iterator<String> lines = comment.split('\n').iterator(); |
+ while (lines.hasNext) { |
ahe
2013/01/08 11:59:43
lines.moveNext()
Johnni Winther
2013/01/08 13:39:46
Changed to use List and index.
|
+ String line = lines.next(); |
+ if (first) { |
+ sb.add(line); // Add the first line unprocessed. |
+ first = false; |
+ continue; |
+ } |
+ sb.add('\n'); |
+ match = _multiLineCommentLineStart.firstMatch(line); |
+ if (match != null) { |
+ sb.add(match[1]); |
+ } else if (lines.hasNext || !line.trim().isEmpty) { |
ahe
2013/01/08 11:59:43
This wont work with the new iterators :-(
Johnni Winther
2013/01/08 13:39:46
Refactored.
|
+ // Do not add the last line if it only contains white space. |
+ // This interprets cases like |
+ // /* |
+ // * Foo |
+ // */ |
+ // as "\nFoo\n" and not as "\nFoo\n ". |
+ sb.add(line); |
+ } |
+ } |
+ return sb.toString(); |
+ } |
+ throw new ArgumentError('Invalid comment $comment'); |
+} |