[FIR] Remove redundant TODOs from FirSamResolver

This commit is contained in:
Dmitriy Novozhilov
2023-06-26 11:34:19 +03:00
committed by Space Team
parent 213b39f213
commit d3a098e7ef
2 changed files with 13 additions and 6 deletions
@@ -41,6 +41,8 @@ import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.addToStdlib.unreachableBranch
private val SAM_PARAMETER_NAME = Name.identifier("function") private val SAM_PARAMETER_NAME = Name.identifier("function")
@@ -73,14 +75,13 @@ class FirSamResolver(
val upperType = getFunctionTypeForPossibleSamType(type.upperBound) ?: return null val upperType = getFunctionTypeForPossibleSamType(type.upperBound) ?: return null
ConeFlexibleType(lowerType.lowerBoundIfFlexible(), upperType.upperBoundIfFlexible()) ConeFlexibleType(lowerType.lowerBoundIfFlexible(), upperType.upperBoundIfFlexible())
} }
is ConeStubType -> null
// TODO: support those types as well is ConeStubType, is ConeTypeParameterType, is ConeTypeVariableType,
is ConeTypeParameterType, is ConeTypeVariableType,
is ConeCapturedType, is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeCapturedType, is ConeDefinitelyNotNullType, is ConeIntersectionType,
is ConeIntegerLiteralType, is ConeIntegerLiteralType,
-> null -> null
// TODO: Thing of getting rid of this branch since ConeLookupTagBasedType should be a sealed class
is ConeLookupTagBasedType -> null is ConeLookupTagBasedType -> unreachableBranch(type)
} }
} }
@@ -282,7 +283,6 @@ private fun FirRegularClass.getSingleAbstractMethodOrNull(
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
): FirSimpleFunction? { ): FirSimpleFunction? {
// TODO: restrict to Java interfaces
if (classKind != ClassKind.INTERFACE || hasMoreThenOneAbstractFunctionOrHasAbstractProperty()) return null if (classKind != ClassKind.INTERFACE || hasMoreThenOneAbstractFunctionOrHasAbstractProperty()) return null
val samCandidateNames = computeSamCandidateNames(session) val samCandidateNames = computeSamCandidateNames(session)
@@ -334,3 +334,10 @@ private inline fun <T, R> Iterable<T>.zipWithDefault(other: Iterable<R>, leftDef
fun <T, R> Iterable<T>.zipWithNulls(other: Iterable<R>): List<Pair<T?, R?>> { fun <T, R> Iterable<T>.zipWithNulls(other: Iterable<R>): List<Pair<T?, R?>> {
return zipWithDefault(other, { null }, { null }) return zipWithDefault(other, { null }, { null })
} }
/**
* Use this function to indicate that some when branch is semantically unreachable
*/
fun unreachableBranch(argument: Any?): Nothing {
error("This argument should've been processed by previous when branches but it wasn't: $argument")
}