FIR Java providers: insert some protection against ProcessCanceledException
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.java
|
||||
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
@@ -124,8 +125,10 @@ class JavaSymbolProvider(
|
||||
FirSuperTypeScope.prepareSupertypeScope(
|
||||
useSiteSession,
|
||||
JavaOverrideChecker(
|
||||
useSiteSession, if (regularClass is FirJavaClass) regularClass
|
||||
.javaTypeParameterStack else JavaTypeParameterStack.EMPTY),
|
||||
useSiteSession,
|
||||
if (regularClass is FirJavaClass) regularClass.javaTypeParameterStack
|
||||
else JavaTypeParameterStack.EMPTY
|
||||
),
|
||||
superTypeEnhancementScopes
|
||||
), wrappedDeclaredScope
|
||||
)
|
||||
@@ -171,7 +174,13 @@ class JavaSymbolProvider(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getClassLikeSymbolByFqName(classId: ClassId): FirRegularClassSymbol? = getFirJavaClass(classId)
|
||||
override fun getClassLikeSymbolByFqName(classId: ClassId): FirRegularClassSymbol? {
|
||||
return try {
|
||||
getFirJavaClass(classId)
|
||||
} catch (e: ProcessCanceledException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun getFirJavaClass(classId: ClassId, content: KotlinClassFinder.Result.ClassFileContent? = null): FirRegularClassSymbol? {
|
||||
if (!hasTopLevelClassOf(classId)) return null
|
||||
@@ -309,9 +318,13 @@ class JavaSymbolProvider(
|
||||
|
||||
override fun getPackage(fqName: FqName): FqName? {
|
||||
return packageCache.lookupCacheOrCalculate(fqName) {
|
||||
val facade = KotlinJavaPsiFacade.getInstance(project)
|
||||
val javaPackage = facade.findPackage(fqName.asString(), searchScope) ?: return@lookupCacheOrCalculate null
|
||||
FqName(javaPackage.qualifiedName)
|
||||
try {
|
||||
val facade = KotlinJavaPsiFacade.getInstance(project)
|
||||
val javaPackage = facade.findPackage(fqName.asString(), searchScope) ?: return@lookupCacheOrCalculate null
|
||||
FqName(javaPackage.qualifiedName)
|
||||
} catch (e: ProcessCanceledException) {
|
||||
return@lookupCacheOrCalculate null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-3
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.java.deserialization
|
||||
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
@@ -312,11 +313,20 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
|
||||
if (classId in handledByJava) return null
|
||||
|
||||
val kotlinJvmBinaryClass = when (val result = kotlinClassFinder.findKotlinClassOrContent(classId)) {
|
||||
val result = try {
|
||||
kotlinClassFinder.findKotlinClassOrContent(classId)
|
||||
} catch (e: ProcessCanceledException) {
|
||||
return null
|
||||
}
|
||||
val kotlinJvmBinaryClass = when (result) {
|
||||
is KotlinClassFinder.Result.KotlinClass -> result.kotlinJvmBinaryClass
|
||||
is KotlinClassFinder.Result.ClassFileContent -> {
|
||||
handledByJava.add(classId)
|
||||
return javaSymbolProvider.getFirJavaClass(classId, result)
|
||||
return try {
|
||||
javaSymbolProvider.getFirJavaClass(classId, result)
|
||||
} catch (e: ProcessCanceledException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
null -> null
|
||||
}
|
||||
@@ -388,7 +398,11 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
|
||||
private fun getPackageParts(packageFqName: FqName): Collection<PackagePartsCacheData> {
|
||||
return packagePartsCache.getOrPut(packageFqName) {
|
||||
computePackagePartsInfos(packageFqName)
|
||||
try {
|
||||
computePackagePartsInfos(packageFqName)
|
||||
} catch (e: ProcessCanceledException) {
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user