[ULC] Add recursion guard to getLightClass
Fixed KT-41325
This commit is contained in:
+15
-1
@@ -118,6 +118,18 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val recursiveGuard = ThreadLocal<Boolean>()
|
||||||
|
|
||||||
|
private inline fun <T> guardedRun(body: () -> T): T? {
|
||||||
|
if (recursiveGuard.get() == true) return null
|
||||||
|
return try {
|
||||||
|
recursiveGuard.set(true)
|
||||||
|
body()
|
||||||
|
} finally {
|
||||||
|
recursiveGuard.set(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? {
|
override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? {
|
||||||
if (!classOrObject.isValid) {
|
if (!classOrObject.isValid) {
|
||||||
return null
|
return null
|
||||||
@@ -131,7 +143,9 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport
|
|||||||
ProjectRootsUtil.isLibraryClassFile(project, virtualFile) ->
|
ProjectRootsUtil.isLibraryClassFile(project, virtualFile) ->
|
||||||
return getLightClassForDecompiledClassOrObject(classOrObject)
|
return getLightClassForDecompiledClassOrObject(classOrObject)
|
||||||
ProjectRootsUtil.isLibrarySourceFile(project, virtualFile) ->
|
ProjectRootsUtil.isLibrarySourceFile(project, virtualFile) ->
|
||||||
return SourceNavigationHelper.getOriginalClass(classOrObject) as? KtLightClass
|
return guardedRun {
|
||||||
|
SourceNavigationHelper.getOriginalClass(classOrObject) as? KtLightClass
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((classOrObject.containingFile as? KtFile)?.analysisContext != null ||
|
if ((classOrObject.containingFile as? KtFile)?.analysisContext != null ||
|
||||||
|
|||||||
Reference in New Issue
Block a user