[FIR] Improve synthetic function condition in annotation class checker

This commit is contained in:
Brian Norman
2023-06-27 16:37:41 +03:00
committed by Space Team
parent e7a10057f2
commit b74ff19930
2 changed files with 8 additions and 10 deletions
@@ -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("<error>") -> {
// 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)
@@ -875,7 +875,7 @@ abstract class AbstractRawFirBuilder<T>(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 <TBase, TSource : TBase, TParameter : TBase> 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 <TBase, TSource : TBase, TParameter : TBase> 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)