[FIR] do not swallow PCE

This commit is contained in:
Ilya Kirillov
2022-06-23 21:46:54 +02:00
parent 47c51b82b6
commit da43062a46
4 changed files with 5 additions and 29 deletions
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.deserialization package org.jetbrains.kotlin.fir.deserialization
import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.FirCache import org.jetbrains.kotlin.fir.caches.FirCache
@@ -116,11 +115,7 @@ abstract class AbstractFirDeserializedSymbolProvider(
} }
private fun tryComputePackagePartInfos(packageFqName: FqName): List<PackagePartsCacheData> { private fun tryComputePackagePartInfos(packageFqName: FqName): List<PackagePartsCacheData> {
return try { return computePackagePartsInfos(packageFqName)
computePackagePartsInfos(packageFqName)
} catch (e: ProcessCanceledException) {
emptyList()
}
} }
private fun findAndDeserializeTypeAlias(classId: ClassId): FirTypeAliasSymbol? { private fun findAndDeserializeTypeAlias(classId: ClassId): FirTypeAliasSymbol? {
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.java package org.jetbrains.kotlin.fir.java
import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.KtFakeSourceElement import org.jetbrains.kotlin.KtFakeSourceElement
import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
@@ -89,11 +88,7 @@ abstract class FirJavaFacade(
?.takeIf { it.classId == classId && !it.hasMetadataAnnotation() } ?.takeIf { it.classId == classId && !it.hasMetadataAnnotation() }
fun getPackage(fqName: FqName): FqName? = fun getPackage(fqName: FqName): FqName? =
try { packageCache.getValue(fqName)?.fqName
packageCache.getValue(fqName)?.fqName
} catch (e: ProcessCanceledException) {
null
}
fun hasTopLevelClassOf(classId: ClassId): Boolean { fun hasTopLevelClassOf(classId: ClassId): Boolean {
val knownNames = knownClassNamesInPackage.getValue(classId.packageFqName) ?: return true val knownNames = knownClassNamesInPackage.getValue(classId.packageFqName) ?: return true
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.java package org.jetbrains.kotlin.fir.java
import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.firCachesFactory import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
@@ -44,11 +43,7 @@ class JavaSymbolProvider(
javaFacade.getPackage(fqName) javaFacade.getPackage(fqName)
override fun getClassLikeSymbolByClassId(classId: ClassId): FirRegularClassSymbol? = override fun getClassLikeSymbolByClassId(classId: ClassId): FirRegularClassSymbol? =
try { if (javaFacade.hasTopLevelClassOf(classId)) getFirJavaClass(classId) else null
if (javaFacade.hasTopLevelClassOf(classId)) getFirJavaClass(classId) else null
} catch (e: ProcessCanceledException) {
null
}
private fun getFirJavaClass(classId: ClassId): FirRegularClassSymbol? = private fun getFirJavaClass(classId: ClassId): FirRegularClassSymbol? =
classCache.getValue(classId, classId.outerClassId?.let { getFirJavaClass(it) }) classCache.getValue(classId, classId.outerClassId?.let { getFirJavaClass(it) })
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.java.deserialization package org.jetbrains.kotlin.fir.java.deserialization
import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.ThreadSafeMutableState
@@ -99,11 +98,7 @@ class JvmClassFileBasedSymbolProvider(
get() = classHeader.isPreRelease get() = classHeader.isPreRelease
private fun loadJavaClass(classId: ClassId, content: ByteArray?): ClassMetadataFindResult? { private fun loadJavaClass(classId: ClassId, content: ByteArray?): ClassMetadataFindResult? {
val javaClass = try { val javaClass = javaFacade.findClass(classId, content) ?: return null
javaFacade.findClass(classId, content) ?: return null
} catch (e: ProcessCanceledException) {
return null
}
return ClassMetadataFindResult.NoMetadata { symbol -> return ClassMetadataFindResult.NoMetadata { symbol ->
javaFacade.convertJavaClassToFir(symbol, classId.outerClassId?.let(::getClass), javaClass) javaFacade.convertJavaClassToFir(symbol, classId.outerClassId?.let(::getClass), javaClass)
} }
@@ -113,11 +108,7 @@ class JvmClassFileBasedSymbolProvider(
// Kotlin classes are annotated Java classes, so this check also looks for them. // Kotlin classes are annotated Java classes, so this check also looks for them.
if (!javaFacade.hasTopLevelClassOf(classId)) return null if (!javaFacade.hasTopLevelClassOf(classId)) return null
val result = try { val result = kotlinClassFinder.findKotlinClassOrContent(classId)
kotlinClassFinder.findKotlinClassOrContent(classId)
} catch (e: ProcessCanceledException) {
return null
}
val kotlinClass = when (result) { val kotlinClass = when (result) {
is KotlinClassFinder.Result.KotlinClass -> result.kotlinJvmBinaryClass is KotlinClassFinder.Result.KotlinClass -> result.kotlinJvmBinaryClass
is KotlinClassFinder.Result.ClassFileContent -> return loadJavaClass(classId, result.content) is KotlinClassFinder.Result.ClassFileContent -> return loadJavaClass(classId, result.content)