[FIR] Fail with error if multiple plugins generated classes with same classId

In future we can turn this failure to some proper diagnostic
This commit is contained in:
Dmitriy Novozhilov
2021-10-11 15:16:46 +03:00
committed by TeamCityServer
parent af6d6ec2b9
commit 5f625f3c16
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.caches.FirCachesFactory
import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.caches.getValue
import org.jetbrains.kotlin.fir.declarations.validate
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -53,8 +54,12 @@ class FirExtensionDeclarationsSymbolProvider private constructor(
// ------------------------------------------ generators ------------------------------------------
private fun generateClassLikeDeclaration(classId: ClassId): FirClassLikeSymbol<*>? {
// TODO: what we should do if multiple extensions want to generate class with same classId?
return extensions.firstNotNullOfOrNull { it.generateClassLikeDeclaration(classId) }?.also { it.fir.validate() }
val generatedClasses = extensions.mapNotNull { it.generateClassLikeDeclaration(classId) }.onEach { it.fir.validate() }
return when (generatedClasses.size) {
0 -> null
1 -> generatedClasses.first()
else -> error("Multiple plugins generated classes with same classId $classId\n${generatedClasses.joinToString("\n") { it.fir.render() }}")
}
}
private fun generateTopLevelFunctions(callableId: CallableId): List<FirNamedFunctionSymbol> {