aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2017-01-18 16:48:03 +0300
committerSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2017-01-18 16:48:03 +0300
commit372e9c796cc77aaff788df56a13deeef64b6edd7 (patch)
treed43ce5275c5852f88ff8b466d34533504a50487a /core
parentf4f7642c90fef06f04cadc57835ed431ace69802 (diff)
downloaddokka-372e9c796cc77aaff788df56a13deeef64b6edd7.tar.gz
dokka-372e9c796cc77aaff788df56a13deeef64b6edd7.tar.bz2
dokka-372e9c796cc77aaff788df56a13deeef64b6edd7.zip
KT-15497 Dokka: Using of not-FQ name in @sample should be allowed
Diffstat (limited to 'core')
-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.kt8
-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, 69 insertions, 8 deletions
diff --git a/core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt b/core/src/main/kotlin/Kotlin/DescriptorDocumentationParser.kt
index d1f64eeb..14d04397 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 e6539135..6348c181 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 c425e3f6..4f32fa53 100644
--- a/core/src/test/kotlin/format/MarkdownFormatTest.kt
+++ b/core/src/test/kotlin/format/MarkdownFormatTest.kt
@@ -236,6 +236,14 @@ class MarkdownFormatTest {
verifyMarkdownPackage("typeAliases")
}
+ @Test fun sampleByFQName() {
+ verifyMarkdownNode("sampleByFQName")
+ }
+
+ @Test fun sampleByShortName() {
+ verifyMarkdownNode("sampleByShortName")
+ }
+
private fun verifyMarkdownPackage(fileName: String, withKotlinRuntime: Boolean = false) {
verifyOutput("testdata/format/$fileName.kt", ".package.md", withKotlinRuntime = withKotlinRuntime) { model, output ->
markdownService.createOutputBuilder(output, tempLocation).appendNodes(model.members)
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")
+```
+