[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(":compiler:ir.tree"))
api(project(":core:compiler.common")) api(project(":core:compiler.common"))
implementation(project(":compiler:resolution.common")) implementation(project(":compiler:resolution.common"))
implementation(project(":compiler:frontend")) implementation(project(":compiler:frontend.common"))
implementation(project(":compiler:frontend.common-psi"))
compileOnly(intellijCore()) compileOnly(intellijCore())
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.common.actualizer package org.jetbrains.kotlin.backend.common.actualizer
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.diagnostics.* import org.jetbrains.kotlin.diagnostics.*
import org.jetbrains.kotlin.diagnostics.rendering.* 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.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.classFqName 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.ExpectActualAnnotationsIncompatibilityType
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCheckingCompatibility import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCheckingCompatibility
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualMatchingCompatibility import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualMatchingCompatibility
@@ -36,7 +38,7 @@ internal object KtDefaultIrActualizationErrorMessages : BaseDiagnosticRendererFa
IrActualizationErrors.NO_ACTUAL_FOR_EXPECT, IrActualizationErrors.NO_ACTUAL_FOR_EXPECT,
"Expected {0} has no actual declaration in module {1}", "Expected {0} has no actual declaration in module {1}",
CommonRenderers.STRING, CommonRenderers.STRING,
Renderers.MODULE_WITH_PLATFORM, IrActualizationDiagnosticRenderers.MODULE_WITH_PLATFORM,
) )
map.put( map.put(
IrActualizationErrors.EXPECT_ACTUAL_MISMATCH, IrActualizationErrors.EXPECT_ACTUAL_MISMATCH,
@@ -85,4 +87,12 @@ internal object IrActualizationDiagnosticRenderers {
} }
"Annotation `$expectAnnotationFqName` $reason" "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.types.IrTypeSystemContext
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.ClassId 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.calls.mpp.AbstractExpectActualMatcher
import org.jetbrains.kotlin.resolve.multiplatform.* import org.jetbrains.kotlin.resolve.multiplatform.*
import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.runIf
@@ -164,7 +165,7 @@ internal fun IrDiagnosticReporter.reportActualAnnotationConflictingDefaultArgume
internal fun IrElement.containsOptionalExpectation(): Boolean { internal fun IrElement.containsOptionalExpectation(): Boolean {
return this is IrClass && return this is IrClass &&
this.kind == ClassKind.ANNOTATION_CLASS && this.kind == ClassKind.ANNOTATION_CLASS &&
this.hasAnnotation(OptionalAnnotationUtil.OPTIONAL_EXPECTATION_FQ_NAME) this.hasAnnotation(StandardClassIds.Annotations.OptionalExpectation)
} }
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -8,11 +8,11 @@ package org.jetbrains.kotlin.resolve.multiplatform
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor 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 import org.jetbrains.kotlin.resolve.descriptorUtil.module
object OptionalAnnotationUtil { object OptionalAnnotationUtil {
val OPTIONAL_EXPECTATION_FQ_NAME = FqName("kotlin.OptionalExpectation") val OPTIONAL_EXPECTATION_FQ_NAME = StandardClassIds.Annotations.OptionalExpectation.asSingleFqName()
@JvmStatic @JvmStatic
fun shouldGenerateExpectClass(descriptor: ClassDescriptor): Boolean { fun shouldGenerateExpectClass(descriptor: ClassDescriptor): Boolean {