New J2K: fix ConcurrentModificationException while analysing implicit initializers

This commit is contained in:
Ilya Kirillov
2019-06-10 19:26:02 +03:00
parent 184825d59d
commit 9929dba74d
@@ -87,16 +87,21 @@ class ImplicitInitializerConversion(private val context: NewJ2kConverterContext)
constructors[context.symbolProvider.provideUniverseSymbol(constructor)] = true constructors[context.symbolProvider.provideUniverseSymbol(constructor)] = true
} }
val constructorsToInitialize = mutableListOf<JKMethodSymbol>()
for ((constructor, initialized) in constructors) { for ((constructor, initialized) in constructors) {
if (initialized) continue if (initialized) continue
val parentConstructors = val parentConstructors =
generateSequence(constructor) { it.parentConstructor() } generateSequence(constructor) { it.parentConstructor() }
if (parentConstructors.any { constructors[it] == true }) { if (parentConstructors.any { constructors[it] == true }) {
parentConstructors.forEach { constructors[it] = true } constructorsToInitialize += parentConstructors
} }
} }
for (constructor in constructorsToInitialize) {
constructors[constructor] = true
}
val initializedInConstructorsCount = constructors.values.count { it } val initializedInConstructorsCount = constructors.values.count { it }
return when (initializedInConstructorsCount) { return when (initializedInConstructorsCount) {
0 -> InitializationState.NON_INITIALIZED 0 -> InitializationState.NON_INITIALIZED