From 3483bc41fdd55b1286237e1cd898b9bca1c4d14d Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Oct 2021 12:50:35 +0300 Subject: [PATCH] FIR: set substituteTypes value explicitly in some lookupSupertypes calls --- .../checkers/declaration/FirInlineClassDeclarationChecker.kt | 3 ++- .../src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt | 3 ++- .../src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt index da45c73392b..f6266b6af59 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt @@ -218,7 +218,8 @@ object FirInlineClassDeclarationChecker : FirRegularClassChecker() { private fun FirRegularClass.isSubtypeOfCloneable(session: FirSession): Boolean { if (classId.isCloneableId()) return true - return lookupSuperTypes(this, lookupInterfaces = true, deep = true, session).any { superType -> + return lookupSuperTypes(this, lookupInterfaces = true, deep = true, session, substituteTypes = false).any { superType -> + // Note: We check just classId here, so type substitution isn't needed ^ (we aren't interested in type arguments) (superType as? ConeClassLikeType)?.fullyExpandedType(session)?.lookupTag?.classId?.isCloneableId() == true } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index a6d79f134cf..3a81390cf5e 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt @@ -237,7 +237,8 @@ abstract class FirVisibilityChecker : FirSessionComponent { private fun FirClass.isSubClass(ownerLookupTag: ConeClassLikeLookupTag, session: FirSession): Boolean { if (classId.isSame(ownerLookupTag.classId)) return true - return lookupSuperTypes(this, lookupInterfaces = true, deep = true, session).any { superType -> + return lookupSuperTypes(this, lookupInterfaces = true, deep = true, session, substituteTypes = false).any { superType -> + // Note: We check just classId here, so type substitution isn't needed ^ (we aren't interested in type arguments) (superType as? ConeClassLikeType)?.fullyExpandedType(session)?.lookupTag?.classId?.isSame(ownerLookupTag.classId) == true } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt index ba453c862b2..9242d12263f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt @@ -251,7 +251,8 @@ private fun FirRegularClass.getSingleAbstractMethodOrNull( private fun FirRegularClass.computeSamCandidateNames(session: FirSession): Set { val classes = - lookupSuperTypes(this, lookupInterfaces = true, deep = true, useSiteSession = session) + // Note: we search only for names in this function, so substitution is not needed V + lookupSuperTypes(this, lookupInterfaces = true, deep = true, useSiteSession = session, substituteTypes = false) .mapNotNullTo(mutableListOf(this)) { (session.symbolProvider.getSymbolByLookupTag(it.lookupTag) as? FirRegularClassSymbol)?.fir }