diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsRuntimeAnnotationChecker.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsRuntimeAnnotationChecker.kt index 795c9c17deb..70ef8798117 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsRuntimeAnnotationChecker.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsRuntimeAnnotationChecker.kt @@ -14,13 +14,13 @@ import org.jetbrains.kotlin.fir.analysis.js.checkers.isEffectivelyExternal import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration -import org.jetbrains.kotlin.fir.expressions.coneClassLikeType +import org.jetbrains.kotlin.fir.expressions.unexpandedConeClassLikeType import org.jetbrains.kotlin.fir.resolve.toSymbol object FirJsRuntimeAnnotationChecker : FirBasicDeclarationChecker() { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { for (annotation in declaration.annotations) { - val annotationClass = annotation.coneClassLikeType?.lookupTag?.toSymbol(context.session) ?: continue + val annotationClass = annotation.unexpandedConeClassLikeType?.lookupTag?.toSymbol(context.session) ?: continue if (annotationClass.getExplicitAnnotationRetention(context.session) != AnnotationRetention.RUNTIME) continue if (declaration is FirMemberDeclaration && declaration.symbol.isEffectivelyExternal(context)) { diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRedundantRepeatableChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRedundantRepeatableChecker.kt index 6cda8bc75ac..189735ba9c4 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRedundantRepeatableChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRedundantRepeatableChecker.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.expressions.classId +import org.jetbrains.kotlin.fir.expressions.unexpandedClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds.Annotations.Repeatable import org.jetbrains.kotlin.name.StandardClassIds.Annotations.JvmRepeatable @@ -30,8 +30,8 @@ object FirJvmRedundantRepeatableChecker : FirBasicDeclarationChecker() { reporter.reportOn( kotlinRepeatable.source, FirJvmErrors.REDUNDANT_REPEATABLE_ANNOTATION, - kotlinRepeatable.classId?.asSingleFqName() ?: FqName.ROOT, - javaRepeatable.classId?.asSingleFqName() ?: FqName.ROOT, + kotlinRepeatable.unexpandedClassId?.asSingleFqName() ?: FqName.ROOT, + javaRepeatable.unexpandedClassId?.asSingleFqName() ?: FqName.ROOT, context ) } diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementChecker.kt index b4ddc7fc01f..f222615a96e 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementChecker.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.REDUNDANT_SWIFT_REFINEMENT import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.coneClassLikeType +import org.jetbrains.kotlin.fir.expressions.unexpandedConeClassLikeType import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -44,7 +44,8 @@ object FirNativeObjCRefinementChecker : FirCallableDeclarationChecker() { val objCAnnotations = mutableListOf() val swiftAnnotations = mutableListOf() for (annotation in annotations) { - val metaAnnotations = annotation.coneClassLikeType?.lookupTag?.toSymbol(session)?.resolvedAnnotationsWithClassIds.orEmpty() + val metaAnnotations = annotation.unexpandedConeClassLikeType?.lookupTag + ?.toSymbol(session)?.resolvedAnnotationsWithClassIds.orEmpty() for (metaAnnotation in metaAnnotations) { when (metaAnnotation.toAnnotationClassId(session)) { hidesFromObjCClassId -> { diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt index 7f4249cd145..be4a929c2ee 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.coneClassLikeType +import org.jetbrains.kotlin.fir.expressions.unexpandedConeClassLikeType import org.jetbrains.kotlin.fir.isIntersectionOverride import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -83,7 +83,8 @@ object FirNativeObjCRefinementOverridesChecker : FirClassChecker() { var hasObjC = false var hasSwift = false for (annotation in resolvedAnnotationsWithClassIds) { - val metaAnnotations = annotation.coneClassLikeType?.lookupTag?.toSymbol(session)?.resolvedAnnotationsWithClassIds.orEmpty() + val metaAnnotations = annotation.unexpandedConeClassLikeType?.lookupTag + ?.toSymbol(session)?.resolvedAnnotationsWithClassIds.orEmpty() for (metaAnnotation in metaAnnotations) { when (metaAnnotation.toAnnotationClassId(session)) { hidesFromObjCClassId -> { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt index 0895ed52983..63a7c2b4f70 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.fir.declarations.getAnnotationsByClassId import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.classId +import org.jetbrains.kotlin.fir.expressions.unexpandedConeClassLikeType import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor @@ -148,7 +148,10 @@ class Fir2IrTypeConverter( } for (attributeAnnotation in attributes.customAnnotations) { - if (annotations.any { it.classId == attributeAnnotation.classId }) continue + val isAlreadyPresentInAnnotations = annotations.any { + it.unexpandedConeClassLikeType == attributeAnnotation.unexpandedConeClassLikeType + } + if (isAlreadyPresentInAnnotations) continue typeAnnotations += callGenerator.convertToIrConstructorCall(attributeAnnotation) as? IrConstructorCall ?: continue } val expandedType = fullyExpandedType(session) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt index 4f79df73208..f36015ce380 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt @@ -28,13 +28,13 @@ class FirAnnotationTypeQualifierResolver( ) : AbstractAnnotationTypeQualifierResolver(javaTypeEnhancementState), FirSessionComponent { override val FirAnnotation.metaAnnotations: Iterable - get() = coneClassLikeType?.lookupTag?.toSymbol(session)?.fir?.annotations.orEmpty() + get() = unexpandedConeClassLikeType?.lookupTag?.toSymbol(session)?.fir?.annotations.orEmpty() override val FirAnnotation.key: Any - get() = coneClassLikeType!!.lookupTag + get() = unexpandedConeClassLikeType!!.lookupTag override val FirAnnotation.fqName: FqName? - get() = coneClassLikeType?.lookupTag?.classId?.asSingleFqName() + get() = unexpandedConeClassLikeType?.lookupTag?.classId?.asSingleFqName() override fun FirAnnotation.enumArguments(onlyValue: Boolean): Iterable = argumentMapping.mapping.values.flatMap { argument -> diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt index 014caac9405..4ab6624d96f 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/CopyUtils.kt @@ -119,8 +119,8 @@ fun List.computeTypeAttributes(session: FirSession, predefined: L } private fun FirAnnotation.tryExpandClassId(session: FirSession): ClassId? { - return when (val directlyExpanded = coneClassLikeType?.directExpansionType(session) { it.expandedConeType }) { - null -> coneClassLikeType?.classId // mutually recursive typealiases + return when (val directlyExpanded = unexpandedConeClassLikeType?.directExpansionType(session) { it.expandedConeType }) { + null -> unexpandedConeClassLikeType?.classId // mutually recursive typealiases else -> directlyExpanded.fullyExpandedType(session).classId } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt index 6fbcf28da78..f5aba8323b0 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt @@ -231,4 +231,4 @@ fun hasLowPriorityAnnotation(annotations: List) = annotations.any } fun FirAnnotation.fullyExpandedClassId(useSiteSession: FirSession): ClassId? = - coneClassLikeType?.fullyExpandedType(useSiteSession)?.classId + unexpandedConeClassLikeType?.fullyExpandedType(useSiteSession)?.classId diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt index 158951b8c1f..089ca13f0fc 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt @@ -29,11 +29,11 @@ import org.jetbrains.kotlin.fir.visitors.transformInplace import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.types.ConstantValueKind -inline val FirAnnotation.coneClassLikeType: ConeClassLikeType? +inline val FirAnnotation.unexpandedConeClassLikeType: ConeClassLikeType? get() = ((annotationTypeRef as? FirResolvedTypeRef)?.type as? ConeClassLikeType) inline val FirAnnotation.unexpandedClassId: ClassId? - get() = coneClassLikeType?.lookupTag?.classId + get() = unexpandedConeClassLikeType?.lookupTag?.classId fun buildConstOrErrorExpression(source: KtSourceElement?, kind: ConstantValueKind, value: T?, diagnostic: ConeDiagnostic): FirExpression = value?.let { diff --git a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/RequiredArgsConstructorGeneratorPart.kt b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/RequiredArgsConstructorGeneratorPart.kt index 9a614920a62..091b5195cc6 100644 --- a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/RequiredArgsConstructorGeneratorPart.kt +++ b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/RequiredArgsConstructorGeneratorPart.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.lombok.k2.generators import com.intellij.psi.PsiField import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.classId +import org.jetbrains.kotlin.fir.expressions.unexpandedClassId import org.jetbrains.kotlin.fir.java.declarations.FirJavaField import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -33,6 +33,6 @@ class RequiredArgsConstructorGeneratorPart(session: FirSession) : AbstractConstr val hasInitializer = (source?.psi as? PsiField)?.hasInitializer() ?: false if (hasInitializer) return false if (isVal) return true - return annotations.any { it.classId?.asSingleFqName() in LombokNames.NON_NULL_ANNOTATIONS } + return annotations.any { it.unexpandedClassId?.asSingleFqName() in LombokNames.NON_NULL_ANNOTATIONS } } }