diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt index f6642490ffc..c5399adad83 100644 --- a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt @@ -19,6 +19,8 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.stubs.StubElement import com.intellij.util.indexing.FileContent import com.intellij.util.indexing.FileContentImpl +import org.jetbrains.kotlin.analysis.decompiler.konan.K2KotlinNativeMetadataDecompiler +import org.jetbrains.kotlin.analysis.decompiler.konan.KlibMetaFileType import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInDecompiler import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInFileType @@ -302,22 +304,8 @@ public class KotlinStaticDeclarationProviderFactory( VfsUtilCore.visitChildrenRecursively(additionalRoot, object : VirtualFileVisitor() { override fun visitFile(file: VirtualFile): Boolean { if (!file.isDirectory) { - val fileContent = FileContentImpl.createByFile(file) - when { - binaryClassCache.isKotlinJvmCompiledFile(file, fileContent.content) && - file.fileType == JavaClassFileType.INSTANCE -> { - (KotlinClsStubBuilder().buildFileStub(fileContent) as? KotlinFileStubImpl)?.let { stubs.put(file, it) } - } - file.fileType == KotlinBuiltInFileType - && file.extension != BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION -> { - (builtInDecompiler.stubBuilder.buildFileStub(fileContent) as? KotlinFileStubImpl)?.let { - stubs.put( - file, - it - ) - } - } - } + val stub = buildStubByVirtualFile(file, binaryClassCache) ?: return true + stubs.put(file, stub) } return true } @@ -341,6 +329,23 @@ public class KotlinStaticDeclarationProviderFactory( } } + private fun buildStubByVirtualFile(file: VirtualFile, binaryClassCache: ClsKotlinBinaryClassCache): KotlinFileStubImpl? { + val fileContent = FileContentImpl.createByFile(file) + val fileType = file.fileType + val stubBuilder = when { + binaryClassCache.isKotlinJvmCompiledFile(file, fileContent.content) && fileType == JavaClassFileType.INSTANCE -> { + KotlinClsStubBuilder() + } + fileType == KotlinBuiltInFileType + && file.extension != BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION -> { + builtInDecompiler.stubBuilder + } + + else -> return null + } + return stubBuilder.buildFileStub(fileContent) as? KotlinFileStubImpl + } + override fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider { return KotlinStaticDeclarationProvider(index, scope) }