[FIR] Check actuals in FirOverloadsChecker
This commit is contained in:
committed by
Space Team
parent
a9207a8396
commit
e7f1da3619
+6
-8
@@ -14,10 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
|
|||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isAbstract
|
import org.jetbrains.kotlin.fir.declarations.utils.isAbstract
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||||
@@ -29,8 +26,10 @@ object FirOverloadsChecker : FirFunctionChecker() {
|
|||||||
override fun check(declaration: FirFunction, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirFunction, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
val session = context.session
|
val session = context.session
|
||||||
val annotation = declaration.getAnnotationByClassId(JVM_OVERLOADS_CLASS_ID, session) ?: return
|
val annotation = declaration.getAnnotationByClassId(JVM_OVERLOADS_CLASS_ID, session) ?: return
|
||||||
//todo need to have expect declaration here to check if it has default values
|
|
||||||
if (declaration.isActual) return
|
val ownerOfParametersWithDefaultValues = declaration.symbol.takeIf { !it.isActual }
|
||||||
|
?: declaration.symbol.getSingleExpectForActualOrNull()
|
||||||
|
?: return
|
||||||
|
|
||||||
val containingDeclaration = declaration.getContainingClassSymbol(session)
|
val containingDeclaration = declaration.getContainingClassSymbol(session)
|
||||||
when {
|
when {
|
||||||
@@ -45,9 +44,8 @@ object FirOverloadsChecker : FirFunctionChecker() {
|
|||||||
reporter.reportOn(annotation.source, FirJvmErrors.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR, context)
|
reporter.reportOn(annotation.source, FirJvmErrors.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR, context)
|
||||||
!declaration.visibility.isPublicAPI && declaration.visibility != Visibilities.Internal ->
|
!declaration.visibility.isPublicAPI && declaration.visibility != Visibilities.Internal ->
|
||||||
reporter.reportOn(annotation.source, FirJvmErrors.OVERLOADS_PRIVATE, context)
|
reporter.reportOn(annotation.source, FirJvmErrors.OVERLOADS_PRIVATE, context)
|
||||||
declaration.valueParameters.none { it.defaultValue != null } ->
|
ownerOfParametersWithDefaultValues.valueParameterSymbols.none { it.hasDefaultValue } ->
|
||||||
reporter.reportOn(annotation.source, FirJvmErrors.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS, context)
|
reporter.reportOn(annotation.source, FirJvmErrors.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user