From b74ff19930bd6f8d1208f39903bf8f6ebbb5597c Mon Sep 17 00:00:00 2001 From: Brian Norman Date: Tue, 27 Jun 2023 16:37:41 +0300 Subject: [PATCH] [FIR] Improve synthetic function condition in annotation class checker --- .../FirAnnotationClassDeclarationChecker.kt | 12 +++++------- .../kotlin/fir/builder/AbstractRawFirBuilder.kt | 6 +++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt index 987515c81ae..c0783259aef 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration -import org.jetbrains.kotlin.KtNodeTypes.FUN import org.jetbrains.kotlin.KtNodeTypes.VALUE_PARAMETER import org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS @@ -21,12 +20,12 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.* import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CYCLE_IN_ANNOTATION_PARAMETER import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isLocal +import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType import org.jetbrains.kotlin.name.StandardClassIds.unsignedArrayTypeByElementType @@ -76,8 +75,8 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { val classId = coneType?.classId if (coneType != null) when { - classId == ClassId.fromString("") -> { - // TODO: replace with UNRESOLVED_REFERENCE check + coneType is ConeErrorType -> { + // DO NOTHING: error types already have diagnostics which are reported elsewhere. } coneType.isNullable -> { reporter.reportOn(typeRef.source, FirErrors.NULLABLE_TYPE_OF_ANNOTATION_MEMBER, context) @@ -86,7 +85,7 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { // DO NOTHING: primitives are allowed as annotation class parameter } coneType.isUnsignedTypeOrNullableUnsignedType -> { - // TODO: replace with EXPERIMENTAL_UNSIGNED_LITERALS check + // DO NOTHING: unsigned types are allowed as annotation class parameter. } classId == StandardClassIds.KClass -> { // DO NOTHING: KClass is allowed @@ -119,9 +118,8 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { member is FirProperty && member.source?.elementType == VALUE_PARAMETER -> { // DO NOTHING to avoid reporting constructor properties } - member is FirSimpleFunction && member.source?.elementType != FUN -> { + member is FirSimpleFunction && member.isSynthetic -> { // DO NOTHING to avoid reporting synthetic functions - // TODO: replace with origin check } else -> { reporter.reportOn(member.source, FirErrors.ANNOTATION_CLASS_MEMBER, context) diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt index 2639be90e52..f5b4cde5bf3 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt @@ -875,7 +875,7 @@ abstract class AbstractRawFirBuilder(val baseSession: FirSession, val context val componentFunction = buildSimpleFunction { source = sourceNode?.toFirSourceElement(KtFakeSourceElementKind.DataClassGeneratedMembers) moduleData = baseModuleData - origin = FirDeclarationOrigin.Source + origin = FirDeclarationOrigin.Synthetic returnTypeRef = firProperty.returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers) this.name = name status = FirDeclarationStatusImpl(firProperty.visibility, Modality.FINAL).apply { @@ -1068,7 +1068,7 @@ fun FirRegularClassBuilder.createDa val classTypeRef = createClassTypeRefWithSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers) this.source = toFirSource(sourceElement, KtFakeSourceElementKind.DataClassGeneratedMembers) moduleData = this@createDataClassCopyFunction.moduleData - origin = this@createDataClassCopyFunction.origin + origin = FirDeclarationOrigin.Synthetic returnTypeRef = classTypeRef name = StandardNames.DATA_CLASS_COPY status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL) @@ -1084,7 +1084,7 @@ fun FirRegularClassBuilder.createDa source = parameterSource containingFunctionSymbol = this@buildSimpleFunction.symbol moduleData = this@createDataClassCopyFunction.moduleData - origin = FirDeclarationOrigin.Source + origin = FirDeclarationOrigin.Synthetic returnTypeRef = propertyReturnTypeRef name = propertyName symbol = FirValueParameterSymbol(propertyName)