[IR] Avoid ir.actualization depending on frontend module

^KT-62292
This commit is contained in:
Pavel Kunyavskiy
2023-11-15 11:03:24 +01:00
committed by Space Team
parent 021a00f4ff
commit b38ebbb853
4 changed files with 17 additions and 5 deletions
@@ -8,7 +8,8 @@ dependencies {
api(project(":compiler:ir.tree"))
api(project(":core:compiler.common"))
implementation(project(":compiler:resolution.common"))
implementation(project(":compiler:frontend"))
implementation(project(":compiler:frontend.common"))
implementation(project(":compiler:frontend.common-psi"))
compileOnly(intellijCore())
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.common.actualizer
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.diagnostics.*
import org.jetbrains.kotlin.diagnostics.rendering.*
@@ -14,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.classFqName
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualAnnotationsIncompatibilityType
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCheckingCompatibility
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualMatchingCompatibility
@@ -36,7 +38,7 @@ internal object KtDefaultIrActualizationErrorMessages : BaseDiagnosticRendererFa
IrActualizationErrors.NO_ACTUAL_FOR_EXPECT,
"Expected {0} has no actual declaration in module {1}",
CommonRenderers.STRING,
Renderers.MODULE_WITH_PLATFORM,
IrActualizationDiagnosticRenderers.MODULE_WITH_PLATFORM,
)
map.put(
IrActualizationErrors.EXPECT_ACTUAL_MISMATCH,
@@ -85,4 +87,12 @@ internal object IrActualizationDiagnosticRenderers {
}
"Annotation `$expectAnnotationFqName` $reason"
}
@JvmField
val MODULE_WITH_PLATFORM = Renderer<ModuleDescriptor> { module ->
val platform = module.platform
val moduleName = module.getCapability(ModuleInfo.Capability)?.displayedName ?: module.name.asString()
val platformNameIfAny = if (platform == null || platform.isCommon()) "" else " for " + platform.single().platformName
moduleName + platformNameIfAny
}
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.resolve.calls.mpp.AbstractExpectActualMatcher
import org.jetbrains.kotlin.resolve.multiplatform.*
import org.jetbrains.kotlin.utils.addToStdlib.runIf
@@ -164,7 +165,7 @@ internal fun IrDiagnosticReporter.reportActualAnnotationConflictingDefaultArgume
internal fun IrElement.containsOptionalExpectation(): Boolean {
return this is IrClass &&
this.kind == ClassKind.ANNOTATION_CLASS &&
this.hasAnnotation(OptionalAnnotationUtil.OPTIONAL_EXPECTATION_FQ_NAME)
this.hasAnnotation(StandardClassIds.Annotations.OptionalExpectation)
}
@Suppress("UNCHECKED_CAST")
@@ -8,11 +8,11 @@ package org.jetbrains.kotlin.resolve.multiplatform
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.resolve.descriptorUtil.module
object OptionalAnnotationUtil {
val OPTIONAL_EXPECTATION_FQ_NAME = FqName("kotlin.OptionalExpectation")
val OPTIONAL_EXPECTATION_FQ_NAME = StandardClassIds.Annotations.OptionalExpectation.asSingleFqName()
@JvmStatic
fun shouldGenerateExpectClass(descriptor: ClassDescriptor): Boolean {