[FIR] Remove unused code from FirExpectActualDeclarationChecker

Dima said this code is not needed.
This commit is contained in:
Nikolay Lunyak
2023-06-27 16:03:27 +03:00
committed by Space Team
parent 62d0060f0d
commit b8377d49a8
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
@@ -21,18 +20,14 @@ import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.utils.isExternal
import org.jetbrains.kotlin.fir.declarations.utils.isTailRec
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.scopes.collectAllFunctions
import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.toSymbol
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.*
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
@Suppress("DuplicatedCode")
object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
@@ -131,7 +126,7 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
val singleIncompatibility = compatibilityToMembersMap.keys.singleOrNull()
when {
singleIncompatibility is Incompatible.ClassScopes -> {
assert(symbol is FirRegularClassSymbol || symbol is FirTypeAliasSymbol) {
require(symbol is FirRegularClassSymbol || symbol is FirTypeAliasSymbol) {
"Incompatible.ClassScopes is only possible for a class or a typealias: $declaration"
}
@@ -146,7 +141,6 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
val actualMember = incompatibility.values.singleOrNull()?.singleOrNull()
@OptIn(SymbolInternals::class)
return actualMember != null &&
actualMember.isExplicitActualDeclaration() &&
!incompatibility.allStrongIncompatibilities() &&
actualMember.fir.expectForActual?.values?.singleOrNull()?.singleOrNull() == expectedMember
}
@@ -168,17 +162,7 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
)
}
else -> {
val expected = compatibilityToMembersMap[Compatible]!!.first()
if (expected is FirRegularClassSymbol && expected.classKind == ClassKind.ANNOTATION_CLASS) {
val klass = symbol.expandedClass(session)
val actualConstructor = klass?.declarationSymbols?.firstIsInstanceOrNull<FirConstructorSymbol>()
val expectedConstructor = expected.declarationSymbols.firstIsInstanceOrNull<FirConstructorSymbol>()
if (expectedConstructor != null && actualConstructor != null) {
checkAnnotationConstructors(source, expectedConstructor, actualConstructor, context, reporter)
}
}
}
else -> {}
}
val expectedSingleCandidate = symbol.getSingleExpectForActualOrNull()
if (expectedSingleCandidate != null) {
@@ -191,38 +175,6 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
}
}
@Suppress("UNUSED_PARAMETER")
private fun checkAnnotationConstructors(
source: KtSourceElement?,
expected: FirConstructorSymbol,
actual: FirConstructorSymbol,
context: CheckerContext,
reporter: DiagnosticReporter
) {
for (expectedValueParameter in expected.valueParameterSymbols) {
// Actual parameter with the same name is guaranteed to exist because this method is only called for compatible annotations
val actualValueDescriptor = actual.valueParameterSymbols.first { it.name == expectedValueParameter.name }
if (expectedValueParameter.hasDefaultValue && actualValueDescriptor.hasDefaultValue) {
// TODO
// val expectedParameter =
// DescriptorToSourceUtils.descriptorToDeclaration(expectedValueParameter) as? KtParameter ?: continue
//
// val expectedValue = trace.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expectedParameter.defaultValue)
// ?.toConstantValue(expectedValueParameter.type)
//
// val actualValue =
// getActualAnnotationParameterValue(actualValueDescriptor, trace.bindingContext, expectedValueParameter.type)
// if (expectedValue != actualValue) {
// val ktParameter = DescriptorToSourceUtils.descriptorToDeclaration(actualValueDescriptor)
// val target = (ktParameter as? KtParameter)?.defaultValue ?: (reportOn as? KtTypeAlias)?.nameIdentifier ?: reportOn
// trace.report(Errors.ACTUAL_ANNOTATION_CONFLICTING_DEFAULT_ARGUMENT_VALUE.on(target, actualValueDescriptor))
// }
}
}
}
private fun checkAmbiguousExpects(
actualDeclaration: FirBasedSymbol<*>,
compatibility: Map<ExpectActualCompatibility<FirBasedSymbol<*>>, List<FirBasedSymbol<*>>>,
@@ -293,31 +245,6 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
// - value parameter inside primary constructor of inline class, because inline class must have one value parameter
private fun requireActualModifier(declaration: FirBasedSymbol<*>, session: FirSession): Boolean {
return !declaration.isAnnotationConstructor(session) &&
!declaration.isPrimaryConstructorOfInlineOrValueClass(session) &&
!isUnderlyingPropertyOfInlineClass(declaration)
}
@Suppress("UNUSED_PARAMETER")
private fun isUnderlyingPropertyOfInlineClass(declaration: FirBasedSymbol<*>): Boolean {
// TODO
// return declaration is PropertyDescriptor && declaration.isUnderlyingPropertyOfInlineClass()
return false
}
private fun FirBasedSymbol<*>.isExplicitActualDeclaration(): Boolean {
// return when (this) {
// is FirConstructor -> DescriptorToSourceUtils.getSourceFromDescriptor(this) is KtConstructor<*>
// is FirCallableMemberDeclaration<*> -> kind == CallableMemberDescriptor.Kind.DECLARATION
// else -> true
// }
return true
}
}
fun FirBasedSymbol<*>.expandedClass(session: FirSession): FirRegularClassSymbol? {
return when (this) {
is FirTypeAliasSymbol -> resolvedExpandedTypeRef.coneType.fullyExpandedType(session).toSymbol(session) as? FirRegularClassSymbol
is FirRegularClassSymbol -> this
else -> null
!declaration.isPrimaryConstructorOfInlineOrValueClass(session)
}
}