From d85ad650d5f0908e789e2ebcec67f8c5f712b5a4 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 10 Jun 2019 19:42:34 +0300 Subject: [PATCH] Optimization: make FirWrappedArgumentExpression an abstract class --- .../fir/expressions/FirLambdaArgumentExpression.kt | 7 ++++++- .../fir/expressions/FirNamedArgumentExpression.kt | 9 +++++++-- .../fir/expressions/FirSpreadArgumentExpression.kt | 7 ++++++- .../expressions/FirWrappedArgumentExpression.kt | 14 ++++++++++---- .../impl/FirLambdaArgumentExpressionImpl.kt | 4 ++-- .../impl/FirNamedArgumentExpressionImpl.kt | 4 ++-- .../impl/FirSpreadArgumentExpressionImpl.kt | 4 ++-- .../tree/visitors-generator/src/DataCollector.kt | 3 ++- .../kotlin/fir/visitors/FirTransformerGenerated.kt | 8 ++++++++ .../kotlin/fir/visitors/FirVisitorGenerated.kt | 4 ++++ .../kotlin/fir/visitors/FirVisitorVoidGenerated.kt | 8 ++++++++ 11 files changed, 57 insertions(+), 15 deletions(-) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt index 0fdfc21dd1a..d2ce7042e3e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt @@ -5,9 +5,14 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirLambdaArgumentExpression : FirWrappedArgumentExpression { +abstract class FirLambdaArgumentExpression( + session: FirSession, + psi: PsiElement? +) : FirWrappedArgumentExpression(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitLambdaArgumentExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt index 03c1a805fb6..400454524d1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt @@ -5,11 +5,16 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name -interface FirNamedArgumentExpression : FirWrappedArgumentExpression { - val name: Name +abstract class FirNamedArgumentExpression( + session: FirSession, + psi: PsiElement? +) : FirWrappedArgumentExpression(session, psi) { + abstract val name: Name override fun accept(visitor: FirVisitor, data: D): R = visitor.visitNamedArgumentExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt index 0de02a2d19c..796eab5e6fe 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt @@ -5,9 +5,14 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirSpreadArgumentExpression : FirWrappedArgumentExpression { +abstract class FirSpreadArgumentExpression( + session: FirSession, + psi: PsiElement? +) : FirWrappedArgumentExpression(session, psi) { override val isSpread: Boolean get() = true diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt index 8eff485c787..103ce9d769d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt @@ -5,13 +5,19 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractStatement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirWrappedArgumentExpression : FirExpression { - val expression: FirExpression +abstract class FirWrappedArgumentExpression( + session: FirSession, + psi: PsiElement? +) : FirAbstractStatement(session, psi), FirExpression { + abstract val expression: FirExpression - val isSpread: Boolean + open val isSpread: Boolean get() = false override val typeRef: FirTypeRef @@ -26,6 +32,6 @@ interface FirWrappedArgumentExpression : FirExpression { override fun acceptChildren(visitor: FirVisitor, data: D) { expression.accept(visitor, data) - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt index dc1269e7b6b..106308f6a8e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt @@ -17,9 +17,9 @@ class FirLambdaArgumentExpressionImpl( session: FirSession, psi: PsiElement?, override var expression: FirExpression -) : FirLambdaArgumentExpression, FirAbstractStatement(session, psi) { +) : FirLambdaArgumentExpression(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { expression = expression.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt index 0a0acdc719c..ac703b591a7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt @@ -20,9 +20,9 @@ class FirNamedArgumentExpressionImpl( override val name: Name, override val isSpread: Boolean, override var expression: FirExpression -) : FirNamedArgumentExpression, FirAbstractStatement(session, psi) { +) : FirNamedArgumentExpression(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { expression = expression.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt index 8c527edcaee..2321fe53671 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt @@ -17,9 +17,9 @@ class FirSpreadArgumentExpressionImpl( session: FirSession, psi: PsiElement?, override var expression: FirExpression -) : FirSpreadArgumentExpression, FirAbstractStatement(session, psi) { +) : FirSpreadArgumentExpression(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { expression = expression.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/visitors-generator/src/DataCollector.kt b/compiler/fir/tree/visitors-generator/src/DataCollector.kt index 064e6ed3e63..8f97501fe7d 100644 --- a/compiler/fir/tree/visitors-generator/src/DataCollector.kt +++ b/compiler/fir/tree/visitors-generator/src/DataCollector.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.visitors.generator +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType @@ -88,7 +89,7 @@ class DataCollector { return } val classNameWithParameters = NameWithTypeParameters(className, klass.typeParameterList?.text ?: "") - if (klass.isInterface()) { + if (klass.isInterface() || (klass.hasModifier(KtTokens.ABSTRACT_KEYWORD) && "Abstract" !in (klass.name ?: ""))) { packagePerClass[classNameWithParameters] = file.packageFqName val isBaseTT = klass.annotationEntries.any { it.shortName?.asString() == BASE_TRANSFORMED_TYPE_ANNOTATION_NAME diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index b64e9cf9854..fc716d58424 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -64,6 +64,10 @@ abstract class FirTransformer : FirVisitor { + return transformPropertyAccessor(defaultPropertyAccessor, data) + } + open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult { return transformDeclaration(errorDeclaration, data) } @@ -500,6 +504,10 @@ abstract class FirTransformer : FirVisitor { + return transformDefaultPropertyAccessor(defaultPropertyAccessor, data) + } + final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult { return transformDelegatedConstructorCall(delegatedConstructorCall, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index 5db73e1b37b..cff04ac8bb8 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -64,6 +64,10 @@ abstract class FirVisitor { return visitFunction(propertyAccessor, data) } + open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): R { + return visitPropertyAccessor(defaultPropertyAccessor, data) + } + open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): R { return visitDeclaration(errorDeclaration, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index 795d2e79f21..caceb2d1678 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -64,6 +64,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitFunction(propertyAccessor, null) } + open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor) { + visitPropertyAccessor(defaultPropertyAccessor, null) + } + open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) { visitDeclaration(errorDeclaration, null) } @@ -500,6 +504,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitDeclarationWithBody(declarationWithBody) } + final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: Nothing?) { + visitDefaultPropertyAccessor(defaultPropertyAccessor) + } + final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) { visitDelegatedConstructorCall(delegatedConstructorCall) }