Optimization: make FirWrappedArgumentExpression an abstract class

This commit is contained in:
Mikhail Glukhikh
2019-06-10 19:42:34 +03:00
parent b71de954ff
commit d85ad650d5
11 changed files with 57 additions and 15 deletions
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitLambdaArgumentExpression(this, data)
}
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitNamedArgumentExpression(this, data)
@@ -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
@@ -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 <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
expression.accept(visitor, data)
super.acceptChildren(visitor, data)
super<FirExpression>.acceptChildren(visitor, data)
}
}
@@ -17,9 +17,9 @@ class FirLambdaArgumentExpressionImpl(
session: FirSession,
psi: PsiElement?,
override var expression: FirExpression
) : FirLambdaArgumentExpression, FirAbstractStatement(session, psi) {
) : FirLambdaArgumentExpression(session, psi) {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
expression = expression.transformSingle(transformer, data)
return super<FirAbstractStatement>.transformChildren(transformer, data)
return super.transformChildren(transformer, data)
}
}
@@ -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 <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
expression = expression.transformSingle(transformer, data)
return super<FirAbstractStatement>.transformChildren(transformer, data)
return super.transformChildren(transformer, data)
}
}
@@ -17,9 +17,9 @@ class FirSpreadArgumentExpressionImpl(
session: FirSession,
psi: PsiElement?,
override var expression: FirExpression
) : FirSpreadArgumentExpression, FirAbstractStatement(session, psi) {
) : FirSpreadArgumentExpression(session, psi) {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
expression = expression.transformSingle(transformer, data)
return super<FirAbstractStatement>.transformChildren(transformer, data)
return super.transformChildren(transformer, data)
}
}
@@ -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
@@ -64,6 +64,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformFunction(propertyAccessor, data)
}
open fun transformDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
return transformPropertyAccessor(defaultPropertyAccessor, data)
}
open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
return transformDeclaration(errorDeclaration, data)
}
@@ -500,6 +504,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclarationWithBody(declarationWithBody, data)
}
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): CompositeTransformResult<FirElement> {
return transformDefaultPropertyAccessor(defaultPropertyAccessor, data)
}
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirElement> {
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
}
@@ -64,6 +64,10 @@ abstract class FirVisitor<out R, in D> {
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)
}
@@ -64,6 +64,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
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<Unit, Nothing?>() {
visitDeclarationWithBody(declarationWithBody)
}
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: Nothing?) {
visitDefaultPropertyAccessor(defaultPropertyAccessor)
}
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) {
visitDelegatedConstructorCall(delegatedConstructorCall)
}