aboutsummaryrefslogtreecommitdiff
path: root/src/Analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/Analysis')
-rw-r--r--src/Analysis/CommentsAPI.kt21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/Analysis/CommentsAPI.kt b/src/Analysis/CommentsAPI.kt
index a32ee734..03b1911c 100644
--- a/src/Analysis/CommentsAPI.kt
+++ b/src/Analysis/CommentsAPI.kt
@@ -5,12 +5,21 @@ import org.jetbrains.jet.lang.resolve.*
import org.jetbrains.jet.kdoc.psi.api.*
import org.jetbrains.jet.lang.psi.*
-fun BindingContext.getDocumentation(descriptor: DeclarationDescriptor): KDoc? {
+fun BindingContext.getDocumentation(descriptor: DeclarationDescriptor): String {
+ return getDocumentationElements(descriptor).map { it.extractText() }.join("\n")
+}
+
+fun BindingContext.getDocumentationElements(descriptor: DeclarationDescriptor): List<KDoc> {
val psiElement = DescriptorToSourceUtils.descriptorToDeclaration(descriptor)
if (psiElement == null)
throw IllegalArgumentException("$descriptor doesn't have connection to source code, is it synthetic?")
- return psiElement.previousSiblings().takeWhile { it !is JetDeclaration }.firstOrNull { it is KDoc } as KDoc?
+ return psiElement.previousSiblings() // go backwards
+ .takeWhile { it !is JetDeclaration } // till previous declaration
+ .filter { it is KDoc } // get KDocs
+ .map { it as KDoc } // cast
+ .toList()
+ .reverse() // make reversed list
}
fun KDoc?.extractText(): String {
@@ -21,10 +30,14 @@ fun KDoc?.extractText(): String {
return ""
val lines = text.replace("\r", "").split("\n")
return lines.map {
- it.dropWhile { java.lang.Character.isWhitespace(it) }
+ val comment = it.trim()
.dropWhile { it == '/' }
.dropWhile { it == '*' }
.dropWhile { it == '/' }
- .dropWhile { java.lang.Character.isWhitespace(it) }
+ .trim()
+ if (comment.endsWith("*/"))
+ comment.substring(0, comment.length - 2).trim()
+ else
+ comment
}.filter { it.any() }.join("\n")
} \ No newline at end of file