diff options
Diffstat (limited to 'src/Analysis')
-rw-r--r-- | src/Analysis/CommentsAPI.kt | 21 |
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 |