aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt2
-rw-r--r--core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt12
-rw-r--r--core/src/main/kotlin/Samples/SampleProcessingService.kt3
-rw-r--r--core/src/test/kotlin/format/MarkdownFormatTest.kt9
-rw-r--r--core/testdata/format/sampleByFQName.kt12
-rw-r--r--core/testdata/format/sampleByFQName.md14
-rw-r--r--core/testdata/format/sampleByShortName.kt12
-rw-r--r--core/testdata/format/sampleByShortName.md14
8 files changed, 70 insertions, 8 deletions
diff --git a/core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt b/core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt
index 06acf2e6..6d7ff7ba 100644
--- a/core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt
+++ b/core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt
@@ -59,7 +59,7 @@ class DescriptorDocumentationParser
tags.forEach {
when (it.knownTag) {
KDocKnownTag.SAMPLE ->
- content.append(sampleService.resolveSample(descriptor, it.getSubjectName()))
+ content.append(sampleService.resolveSample(descriptor, it.getSubjectName(), it))
KDocKnownTag.SEE ->
content.addTagToSeeAlso(descriptor, it)
else -> {
diff --git a/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt b/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt
index 1eb0c114..116a5c02 100644
--- a/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt
+++ b/core/src/main/kotlin/Samples/DefaultSampleProcessingService.kt
@@ -7,11 +7,13 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.idea.kdoc.getKDocLinkResolutionScope
-import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink
+import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.ResolutionScope
@@ -23,15 +25,13 @@ open class DefaultSampleProcessingService
val resolutionFacade: DokkaResolutionFacade)
: SampleProcessingService {
- override fun resolveSample(descriptor: DeclarationDescriptor, functionName: String?): ContentNode {
+ override fun resolveSample(descriptor: DeclarationDescriptor, functionName: String?, kdocTag: KDocTag): ContentNode {
if (functionName == null) {
logger.warn("Missing function name in @sample in ${descriptor.signature()}")
return ContentBlockSampleCode().apply { append(ContentText("//Missing function name in @sample")) }
}
- val scope = getKDocLinkResolutionScope(resolutionFacade, descriptor)
- val rootPackage = resolutionFacade.moduleDescriptor.getPackage(FqName.ROOT)
- val rootScope = rootPackage.memberScope
- val symbol = resolveInScope(functionName, scope) ?: resolveInScope(functionName, rootScope)
+ val bindingContext = BindingContext.EMPTY
+ val symbol = resolveKDocLink(bindingContext, resolutionFacade, descriptor, kdocTag, functionName.split(".")).firstOrNull()
if (symbol == null) {
logger.warn("Unresolved function $functionName in @sample in ${descriptor.signature()}")
return ContentBlockSampleCode().apply { append(ContentText("//Unresolved: $functionName")) }
diff --git a/core/src/main/kotlin/Samples/SampleProcessingService.kt b/core/src/main/kotlin/Samples/SampleProcessingService.kt
index 7f46299f..86c917cf 100644
--- a/core/src/main/kotlin/Samples/SampleProcessingService.kt
+++ b/core/src/main/kotlin/Samples/SampleProcessingService.kt
@@ -2,7 +2,8 @@ package org.jetbrains.dokka.Samples
import org.jetbrains.dokka.ContentNode
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
+import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag
interface SampleProcessingService {
- fun resolveSample(descriptor: DeclarationDescriptor, functionName: String?): ContentNode
+ fun resolveSample(descriptor: DeclarationDescriptor, functionName: String?, kdocTag: KDocTag): ContentNode
} \ No newline at end of file
diff --git a/core/src/test/kotlin/format/MarkdownFormatTest.kt b/core/src/test/kotlin/format/MarkdownFormatTest.kt
index c643eec2..21298520 100644
--- a/core/src/test/kotlin/format/MarkdownFormatTest.kt
+++ b/core/src/test/kotlin/format/MarkdownFormatTest.kt
@@ -233,6 +233,15 @@ class MarkdownFormatTest {
verifyMarkdownPackage("typeAliases")
}
+ @Test fun sampleByFQName() {
+ verifyMarkdownNode("sampleByFQName")
+ }
+
+ @Test fun sampleByShortName() {
+ verifyMarkdownNode("sampleByShortName")
+ }
+
+
@Test fun suspendParam() {
verifyMarkdownNode("suspendParam")
verifyMarkdownPackage("suspendParam")
diff --git a/core/testdata/format/sampleByFQName.kt b/core/testdata/format/sampleByFQName.kt
new file mode 100644
index 00000000..2c0af092
--- /dev/null
+++ b/core/testdata/format/sampleByFQName.kt
@@ -0,0 +1,12 @@
+package test
+
+fun sample() {
+ println("sample")
+}
+
+/**
+ * @sample test.sample
+ */
+fun use() {
+
+} \ No newline at end of file
diff --git a/core/testdata/format/sampleByFQName.md b/core/testdata/format/sampleByFQName.md
new file mode 100644
index 00000000..06333e13
--- /dev/null
+++ b/core/testdata/format/sampleByFQName.md
@@ -0,0 +1,14 @@
+[test](test/index) / [test](test/test/index) / [sample](test/test/sample)
+
+# sample
+
+`fun sample(): Unit`[test](test/index) / [test](test/test/index) / [use](test/test/use)
+
+# use
+
+`fun use(): Unit`
+
+``` kotlin
+println("sample")
+```
+
diff --git a/core/testdata/format/sampleByShortName.kt b/core/testdata/format/sampleByShortName.kt
new file mode 100644
index 00000000..2e03310f
--- /dev/null
+++ b/core/testdata/format/sampleByShortName.kt
@@ -0,0 +1,12 @@
+package test
+
+fun sample() {
+ println("sample")
+}
+
+/**
+ * @sample sample
+ */
+fun use() {
+
+} \ No newline at end of file
diff --git a/core/testdata/format/sampleByShortName.md b/core/testdata/format/sampleByShortName.md
new file mode 100644
index 00000000..06333e13
--- /dev/null
+++ b/core/testdata/format/sampleByShortName.md
@@ -0,0 +1,14 @@
+[test](test/index) / [test](test/test/index) / [sample](test/test/sample)
+
+# sample
+
+`fun sample(): Unit`[test](test/index) / [test](test/test/index) / [use](test/test/use)
+
+# use
+
+`fun use(): Unit`
+
+``` kotlin
+println("sample")
+```
+