• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 package org.jetbrains.dokka.Samples
2 
3 import com.google.inject.Inject
4 import com.intellij.psi.PsiElement
5 import org.jetbrains.dokka.*
6 import org.jetbrains.kotlin.name.Name
7 import org.jetbrains.kotlin.psi.*
8 import org.jetbrains.kotlin.utils.addIfNotNull
9 
10 open class DevsiteSampleProcessingService
11 @Inject constructor(
12     options: DocumentationOptions,
13     logger: DokkaLogger,
14     resolutionFacade: DokkaResolutionFacade
15 ) : DefaultSampleProcessingService(options, logger, resolutionFacade) {
16 
17     override fun processImports(psiElement: PsiElement): ContentBlockCode {
18         // List of expression calls inside this sample, so we can trim the imports to only show relevant expressions
19         val sampleExpressionCalls = mutableSetOf<String>()
20         val psiFile = psiElement.containingFile
21         (psiElement as KtDeclarationWithBody).bodyExpression!!.accept(object : KtTreeVisitorVoid() {
22             override fun visitCallExpression(expression: KtCallExpression) {
23                 sampleExpressionCalls.addIfNotNull(expression.calleeExpression?.text)
24                 super.visitCallExpression(expression)
25             }
26         })
27         val androidxPackage = Name.identifier("androidx")
28         if (psiFile is KtFile) {
29             val filteredImports = psiFile.importList?.imports?.filter { element ->
30                 val fqImportName = element.importPath?.fqName ?: return@filter false
31 
32                 val shortName = fqImportName.shortName().identifier
33                 // Hide all non-androidx imports
34                 if (!fqImportName.startsWith(androidxPackage)) return@filter false
35 
36                 sampleExpressionCalls.any { call ->
37                     call == shortName
38                 }
39             }
40 
41             return ContentBlockCode("kotlin").apply {
42                 filteredImports?.forEach { import ->
43                     if (import != filteredImports.first()) {
44                         append(ContentText("\n"))
45                     }
46                     append(ContentText(import.text))
47                 }
48             }
49         }
50         return super.processImports(psiElement)
51     }
52 }
53