[FIR] Implement early calculation of "not SAM" flag for classes

This commit is contained in:
Mikhail Glukhikh
2020-01-24 13:47:21 +03:00
parent 279adae3e4
commit dc4f332c08
10 changed files with 50 additions and 13 deletions
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.deserialization
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.calculateSAM
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.addDeclarations
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirSealedClassImpl
import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider
import org.jetbrains.kotlin.fir.declarations.impl.*
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -150,4 +149,5 @@ fun deserializeClassToSymbol(
}
}
}
firClass.calculateSAM()
}
@@ -244,6 +244,8 @@ private fun FirRegularClass.findSingleAbstractMethodByNames(
scopeSession: ScopeSession,
samCandidateNames: Set<Name>
): FirSimpleFunction? {
if (status.isNotSAM) return null
var resultMethod: FirSimpleFunction? = null
var metIncorrectMember = false