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

Unified Diff: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/utilities/dartdoc/DartDocUtilities.java

Issue 8817009: Preliminary support for dartdoc hovers. Future CLs will give us richer hover information and styl... (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years 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
Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/utilities/dartdoc/DartDocUtilities.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/utilities/dartdoc/DartDocUtilities.java (revision 0)
+++ editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/utilities/dartdoc/DartDocUtilities.java (revision 0)
@@ -0,0 +1,112 @@
+package com.google.dart.tools.core.utilities.dartdoc;
+
+import com.google.dart.compiler.ast.DartUnit;
+import com.google.dart.tools.core.model.CompilationUnit;
+import com.google.dart.tools.core.model.DartDocumentable;
+import com.google.dart.tools.core.model.DartElement;
+import com.google.dart.tools.core.model.DartModelException;
+import com.google.dart.tools.core.model.SourceRange;
+import com.google.dart.tools.core.utilities.ast.DartElementLocator;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+
+/**
+ * A utility class for dealing with Dart doc text.
+ */
+public final class DartDocUtilities {
+
+ /**
+ * Convert from a Dart doc string with slashes and stars to a plain text representation of the
+ * comment.
+ *
+ * @param str
+ * @return
+ */
+ public static String cleanDartDoc(String str) {
+ // Remove /** */
+ if (str.startsWith("/**")) {
+ str = str.substring(3);
+ }
+
+ if (str.endsWith("*/")) {
+ str = str.substring(0, str.length() - 2);
+ }
+
+ str = str.trim();
+
+ // Remove leading '* ', and turn empty lines into \n's.
+ StringBuilder builder = new StringBuilder();
+
+ BufferedReader reader = new BufferedReader(new StringReader(str));
+
+ try {
+ String line = reader.readLine();
+ int lineCount = 0;
+
+ while (line != null) {
+ line = line.trim();
+
+ if (line.startsWith("*")) {
+ line = line.substring(1).trim();
+ }
+
+ if (line.length() == 0) {
+ lineCount = 0;
+ builder.append("\n\n");
+ } else {
+ if (lineCount > 0) {
+ builder.append(" ");
+ }
+
+ builder.append(line);
+ lineCount++;
+ }
+
+ line = reader.readLine();
+ }
+ } catch (IOException exception) {
+ // this will never be thrown
+ }
+
+ return builder.toString();
+ }
+
+ /**
+ * Return the raw Dart doc string for the element in the given location, if any.
+ *
+ * @param compilationUnit
+ * @param unit
+ * @param start
+ * @param end
+ * @return
+ * @throws DartModelException
+ */
+ public static String getDartDoc(CompilationUnit compilationUnit, DartUnit unit, int start, int end)
+ throws DartModelException {
+ DartElementLocator locator = new DartElementLocator(compilationUnit, start, end);
+
+ DartElement element = locator.searchWithin(unit);
+
+ if (element instanceof DartDocumentable) {
+ DartDocumentable documentable = (DartDocumentable) element;
+
+ if (documentable.getDartDocRange() != null) {
+ SourceRange range = documentable.getDartDocRange();
+
+ String dartDoc = element.getOpenable().getBuffer().getText(range.getOffset(),
+ range.getLength());
+
+ return cleanDartDoc(dartDoc);
+ }
+ }
+
+ return null;
+ }
+
+ private DartDocUtilities() {
+
+ }
+
+}

Powered by Google App Engine
This is Rietveld 408576698