[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
|
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.KtNodeTypes.VALUE_PARAMETER
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS
|
import org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_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.analysis.diagnostics.FirErrors.CYCLE_IN_ANNOTATION_PARAMETER
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
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.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType
|
import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.unsignedArrayTypeByElementType
|
import org.jetbrains.kotlin.name.StandardClassIds.unsignedArrayTypeByElementType
|
||||||
@@ -76,8 +75,8 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() {
|
|||||||
val classId = coneType?.classId
|
val classId = coneType?.classId
|
||||||
|
|
||||||
if (coneType != null) when {
|
if (coneType != null) when {
|
||||||
classId == ClassId.fromString("<error>") -> {
|
coneType is ConeErrorType -> {
|
||||||
// TODO: replace with UNRESOLVED_REFERENCE check
|
// DO NOTHING: error types already have diagnostics which are reported elsewhere.
|
||||||
}
|
}
|
||||||
coneType.isNullable -> {
|
coneType.isNullable -> {
|
||||||
reporter.reportOn(typeRef.source, FirErrors.NULLABLE_TYPE_OF_ANNOTATION_MEMBER, context)
|
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
|
// DO NOTHING: primitives are allowed as annotation class parameter
|
||||||
}
|
}
|
||||||
coneType.isUnsignedTypeOrNullableUnsignedType -> {
|
coneType.isUnsignedTypeOrNullableUnsignedType -> {
|
||||||
// TODO: replace with EXPERIMENTAL_UNSIGNED_LITERALS check
|
// DO NOTHING: unsigned types are allowed as annotation class parameter.
|
||||||
}
|
}
|
||||||
classId == StandardClassIds.KClass -> {
|
classId == StandardClassIds.KClass -> {
|
||||||
// DO NOTHING: KClass is allowed
|
// DO NOTHING: KClass is allowed
|
||||||
@@ -119,9 +118,8 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() {
|
|||||||
member is FirProperty && member.source?.elementType == VALUE_PARAMETER -> {
|
member is FirProperty && member.source?.elementType == VALUE_PARAMETER -> {
|
||||||
// DO NOTHING to avoid reporting constructor properties
|
// 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
|
// DO NOTHING to avoid reporting synthetic functions
|
||||||
// TODO: replace with origin check
|
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
reporter.reportOn(member.source, FirErrors.ANNOTATION_CLASS_MEMBER, context)
|
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 {
|
val componentFunction = buildSimpleFunction {
|
||||||
source = sourceNode?.toFirSourceElement(KtFakeSourceElementKind.DataClassGeneratedMembers)
|
source = sourceNode?.toFirSourceElement(KtFakeSourceElementKind.DataClassGeneratedMembers)
|
||||||
moduleData = baseModuleData
|
moduleData = baseModuleData
|
||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Synthetic
|
||||||
returnTypeRef = firProperty.returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers)
|
returnTypeRef = firProperty.returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers)
|
||||||
this.name = name
|
this.name = name
|
||||||
status = FirDeclarationStatusImpl(firProperty.visibility, Modality.FINAL).apply {
|
status = FirDeclarationStatusImpl(firProperty.visibility, Modality.FINAL).apply {
|
||||||
@@ -1068,7 +1068,7 @@ fun <TBase, TSource : TBase, TParameter : TBase> FirRegularClassBuilder.createDa
|
|||||||
val classTypeRef = createClassTypeRefWithSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers)
|
val classTypeRef = createClassTypeRefWithSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers)
|
||||||
this.source = toFirSource(sourceElement, KtFakeSourceElementKind.DataClassGeneratedMembers)
|
this.source = toFirSource(sourceElement, KtFakeSourceElementKind.DataClassGeneratedMembers)
|
||||||
moduleData = this@createDataClassCopyFunction.moduleData
|
moduleData = this@createDataClassCopyFunction.moduleData
|
||||||
origin = this@createDataClassCopyFunction.origin
|
origin = FirDeclarationOrigin.Synthetic
|
||||||
returnTypeRef = classTypeRef
|
returnTypeRef = classTypeRef
|
||||||
name = StandardNames.DATA_CLASS_COPY
|
name = StandardNames.DATA_CLASS_COPY
|
||||||
status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL)
|
status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL)
|
||||||
@@ -1084,7 +1084,7 @@ fun <TBase, TSource : TBase, TParameter : TBase> FirRegularClassBuilder.createDa
|
|||||||
source = parameterSource
|
source = parameterSource
|
||||||
containingFunctionSymbol = this@buildSimpleFunction.symbol
|
containingFunctionSymbol = this@buildSimpleFunction.symbol
|
||||||
moduleData = this@createDataClassCopyFunction.moduleData
|
moduleData = this@createDataClassCopyFunction.moduleData
|
||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Synthetic
|
||||||
returnTypeRef = propertyReturnTypeRef
|
returnTypeRef = propertyReturnTypeRef
|
||||||
name = propertyName
|
name = propertyName
|
||||||
symbol = FirValueParameterSymbol(propertyName)
|
symbol = FirValueParameterSymbol(propertyName)
|
||||||
|
|||||||
Reference in New Issue
Block a user