From 0e60af95bf4d88850f727c8784705ff2da150b54 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 20 Jun 2019 14:37:49 +0300 Subject: [PATCH] Optimization: make every FIR node extend FirPureAbstractElement --- .../org/jetbrains/kotlin/fir/FirAbstractElement.kt | 6 +++--- .../fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt | 5 +++-- .../declarations/impl/FirAnonymousInitializerImpl.kt | 7 ++++--- .../kotlin/fir/declarations/impl/FirImportImpl.kt | 7 ++++--- .../fir/types/impl/FirAbstractAnnotatedTypeRef.kt | 7 ++++--- .../fir/types/impl/FirImplicitBuiltinTypeRef.kt | 7 ++++--- .../kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt | 10 ++++++---- .../fir/types/impl/FirResolvedFunctionTypeRefImpl.kt | 11 ++++------- .../kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt | 7 ++++--- .../kotlin/fir/types/impl/FirStarProjectionImpl.kt | 7 ++++--- .../types/impl/FirTypeProjectionWithVarianceImpl.kt | 7 ++++--- 11 files changed, 44 insertions(+), 37 deletions(-) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt index 0d2e8a7e502..00a491302bd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt @@ -6,10 +6,10 @@ package org.jetbrains.kotlin.fir import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.FirExpression + +abstract class FirPureAbstractElement : FirElement abstract class FirAbstractElement( final override val session: FirSession, final override val psi: PsiElement? -) : FirElement \ No newline at end of file +) : FirPureAbstractElement() \ No newline at end of file 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 c81d7a0b384..fffb09993e2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer fun MutableList.transformInplace(transformer: FirTransformer, data: D) { val iterator = this.listIterator() while (iterator.hasNext()) { - val next = iterator.next() + val next = iterator.next() as FirPureAbstractElement val result = next.transform(transformer, data) if (result.isSingle) { iterator.set(result.single) @@ -26,6 +26,7 @@ fun MutableList.transformInplace(transformer: FirTransfor iterator.add(resultIterator.next()) } } + } } @@ -55,7 +56,7 @@ fun MutableList.transformInplaceWithBeforeOperation( } fun T.transformSingle(transformer: FirTransformer, data: D): T { - return this.transform(transformer, data).single + return (this as FirPureAbstractElement).transform(transformer, data).single } fun ModuleInfo.dependenciesWithoutSelf(): Sequence = dependencies().asSequence().filter { it != this } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt index b8e8cee0c22..56feb57bf41 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer @@ -14,10 +15,10 @@ import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirAnonymousInitializerImpl( - override val session: FirSession, - override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, override var body: FirBlock? -) : FirAnonymousInitializer { +) : FirAnonymousInitializer, FirAbstractElement(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { body = body?.transformSingle(transformer, data) return this diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt index afed2880e4b..281956f6c20 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt @@ -6,15 +6,16 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name class FirImportImpl( - override val session: FirSession, - override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, override val importedFqName: FqName?, override val isAllUnder: Boolean, override val aliasName: Name? -) : FirImport \ No newline at end of file +) : FirImport, FirAbstractElement(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt index 04433fb7db2..05d3d5c23e7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall @@ -14,10 +15,10 @@ import org.jetbrains.kotlin.fir.types.FirTypeRefWithNullability import org.jetbrains.kotlin.fir.visitors.FirTransformer abstract class FirAbstractAnnotatedTypeRef( - final override val session: FirSession, - final override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, final override val isMarkedNullable: Boolean -) : FirTypeRefWithNullability { +) : FirTypeRefWithNullability, FirAbstractElement(session, psi) { override val annotations = mutableListOf() override fun transformChildren(transformer: FirTransformer, data: D): FirElement { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt index 92a066de9b7..915b6d69d8d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl @@ -15,10 +16,10 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.name.ClassId sealed class FirImplicitBuiltinTypeRef( - override val session: FirSession, - override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, val id: ClassId -) : FirResolvedTypeRef { +) : FirResolvedTypeRef, FirAbstractElement(session, psi) { override val annotations: List get() = emptyList() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt index b9e1630c1ef..da2825b6734 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt @@ -6,19 +6,21 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement +import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef class FirImplicitTypeRefImpl( - override val session: FirSession, - override val psi: PsiElement? -) : FirImplicitTypeRef { + session: FirSession, + psi: PsiElement? +) : FirImplicitTypeRef, FirAbstractElement(session, psi) { override val annotations: List get() = emptyList() } -object FirComputingImplicitTypeRef : FirImplicitTypeRef { +object FirComputingImplicitTypeRef : FirImplicitTypeRef, FirPureAbstractElement() { override val psi: PsiElement? get() = null override val session: FirSession diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt index 153dc40ddba..223850375dd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt @@ -6,27 +6,24 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirResolvedFunctionTypeRefImpl( - override val psi: PsiElement?, - override val session: FirSession, + psi: PsiElement?, + session: FirSession, override val isMarkedNullable: Boolean, override val annotations: MutableList, override var receiverTypeRef: FirTypeRef?, override val valueParameters: MutableList, override var returnTypeRef: FirTypeRef, override val type: ConeKotlinType -) : FirResolvedFunctionTypeRef { +) : FirResolvedFunctionTypeRef, FirAbstractElement(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt index 7065a3ad711..cc4741de9fb 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt @@ -6,14 +6,15 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef class FirResolvedTypeRefImpl( - override val session: FirSession, - override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, override val type: ConeKotlinType, override val annotations: List = emptyList() -) : FirResolvedTypeRef \ No newline at end of file +) : FirResolvedTypeRef, FirAbstractElement(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt index f398a964194..02b9a807a2e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt @@ -6,10 +6,11 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.types.FirStarProjection class FirStarProjectionImpl( - override val session: FirSession, - override val psi: PsiElement? -) : FirStarProjection \ No newline at end of file + session: FirSession, + psi: PsiElement? +) : FirStarProjection, FirAbstractElement(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt index f3b95453a80..c3c0ad56993 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.transformSingle @@ -15,11 +16,11 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.types.Variance class FirTypeProjectionWithVarianceImpl( - override val session: FirSession, - override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, override val variance: Variance, override var typeRef: FirTypeRef -) : FirTypeProjectionWithVariance { +) : FirTypeProjectionWithVariance, FirAbstractElement(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { typeRef = typeRef.transformSingle(transformer, data)