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