<lambda>null1package 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