diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index 4f4ba4a93f1..18f26cff764 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -284,7 +284,13 @@ private class FirSupertypeResolverVisitor( supertypeRefs: List ): List { return resolveSpecificClassLikeSupertypes(classLikeDeclaration) { transformer, scope -> - supertypeRefs.mapTo(mutableListOf()) { + /* + This list is backed by mutable list and during iterating on it we can resolve supertypes of that class via IDE light classes + as IJ Java resolve may resolve a lot of stuff by light classes + this causes ConcurrentModificationException + So we create a copy of supertypeRefs to avoid it + */ + supertypeRefs.createCopy().mapTo(mutableListOf()) { val superTypeRef = transformer.transformTypeRef(it, scope).single val typeParameterType = superTypeRef.coneTypeSafe() when { @@ -304,6 +310,8 @@ private class FirSupertypeResolverVisitor( } } + private fun List.createCopy(): List = ArrayList(this) + private fun addSupertypesFromExtensions(klass: FirClassLikeDeclaration<*>, supertypeRefs: MutableList) { if (supertypeGenerationExtensions.isEmpty()) return val provider = session.predicateBasedProvider