[Analysis API Standalone] refactoring, extract stub create to a separate function

This commit is contained in:
Ilya Kirillov
2023-10-25 17:03:34 +02:00
committed by Space Team
parent b6fdd7cacc
commit 9c85857b68
@@ -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<Void>() {
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)
}