[FIR] Eliminate isNotSAM optimization as ineffective (see dc4f332c)
This commit is contained in:
@@ -11,7 +11,7 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary
|
||||
@@ -19,6 +19,9 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParameterBuilder
|
||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.AbstractFirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.constructType
|
||||
import org.jetbrains.kotlin.fir.generateValueOfFunction
|
||||
import org.jetbrains.kotlin.fir.generateValuesFunction
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.lazyNestedClassifierScope
|
||||
@@ -27,6 +30,7 @@ import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.ConeNullability
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.toFirSourceElement
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
@@ -259,7 +263,6 @@ class JavaSymbolProvider(
|
||||
generateValuesFunction(session, classId.packageFqName, classId.relativeClassName)
|
||||
generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName)
|
||||
}
|
||||
isNotSam = isNotSam()
|
||||
parentClassTypeParameterStackCache.remove(firSymbol)
|
||||
}
|
||||
firJavaClass.replaceSuperTypeRefs(
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
import org.jetbrains.kotlin.fir.FirPureAbstractElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
@@ -119,7 +118,6 @@ internal class FirJavaClassBuilder : AbstractFirRegularClassBuilder, FirAnnotati
|
||||
isCompanion = false
|
||||
isData = false
|
||||
isInline = false
|
||||
isNotSAM = this@FirJavaClassBuilder.isNotSam
|
||||
}
|
||||
|
||||
return FirJavaClass(
|
||||
|
||||
-1
@@ -458,7 +458,6 @@ class DeclarationsConverter(
|
||||
generateValuesFunction(baseSession, context.packageFqName, context.className)
|
||||
generateValueOfFunction(baseSession, context.packageFqName, context.className)
|
||||
}
|
||||
calculateSAM()
|
||||
}.build()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -635,7 +635,6 @@ class RawFirBuilder(session: FirSession, val baseScopeProvider: FirScopeProvider
|
||||
generateValuesFunction(baseSession, context.packageFqName, context.className)
|
||||
generateValueOfFunction(baseSession, context.packageFqName, context.className)
|
||||
}
|
||||
calculateSAM()
|
||||
}.build()
|
||||
}
|
||||
}
|
||||
|
||||
-2
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.deserialization
|
||||
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.builder.FirClassImplBuilder
|
||||
@@ -134,7 +133,6 @@ fun deserializeClassToSymbol(
|
||||
ClassId.fromString(nameResolver.getQualifiedClassName(it))
|
||||
}
|
||||
}
|
||||
calculateSAM()
|
||||
}.build().also {
|
||||
(it.annotations as MutableList<FirAnnotationCall>) += context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver)
|
||||
}
|
||||
|
||||
@@ -252,8 +252,6 @@ private fun FirRegularClass.findSingleAbstractMethodByNames(
|
||||
scopeSession: ScopeSession,
|
||||
samCandidateNames: Set<Name>,
|
||||
): FirSimpleFunction? {
|
||||
if (status.isNotSAM) return null
|
||||
|
||||
var resultMethod: FirSimpleFunction? = null
|
||||
var metIncorrectMember = false
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ interface FirDeclarationStatus : FirElement {
|
||||
val isData: Boolean
|
||||
val isSuspend: Boolean
|
||||
val isStatic: Boolean
|
||||
val isNotSAM: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDeclarationStatus(this, data)
|
||||
}
|
||||
|
||||
-1
@@ -34,7 +34,6 @@ interface FirResolvedDeclarationStatus : FirDeclarationStatus {
|
||||
override val isData: Boolean
|
||||
override val isSuspend: Boolean
|
||||
override val isStatic: Boolean
|
||||
override val isNotSAM: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedDeclarationStatus(this, data)
|
||||
}
|
||||
|
||||
@@ -6,10 +6,6 @@
|
||||
package org.jetbrains.kotlin.fir
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
|
||||
@@ -20,26 +16,3 @@ fun FirBlock.returnExpressions(): List<FirExpression> = listOfNotNull(statements
|
||||
|
||||
private val PUBLIC_METHOD_NAMES_IN_OBJECT = setOf("equals", "hashCode", "getClass", "wait", "notify", "notifyAll", "toString")
|
||||
|
||||
fun AbstractFirRegularClassBuilder.calculateSAM() {
|
||||
val status = status as FirDeclarationStatusImpl
|
||||
status.isNotSAM = isNotSam()
|
||||
}
|
||||
|
||||
fun AbstractFirRegularClassBuilder.isNotSam(): Boolean {
|
||||
var counter = 0
|
||||
for (declaration in declarations) {
|
||||
if (declaration is FirProperty && declaration.modality == Modality.ABSTRACT) {
|
||||
return true
|
||||
}
|
||||
if (declaration is FirSimpleFunction) {
|
||||
if (declaration.modality != Modality.ABSTRACT || declaration.name.asString() in PUBLIC_METHOD_NAMES_IN_OBJECT) {
|
||||
continue
|
||||
}
|
||||
counter++
|
||||
if (counter > 1) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
+1
-8
@@ -121,12 +121,6 @@ open class FirDeclarationStatusImpl(
|
||||
this[STATIC] = value
|
||||
}
|
||||
|
||||
override var isNotSAM: Boolean
|
||||
get() = this[NOT_SAM]
|
||||
set(value) {
|
||||
this[NOT_SAM] = value
|
||||
}
|
||||
|
||||
private enum class Modifier(val mask: Int) {
|
||||
EXPECT(0x1),
|
||||
ACTUAL(0x2),
|
||||
@@ -142,8 +136,7 @@ open class FirDeclarationStatusImpl(
|
||||
COMPANION(0x800),
|
||||
DATA(0x1000),
|
||||
SUSPEND(0x2000),
|
||||
STATIC(0x4000),
|
||||
NOT_SAM(0x8000)
|
||||
STATIC(0x4000)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
+1
-2
@@ -296,8 +296,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+modality
|
||||
generateBooleanFields(
|
||||
"expect", "actual", "override", "operator", "infix", "inline", "tailRec",
|
||||
"external", "const", "lateInit", "inner", "companion", "data", "suspend",
|
||||
"static", "notSAM"
|
||||
"external", "const", "lateInit", "inner", "companion", "data", "suspend", "static"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user