[FIR] Remove duplicated logic for isMethodOfAny utility
This commit is contained in:
committed by
Space Team
parent
4da51ee997
commit
210ad770aa
+2
-6
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.hasModifier
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.types.isNullableAny
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isMethodOfAny
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
@@ -27,11 +27,7 @@ object FirDataObjectContentChecker : FirSimpleFunctionChecker() {
|
||||
val containingClass = context.containingDeclarations.lastOrNull() as? FirClass ?: return
|
||||
if (containingClass.classKind != ClassKind.OBJECT || !containingClass.hasModifier(KtTokens.DATA_KEYWORD)) return
|
||||
|
||||
if (
|
||||
(declaration.name == OperatorNameConventions.HASH_CODE && declaration.valueParameters.isEmpty()) ||
|
||||
(declaration.name == OperatorNameConventions.EQUALS &&
|
||||
declaration.valueParameters.singleOrNull()?.returnTypeRef?.isNullableAny == true)
|
||||
) {
|
||||
if (declaration.symbol.isMethodOfAny && declaration.name != OperatorNameConventions.TO_STRING) {
|
||||
reporter.reportOn(source, FirErrors.DATA_OBJECT_CUSTOM_EQUALS_OR_HASH_CODE, context)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-9
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isMethodOfAny
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||
@@ -40,7 +41,6 @@ import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.dump
|
||||
import org.jetbrains.kotlin.ir.util.isFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.ir.util.isInterface
|
||||
import org.jetbrains.kotlin.ir.util.isMethodOfAny
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator.commonSuperType
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
@@ -1128,7 +1128,7 @@ class CallAndReferenceGenerator(
|
||||
if (resolvedFirSymbol?.dispatchReceiverType != null) {
|
||||
val baseDispatchReceiver = qualifiedAccess.findIrDispatchReceiver(explicitReceiverExpression)
|
||||
dispatchReceiver =
|
||||
if (!resolvedFirSymbol.isMethodOfAny() || baseDispatchReceiver?.type?.classOrNull?.owner?.isInterface != true) {
|
||||
if (!resolvedFirSymbol.isFunctionFromAny() || baseDispatchReceiver?.type?.classOrNull?.owner?.isInterface != true) {
|
||||
baseDispatchReceiver
|
||||
} else {
|
||||
// NB: for FE 1.0, this type cast is added by InterfaceObjectCallsLowering
|
||||
@@ -1172,14 +1172,9 @@ class CallAndReferenceGenerator(
|
||||
return this
|
||||
}
|
||||
|
||||
private fun FirCallableSymbol<*>.isMethodOfAny(): Boolean {
|
||||
private fun FirCallableSymbol<*>.isFunctionFromAny(): Boolean {
|
||||
if (this !is FirNamedFunctionSymbol) return false
|
||||
if (receiverParameter != null) return false
|
||||
return when (name) {
|
||||
OperatorNameConventions.HASH_CODE, OperatorNameConventions.TO_STRING -> valueParameterSymbols.isEmpty()
|
||||
OperatorNameConventions.EQUALS -> valueParameterSymbols.singleOrNull()?.resolvedReturnType?.isNullableAny == true
|
||||
else -> false
|
||||
}
|
||||
return isMethodOfAny
|
||||
}
|
||||
|
||||
private fun generateErrorCallExpression(
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.types.isNullableAny
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrMaybeDeserializedClass
|
||||
@@ -27,9 +26,11 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.util.DeserializableClass
|
||||
import org.jetbrains.kotlin.ir.util.isComposite
|
||||
import org.jetbrains.kotlin.ir.util.isEnumClass
|
||||
import org.jetbrains.kotlin.ir.util.isObject
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
class Fir2IrLazyClass(
|
||||
@@ -239,13 +240,8 @@ class Fir2IrLazyClass(
|
||||
get() = fir.isNewPlaceForBodyGeneration == true
|
||||
|
||||
private fun FirNamedFunctionSymbol.isAbstractMethodOfAny(): Boolean {
|
||||
val fir = fir
|
||||
if (fir.modality != Modality.ABSTRACT) return false
|
||||
return when (fir.name) {
|
||||
OperatorNameConventions.EQUALS -> fir.valueParameters.singleOrNull()?.returnTypeRef?.isNullableAny == true
|
||||
OperatorNameConventions.HASH_CODE, OperatorNameConventions.TO_STRING -> fir.valueParameters.isEmpty()
|
||||
else -> false
|
||||
}
|
||||
if (modality != Modality.ABSTRACT) return false
|
||||
return isMethodOfAny
|
||||
}
|
||||
|
||||
private var irLoaded: Boolean? = null
|
||||
|
||||
+12
@@ -6,10 +6,13 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.utils
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
import org.jetbrains.kotlin.fir.types.isNullableAny
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedTypeRef.coneTypeSafe()
|
||||
|
||||
@@ -56,3 +59,12 @@ val FirMemberDeclaration.nameOrSpecialName: Name
|
||||
is FirTypeAlias ->
|
||||
this.name
|
||||
}
|
||||
|
||||
val FirNamedFunctionSymbol.isMethodOfAny: Boolean
|
||||
get() {
|
||||
return when (name) {
|
||||
OperatorNameConventions.EQUALS -> valueParameterSymbols.singleOrNull()?.resolvedReturnType?.isNullableAny == true
|
||||
OperatorNameConventions.HASH_CODE, OperatorNameConventions.TO_STRING -> fir.valueParameters.isEmpty()
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user