[AA] stub-based library symbol providers for non-JVM platforms

Use existing stub-based JVM library symbol provider for .knm and
.kotlin_metadata files. The only real difference is the scope filtering
by file types

KT-58769
This commit is contained in:
Pavel Kirpichenkov
2023-07-01 13:55:56 +03:00
committed by teamcity
parent 129b930bd7
commit b316aa7d1d
17 changed files with 284 additions and 122 deletions
@@ -23,6 +23,7 @@ import com.intellij.util.indexing.FileContentImpl
import com.intellij.util.io.URLUtil
import java.util.concurrent.ConcurrentHashMap
import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInDecompiler
import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInFileType
import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache
import org.jetbrains.kotlin.analysis.decompiler.stub.file.KotlinClsStubBuilder
import org.jetbrains.kotlin.analysis.project.structure.KtModule
@@ -315,10 +316,20 @@ public class KotlinStaticDeclarationProviderFactory(
override fun visitFile(file: VirtualFile): Boolean {
if (!file.isDirectory) {
val fileContent = FileContentImpl.createByFile(file)
if (binaryClassCache.isKotlinJvmCompiledFile(file, fileContent.content) &&
file.fileType == JavaClassFileType.INSTANCE
) {
(KotlinClsStubBuilder().buildFileStub(fileContent) as? KotlinFileStubImpl)?.let { stubs.put(file, it) }
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
)
}
}
}
}
return true