From 82c8b5f3689b8fed819a34a9bf5ddc3118258535 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 19 Feb 2020 11:15:02 +0300 Subject: [PATCH] [FIR] Eliminate isNotSAM optimization as ineffective (see dc4f332c) --- .../kotlin/fir/java/JavaSymbolProvider.kt | 7 +++-- .../fir/java/declarations/FirJavaClass.kt | 2 -- .../converter/DeclarationsConverter.kt | 1 - .../kotlin/fir/builder/RawFirBuilder.kt | 1 - .../deserialization/ClassDeserialization.kt | 2 -- .../kotlin/fir/resolve/SamResolution.kt | 2 -- .../fir/declarations/FirDeclarationStatus.kt | 1 - .../FirResolvedDeclarationStatus.kt | 1 - .../src/org/jetbrains/kotlin/fir/Utils.kt | 27 ------------------- .../impl/FirDeclarationStatusImpl.kt | 9 +------ .../fir/tree/generator/NodeConfigurator.kt | 3 +-- 11 files changed, 7 insertions(+), 49 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index dca6c782fc9..e6e1804cc02 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -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( diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt index b6160395420..17d29a82bfd 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt @@ -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( diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 6695fa76b1d..9cbceef6cb7 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -458,7 +458,6 @@ class DeclarationsConverter( generateValuesFunction(baseSession, context.packageFqName, context.className) generateValueOfFunction(baseSession, context.packageFqName, context.className) } - calculateSAM() }.build() } } diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index d96fa4fda5a..d3341d42f6b 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -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() } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index bb102c908ed..601bd59bda9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -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) += context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver) } 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 1d6df664798..91d2c4c07f9 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 @@ -252,8 +252,6 @@ private fun FirRegularClass.findSingleAbstractMethodByNames( scopeSession: ScopeSession, samCandidateNames: Set, ): FirSimpleFunction? { - if (status.isNotSAM) return null - var resultMethod: FirSimpleFunction? = null var metIncorrectMember = false diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt index 1b3d21703e7..81b48585fbf 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt @@ -35,7 +35,6 @@ interface FirDeclarationStatus : FirElement { val isData: Boolean val isSuspend: Boolean val isStatic: Boolean - val isNotSAM: Boolean override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDeclarationStatus(this, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt index b1bbe1bfd37..44c45a4c243 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt @@ -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 accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedDeclarationStatus(this, data) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt index 1933fa36e1f..08b9f2b7f6e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt @@ -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 = 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 -} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt index 23c4b2d7a5b..082ca04e221 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt @@ -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 acceptChildren(visitor: FirVisitor, data: D) {} diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 3c78cc9e3db..44b48e689a1 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -296,8 +296,7 @@ object NodeConfigurator : AbstractFieldConfigurator(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" ) }