[FIR] Improve synthetic function condition in annotation class checker
This commit is contained in:
+5
-7
@@ -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)
|
||||
|
||||
+3
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user