[FIR] do not swallow PCE
This commit is contained in:
+1
-6
@@ -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) })
|
||||||
|
|||||||
+2
-11
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user