Raw FIR: support a bunch of new elements + some fixes

Support: calls, constructor calls, annotation calls, arguments
Support: enums, primary constructors, const modifier
Support: inner modifier, qualified types
Add: some base transformed types
Fix: acceptChildren etc.
Progress: #KT-24013
This commit is contained in:
Simon Ogorodnik
2018-03-20 01:14:31 +03:00
committed by Mikhail Glukhikh
parent 2ddf52123a
commit 3e06f426d0
84 changed files with 914 additions and 176 deletions
@@ -16,11 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBody
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotationCallImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirBlockBodyImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionBodyImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
import org.jetbrains.kotlin.fir.types.FirUserType
import org.jetbrains.kotlin.fir.expressions.impl.*
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.impl.*
@@ -70,14 +66,17 @@ class RawFirBuilder(val session: FirSession) {
this.accept(this@Visitor, Unit) as R
private fun KtTypeReference?.toFirOrImplicitType(): FirType =
convertSafe<FirUserType>() ?: FirImplicitTypeImpl(session, this)
convertSafe() ?: FirImplicitTypeImpl(session, this)
private fun KtTypeReference?.toFirOrErrorType(): FirType =
convertSafe<FirUserType>() ?: FirErrorTypeImpl(session, this, false)
convertSafe() ?: FirErrorTypeImpl(session, this, false, if (this == null) "Incomplete code" else "Conversion failed")
private fun KtExpression?.toFirBody(): FirBody? =
convertSafe<FirExpression>()?.let { it as? FirBody ?: FirExpressionBodyImpl(session, it) }
private fun KtExpression?.toFirExpression(): FirExpression =
convertSafe() ?: FirErrorExpressionImpl(session, this)
private fun KtPropertyAccessor?.toFirPropertyAccessor(
property: KtProperty,
propertyType: FirType,
@@ -143,6 +142,59 @@ class RawFirBuilder(val session: FirSession) {
}
}
private fun KtCallElement.extractArgumentsTo(container: FirAbstractCall) {
for (argument in this.valueArguments) {
container.arguments += argument.getArgumentExpression().toFirExpression()
}
}
private fun KtClassOrObject.extractSuperTypeListEntriesTo(container: FirClassImpl) {
var superTypeCallEntry: KtSuperTypeCallEntry? = null
for (superTypeListEntry in superTypeListEntries) {
when (superTypeListEntry) {
is KtSuperTypeEntry -> {
container.superTypes += superTypeListEntry.typeReference.toFirOrErrorType()
}
is KtSuperTypeCallEntry -> {
container.superTypes += superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
superTypeCallEntry = superTypeListEntry
}
is KtDelegatedSuperTypeEntry -> {
val type = superTypeListEntry.typeReference.toFirOrErrorType()
container.superTypes += FirDelegatedTypeImpl(
type,
superTypeListEntry.delegateExpression.convertSafe()
)
}
}
}
val firPrimaryConstructor = primaryConstructor?.toFirConstructor(superTypeCallEntry) ?: return
container.declarations += firPrimaryConstructor
}
private fun KtPrimaryConstructor.toFirConstructor(superTypeCallEntry: KtSuperTypeCallEntry?): FirConstructor {
val constructorCallee = superTypeCallEntry?.calleeExpression
val firDelegatedCall = constructorCallee?.let {
FirDelegatedConstructorCallImpl(
session,
constructorCallee,
FirErrorTypeImpl(session, constructorCallee, false, "Not implemented yet"),
isThis = false
).apply {
superTypeCallEntry.extractArgumentsTo(this)
}
}
val firConstructor = FirPrimaryConstructorImpl(
session,
this,
visibility,
firDelegatedCall
)
extractAnnotationsTo(firConstructor)
extractValueParametersTo(firConstructor)
return firConstructor
}
override fun visitKtFile(file: KtFile, data: Unit): FirElement {
val firFile = FirFileImpl(session, file, file.name, file.packageFqName)
for (annotationEntry in file.annotationEntries) {
@@ -163,6 +215,20 @@ class RawFirBuilder(val session: FirSession) {
return firFile
}
override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement {
val firEnumEntry = FirEnumEntryImpl(
session,
enumEntry,
enumEntry.nameAsSafeName
)
enumEntry.extractAnnotationsTo(firEnumEntry)
enumEntry.extractSuperTypeListEntriesTo(firEnumEntry)
for (declaration in enumEntry.declarations) {
firEnumEntry.declarations += declaration.convert<FirDeclaration>()
}
return firEnumEntry
}
override fun visitClassOrObject(classOrObject: KtClassOrObject, data: Unit): FirElement {
val classKind = when (classOrObject) {
is KtObjectDeclaration -> ClassKind.OBJECT
@@ -181,29 +247,13 @@ class RawFirBuilder(val session: FirSession) {
classOrObject.visibility,
classOrObject.modality,
classKind,
isInner = classOrObject.hasModifier(KtTokens.INNER_KEYWORD),
isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true,
isData = (classOrObject as? KtClass)?.isData() == true
)
classOrObject.extractAnnotationsTo(firClass)
classOrObject.extractTypeParametersTo(firClass)
for (superTypeListEntry in classOrObject.superTypeListEntries) {
when (superTypeListEntry) {
is KtSuperTypeEntry -> {
firClass.superTypes += superTypeListEntry.typeReference.toFirOrErrorType()
}
is KtSuperTypeCallEntry -> {
firClass.superTypes += superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
// TODO: primary constructor!
}
is KtDelegatedSuperTypeEntry -> {
val type = superTypeListEntry.typeReference.toFirOrErrorType()
firClass.superTypes += FirDelegatedTypeImpl(
type,
superTypeListEntry.delegateExpression.convertSafe()
)
}
}
}
classOrObject.extractSuperTypeListEntriesTo(firClass)
for (declaration in classOrObject.declarations) {
firClass.declarations += declaration.convert<FirDeclaration>()
}
@@ -223,6 +273,11 @@ class RawFirBuilder(val session: FirSession) {
}
override fun visitNamedFunction(function: KtNamedFunction, data: Unit): FirElement {
if (function.name == null) {
// TODO: return anonymous function here
// TODO: what if name is not null but we're in expression position?
return FirExpressionStub(session, function)
}
val firFunction = FirMemberFunctionImpl(
session,
function,
@@ -246,15 +301,27 @@ class RawFirBuilder(val session: FirSession) {
}
override fun visitSecondaryConstructor(constructor: KtSecondaryConstructor, data: Unit): FirElement {
val firConstructor = FirSecondaryConstructorImpl(
val firConstructor = FirConstructorImpl(
session,
constructor,
constructor.visibility,
constructor.getDelegationCall().convert(),
constructor.bodyExpression.toFirBody()
)
constructor.extractAnnotationsTo(firConstructor)
constructor.extractValueParametersTo(firConstructor)
return super.visitSecondaryConstructor(constructor, data)
return firConstructor
}
override fun visitConstructorDelegationCall(call: KtConstructorDelegationCall, data: Unit): FirElement {
val firConstructorCall = FirDelegatedConstructorCallImpl(
session,
call,
FirErrorTypeImpl(session, call, false, "Not implemented yet"),
call.isCallToThis || call.isImplicit
)
call.extractArgumentsTo(firConstructorCall)
return firConstructorCall
}
override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: Unit): FirElement {
@@ -274,6 +341,7 @@ class RawFirBuilder(val session: FirSession) {
property.visibility,
property.modality,
property.hasModifier(KtTokens.OVERRIDE_KEYWORD),
property.hasModifier(KtTokens.CONST_KEYWORD),
property.receiverTypeReference.convertSafe(),
propertyType,
property.isVar,
@@ -298,18 +366,25 @@ class RawFirBuilder(val session: FirSession) {
val firType = when (unwrappedElement) {
is KtDynamicType -> FirDynamicTypeImpl(session, typeReference, isNullable)
is KtUserType -> {
val referenceExpression = unwrappedElement.referenceExpression
var referenceExpression = unwrappedElement.referenceExpression
if (referenceExpression != null) {
val userType = FirUserTypeImpl(
session, typeReference, isNullable,
referenceExpression.getReferencedNameAsName()
session, typeReference, isNullable
)
for (typeArgument in unwrappedElement.typeArguments) {
userType.arguments += typeArgument.convert<FirTypeProjection>()
}
var qualifier: KtUserType? = unwrappedElement
do {
val firQualifier = FirQualifierPartImpl(referenceExpression!!.getReferencedNameAsName())
for (typeArgument in qualifier!!.typeArguments) {
firQualifier.typeArguments += typeArgument.convert<FirTypeProjection>()
}
userType.qualifier.add(0, firQualifier)
qualifier = qualifier.qualifier
referenceExpression = qualifier?.referenceExpression
} while (referenceExpression != null)
userType
} else {
FirErrorTypeImpl(session, typeReference, isNullable)
FirErrorTypeImpl(session, typeReference, isNullable, "Incomplete user type")
}
}
is KtFunctionType -> {
@@ -325,7 +400,7 @@ class RawFirBuilder(val session: FirSession) {
}
functionType
}
null -> FirErrorTypeImpl(session, typeReference, isNullable)
null -> FirErrorTypeImpl(session, typeReference, isNullable, "Unwrapped type is null")
else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}")
}
@@ -336,12 +411,14 @@ class RawFirBuilder(val session: FirSession) {
}
override fun visitAnnotationEntry(annotationEntry: KtAnnotationEntry, data: Unit): FirElement {
return FirAnnotationCallImpl(
val firAnnotationCall = FirAnnotationCallImpl(
session,
annotationEntry,
annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget(),
annotationEntry.typeReference.toFirOrErrorType()
)
annotationEntry.extractArgumentsTo(firAnnotationCall)
return firAnnotationCall
}
override fun visitTypeParameter(parameter: KtTypeParameter, data: Unit): FirElement {
@@ -22,11 +22,13 @@ interface FirElement {
fun accept(visitor: FirVisitorVoid) =
accept(visitor, null)
fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {}
fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
fun acceptChildren(visitor: FirVisitorVoid) =
acceptChildren(visitor, null)
fun <E : FirElement, D> transform(visitor: FirTransformer<D>, data: D): CompositeTransformResult<E> =
accept(visitor, data) as CompositeTransformResult<E>
CompositeTransformResult(accept(visitor, data))
fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement = this
}
@@ -118,7 +118,12 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
if (memberDeclaration.isInline) {
print("inline ")
}
} else if (memberDeclaration is FirProperty) {
if (memberDeclaration.isConst) {
print("const ")
}
}
visitNamedDeclaration(memberDeclaration)
}
@@ -130,7 +135,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitDeclaration(declaration: FirDeclaration) {
print(
when (declaration) {
is FirClass -> "class"
is FirClass -> declaration.classKind.name.toLowerCase().replace("_", " ")
is FirTypeAlias -> "typealias"
is FirNamedFunction -> "function"
is FirProperty -> "property"
@@ -146,6 +151,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitClass(klass: FirClass) {
visitMemberDeclaration(klass)
val attributes = listOfNotNull(
"inner".takeIf { klass.isInner },
"companion".takeIf { klass.isCompanion },
"data".takeIf { klass.isData }
)
@@ -203,6 +209,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
constructor.valueParameters.renderParameters()
constructor.delegatedConstructor?.accept(this)
constructor.body?.accept(this)
if (constructor.body == null) {
println()
}
}
override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
@@ -306,8 +315,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
visitCall(annotationCall)
}
override fun visitConstructorCall(constructorCall: FirConstructorCall) {
visitCall(constructorCall)
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
visitCall(delegatedConstructorCall)
}
override fun visitType(type: FirType) {
@@ -365,11 +374,16 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitUserType(userType: FirUserType) {
userType.annotations.renderAnnotations()
print(userType.name)
if (userType.arguments.isNotEmpty()) {
print("<")
userType.arguments.renderSeparated()
print(">")
for ((index, qualifier) in userType.qualifier.withIndex()) {
if (index != 0) {
print(".")
}
print(qualifier.name)
if (qualifier.typeArguments.isNotEmpty()) {
print("<")
qualifier.typeArguments.renderSeparated()
print(">")
}
}
visitTypeWithNullability(userType)
}
@@ -0,0 +1,30 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.fir.visitors.FirTransformer
fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirTransformer<D>, data: D) {
val iterator = this.listIterator()
while (iterator.hasNext()) {
val next = iterator.next()
val result = next.transform<T, D>(transformer, data)
if (result.isSingle) {
iterator.set(result.single)
} else {
val resultIterator = result.list.listIterator()
if (!resultIterator.hasNext()) {
iterator.remove()
} else {
iterator.set(resultIterator.next())
}
while (resultIterator.hasNext()) {
iterator.add(resultIterator.next())
}
}
}
}
@@ -18,7 +18,7 @@ interface FirCallableMember : @VisitedSupertype FirDeclaration, FirMemberDeclara
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitCallableMember(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
receiverType?.accept(visitor, data)
super<FirMemberDeclaration>.acceptChildren(visitor, data)
returnType.accept(visitor, data)
@@ -6,17 +6,21 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.visitors.FirVisitor
// May be all containers should be properties and not base classes
// About descriptors: introduce something like FirDescriptor which is FirUnresolved at the beginning and FirSymbol(descriptor) at the end
@BaseTransformedType
interface FirClass : FirDeclarationContainer, FirMemberDeclaration {
// including delegated types
val superTypes: List<FirType>
val classKind: ClassKind
val isInner: Boolean
val isCompanion: Boolean
val isData: Boolean
@@ -24,7 +28,7 @@ interface FirClass : FirDeclarationContainer, FirMemberDeclaration {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitClass(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data)
for (superType in superTypes) {
superType.accept(visitor, data)
@@ -6,21 +6,26 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.expressions.FirConstructorCall
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirConstructor : FirFunction, FirAnnotationContainer {
val delegatedConstructor: FirConstructorCall?
val delegatedConstructor: FirDelegatedConstructorCall?
val visibility: Visibility
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitConstructor(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
delegatedConstructor?.accept(visitor, data)
super.acceptChildren(visitor, data)
for (parameter in valueParameters) {
parameter.accept(visitor, data)
}
body?.accept(visitor, data)
}
}
@@ -14,7 +14,7 @@ interface FirDeclarationWithBody : FirDeclaration {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitDeclarationWithBody(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
body?.accept(visitor, data)
super.acceptChildren(visitor, data)
}
@@ -5,19 +5,20 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.expressions.FirCall
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirEnumEntry : FirClass {
val arguments: List<FirExpression>
@BaseTransformedType
interface FirEnumEntry : @VisitedSupertype FirClass, FirCall {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitEnumEntry(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
for (argument in arguments) {
argument.accept(visitor, data)
}
super.acceptChildren(visitor, data)
super<FirClass>.acceptChildren(visitor, data)
}
}
@@ -5,11 +5,13 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.FqName
@BaseTransformedType
interface FirFile : @VisitedSupertype FirPackageFragment, FirDeclaration, FirAnnotationContainer {
val name: String
@@ -20,7 +22,7 @@ interface FirFile : @VisitedSupertype FirPackageFragment, FirDeclaration, FirAnn
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitFile(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
for (import in imports) {
import.accept(visitor, data)
@@ -15,7 +15,7 @@ interface FirFunction : FirDeclarationWithBody, FirAnnotationContainer {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitFunction(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
for (parameter in valueParameters) {
parameter.accept(visitor, data)
@@ -18,7 +18,7 @@ interface FirMemberDeclaration : FirTypeParameterContainer, FirNamedDeclaration,
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitMemberDeclaration(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
for (typeParameter in typeParameters) {
typeParameter.accept(visitor, data)
@@ -5,9 +5,11 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
val isOperator: Boolean
@@ -18,8 +20,11 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitNamedFunction(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super<FirCallableMember>.acceptChildren(visitor, data)
super<FirFunction>.acceptChildren(visitor, data)
for (parameter in valueParameters) {
parameter.accept(visitor, data)
}
body?.accept(visitor, data)
}
}
@@ -12,7 +12,7 @@ interface FirPackageFragment : FirElement, FirDeclarationContainer {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitPackageFragment(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
for (declaration in declarations) {
declaration.accept(visitor, data)
}
@@ -5,13 +5,17 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirVariable
import org.jetbrains.kotlin.fir.visitors.FirVisitor
// May be should not inherit FirVariable
@BaseTransformedType
interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMember, FirVariable {
val isConst: Boolean
// Should it be nullable or have some default?
val getter: FirPropertyAccessor
@@ -22,7 +26,7 @@ interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMember, Fir
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitProperty(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super<FirCallableMember>.acceptChildren(visitor, data)
initializer?.accept(visitor, data)
delegate?.accept(visitor, data)
@@ -19,8 +19,11 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitPropertyAccessor(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super<FirTypedDeclaration>.acceptChildren(visitor, data)
super<FirFunction>.acceptChildren(visitor, data)
for (parameter in valueParameters) {
parameter.accept(visitor, data)
}
body?.accept(visitor, data)
}
}
@@ -5,18 +5,16 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirTypeAlias : FirMemberDeclaration, FirAnnotationContainer {
interface FirTypeAlias : FirMemberDeclaration {
val abbreviatedType: FirType
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeAlias(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
acceptAnnotations(visitor, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data)
abbreviatedType.accept(visitor, data)
}
@@ -5,11 +5,13 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.types.Variance
@BaseTransformedType
interface FirTypeParameter : FirNamedDeclaration, FirAnnotationContainer {
val variance: Variance
@@ -18,7 +20,7 @@ interface FirTypeParameter : FirNamedDeclaration, FirAnnotationContainer {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeParameter(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
super.acceptChildren(visitor, data)
for (bound in bounds) {
@@ -15,7 +15,7 @@ interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypedDeclaration(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
super.acceptChildren(visitor, data)
returnType.accept(visitor, data)
@@ -5,10 +5,12 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration {
val isCrossinline: Boolean
@@ -21,7 +23,7 @@ interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclarat
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitValueParameter(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super<FirTypedDeclaration>.acceptChildren(visitor, data)
defaultValue?.accept(visitor, data)
}
@@ -12,20 +12,32 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirClassImpl(
open class FirClassImpl(
session: FirSession,
psi: PsiElement?,
name: Name,
visibility: Visibility,
modality: Modality,
override val classKind: ClassKind,
override val isCompanion: Boolean,
override val isData: Boolean
final override val classKind: ClassKind,
final override val isInner: Boolean,
final override val isCompanion: Boolean,
final override val isData: Boolean
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality), FirClass {
override val superTypes = mutableListOf<FirType>()
override val declarations = mutableListOf<FirDeclaration>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirClass {
typeParameters.transformInplace(transformer, data)
superTypes.transformInplace(transformer, data)
declarations.transformInplace(transformer, data)
return this
}
}
@@ -10,12 +10,12 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.expressions.FirBody
import org.jetbrains.kotlin.fir.expressions.FirConstructorCall
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
class FirSecondaryConstructorImpl(
open class FirConstructorImpl(
session: FirSession,
psi: PsiElement?,
override val visibility: Visibility,
override val delegatedConstructor: FirConstructorCall?,
final override val visibility: Visibility,
final override val delegatedConstructor: FirDelegatedConstructorCall?,
body: FirBody?
) : FirAbstractFunction(session, psi, body), FirConstructor
@@ -0,0 +1,33 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.name.Name
class FirEnumEntryImpl(
session: FirSession,
psi: PsiElement?,
name: Name
) : FirClassImpl(
session,
psi,
name,
visibility = Visibilities.UNKNOWN,
modality = Modality.FINAL,
classKind = ClassKind.ENUM_ENTRY,
isInner = false,
isCompanion = false,
isData = false
), FirEnumEntry {
override val arguments = mutableListOf<FirExpression>()
}
@@ -6,11 +6,14 @@
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirFileImpl(
session: FirSession,
@@ -21,4 +24,10 @@ class FirFileImpl(
override val imports = mutableListOf<FirImport>()
override val declarations = mutableListOf<FirDeclaration>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
imports.transformInplace(transformer, data)
declarations.transformInplace(transformer, data)
return this
}
}
@@ -22,6 +22,7 @@ class FirMemberPropertyImpl(
visibility: Visibility,
modality: Modality,
isOverride: Boolean,
override val isConst: Boolean,
receiverType: FirType?,
returnType: FirType,
override val isVar: Boolean,
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
class FirPrimaryConstructorImpl(
session: FirSession,
psi: PsiElement?,
visibility: Visibility,
delegatedConstructor: FirDelegatedConstructorCall?
) : FirConstructorImpl(session, psi, visibility, delegatedConstructor, body = null)
@@ -6,9 +6,11 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirAnnotationCall : FirCall {
val annotationType: FirType
@@ -18,7 +20,7 @@ interface FirAnnotationCall : FirCall {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitAnnotationCall(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotationType.accept(visitor, data)
super.acceptChildren(visitor, data)
}
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirAnnotationContainer {
val annotations: List<FirAnnotationCall>
fun <D> acceptAnnotations(visitor: FirVisitor<Unit, D>, data: D) {
fun <R, D> acceptAnnotations(visitor: FirVisitor<R, D>, data: D) {
for (annotation in annotations) {
annotation.accept(visitor, data)
}
@@ -15,7 +15,7 @@ interface FirBody : FirExpression {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitBody(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
for (statement in statements) {
statement.accept(visitor, data)
}
@@ -5,15 +5,17 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirCall : FirExpression {
val arguments: List<FirExpression>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitCall(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
for (argument in arguments) {
argument.accept(visitor, data)
}
@@ -6,15 +6,22 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirConstructorCall : FirCall {
interface FirDelegatedConstructorCall : FirCall, FirTypeProjectionContainer {
// Do we need 'constructedType: FirType' here?
val constructedType: FirType
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitConstructorCall(this, data)
val isThis: Boolean
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
val isSuper: Boolean
get() = !isThis
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitDelegatedConstructorCall(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
constructedType.accept(visitor, data)
super.acceptChildren(visitor, data)
}
@@ -0,0 +1,8 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions
interface FirErrorExpression : FirExpression
@@ -5,9 +5,11 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirStatement : FirElement {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitStatement(this, data)
@@ -22,7 +22,7 @@ interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, F
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitVariable(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
initializer?.accept(visitor, data)
super<FirTypedDeclaration>.acceptChildren(visitor, data)
}
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
abstract class FirAbstractCall(
final override val session: FirSession,
final override val psi: PsiElement?
) : FirCall {
final override val arguments = mutableListOf<FirExpression>()
}
@@ -13,10 +13,8 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.types.FirType
class FirAnnotationCallImpl(
override val session: FirSession,
override val psi: PsiElement?,
session: FirSession,
psi: PsiElement?,
override val useSiteTarget: AnnotationUseSiteTarget?,
override val annotationType: FirType
) : FirAnnotationCall {
override val arguments = mutableListOf<FirExpression>()
}
) : FirAbstractCall(session, psi), FirAnnotationCall
@@ -0,0 +1,21 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.types.FirTypeProjection
class FirDelegatedConstructorCallImpl(
session: FirSession,
psi: PsiElement?,
override val constructedType: FirType,
override val isThis: Boolean
) : FirAbstractCall(session, psi), FirDelegatedConstructorCall {
override val typeArguments = mutableListOf<FirTypeProjection>()
}
@@ -0,0 +1,15 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
class FirErrorExpressionImpl(
override val session: FirSession,
override val psi: PsiElement?
) : FirErrorExpression
@@ -16,7 +16,7 @@ interface FirDelegatedType : FirType {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitDelegatedType(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data)
delegate?.accept(visitor, data)
}
@@ -8,6 +8,8 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirErrorType : FirType {
val reason: String
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitErrorType(this, data)
}
@@ -19,7 +19,7 @@ interface FirFunctionType : FirTypeWithNullability {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitFunctionType(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
receiverType?.accept(visitor, data)
super.acceptChildren(visitor, data)
for (parameter in valueParameters) {
@@ -5,15 +5,17 @@
package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirType : FirElement, FirAnnotationContainer {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitType(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data)
super.acceptChildren(visitor, data)
}
@@ -5,9 +5,11 @@
package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirTypeProjection : FirElement {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeProjection(this, data)
@@ -6,5 +6,5 @@
package org.jetbrains.kotlin.fir.types
interface FirTypeProjectionContainer {
val arguments: List<FirTypeProjection>
val typeArguments: List<FirTypeProjection>
}
@@ -16,7 +16,7 @@ interface FirTypeProjectionWithVariance : FirTypeProjection {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeProjectionWithVariance(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
type.accept(visitor, data)
super.acceptChildren(visitor, data)
}
@@ -8,16 +8,22 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
interface FirUserType : FirTypeWithNullability, FirTypeProjectionContainer {
interface FirQualifierPart : FirTypeProjectionContainer {
val name: Name
}
interface FirUserType : FirTypeWithNullability {
val qualifier: List<FirQualifierPart>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitUserType(this, data)
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data)
for (argument in arguments) {
argument.accept(visitor, data)
for (qualifier in qualifier.reversed()) {
for (argument in qualifier.typeArguments) {
argument.accept(visitor, data)
}
}
}
}
@@ -18,7 +18,7 @@ class FirDelegatedTypeImpl(
return super<FirDelegatedType>.accept(visitor, data)
}
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
type.acceptChildren(visitor, data)
delegate?.accept(visitor, data)
}
@@ -13,7 +13,8 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
class FirErrorTypeImpl(
session: FirSession,
psi: PsiElement?,
isNullable: Boolean
isNullable: Boolean,
override val reason: String
) : FirAbstractAnnotatedType(session, psi, isNullable), FirErrorType {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
return super<FirErrorType>.accept(visitor, data)
@@ -0,0 +1,14 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.fir.types.FirQualifierPart
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.name.Name
class FirQualifierPartImpl(override val name: Name) : FirQualifierPart {
override val typeArguments = mutableListOf<FirTypeProjection>()
}
@@ -7,15 +7,14 @@ package org.jetbrains.kotlin.fir.types.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.types.FirQualifierPart
import org.jetbrains.kotlin.fir.types.FirUserType
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.name.Name
import java.util.*
class FirUserTypeImpl(
session: FirSession,
psi: PsiElement?,
isNullable: Boolean,
override val name: Name
isNullable: Boolean
) : FirAbstractAnnotatedType(session, psi, isNullable), FirUserType {
override val arguments = mutableListOf<FirTypeProjection>()
override val qualifier = LinkedList<FirQualifierPart>()
}
@@ -32,4 +32,5 @@ inline class CompositeTransformResult<out T : Any>(val a: Any) {
}
}
inline fun <reified T : FirElement> T.compose() = CompositeTransformResult.single(this)
@Suppress("NOTHING_TO_INLINE")
inline fun <T : FirElement> T.compose() = CompositeTransformResult.single(this)
@@ -1,10 +1,10 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.visitors
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.types.*
@@ -26,10 +26,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclaration(declarationWithBody, data)
}
open fun transformAnonymousInitializer(
anonymousInitializer: FirAnonymousInitializer,
data: D
): CompositeTransformResult<FirDeclaration> {
open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirDeclaration> {
return transformDeclarationWithBody(anonymousInitializer, data)
}
@@ -101,82 +98,83 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformElement(packageFragment, data)
}
open fun <E : FirPackageFragment> transformFile(file: E, data: D): CompositeTransformResult<E> {
open fun transformFile(file: FirFile, data: D): CompositeTransformResult<FirFile> {
return transformPackageFragment(file, data)
}
open fun <E : FirElement> transformStatement(statement: E, data: D): CompositeTransformResult<E> {
open fun transformStatement(statement: FirStatement, data: D): CompositeTransformResult<FirStatement> {
return transformElement(statement, data)
}
open fun <E : FirStatement> transformExpression(expression: E, data: D): CompositeTransformResult<E> {
open fun transformExpression(expression: FirExpression, data: D): CompositeTransformResult<FirStatement> {
return transformStatement(expression, data)
}
open fun <E : FirExpression> transformBody(body: E, data: D): CompositeTransformResult<E> {
open fun transformBody(body: FirBody, data: D): CompositeTransformResult<FirStatement> {
return transformExpression(body, data)
}
open fun <E : FirExpression> transformCall(call: E, data: D): CompositeTransformResult<E> {
open fun transformCall(call: FirCall, data: D): CompositeTransformResult<FirStatement> {
return transformExpression(call, data)
}
open fun <E : FirCall> transformAnnotationCall(annotationCall: E, data: D): CompositeTransformResult<E> {
open fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult<FirStatement> {
return transformCall(annotationCall, data)
}
open fun <E : FirCall> transformConstructorCall(constructorCall: E, data: D): CompositeTransformResult<E> {
return transformCall(constructorCall, data)
open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
return transformCall(delegatedConstructorCall, data)
}
open fun <E : FirElement> transformType(type: E, data: D): CompositeTransformResult<E> {
open fun transformErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult<FirStatement> {
return transformExpression(errorExpression, data)
}
open fun transformType(type: FirType, data: D): CompositeTransformResult<FirType> {
return transformElement(type, data)
}
open fun <E : FirType> transformDelegatedType(delegatedType: E, data: D): CompositeTransformResult<E> {
open fun transformDelegatedType(delegatedType: FirDelegatedType, data: D): CompositeTransformResult<FirType> {
return transformType(delegatedType, data)
}
open fun <E : FirType> transformErrorType(errorType: E, data: D): CompositeTransformResult<E> {
open fun transformErrorType(errorType: FirErrorType, data: D): CompositeTransformResult<FirType> {
return transformType(errorType, data)
}
open fun <E : FirType> transformImplicitType(implicitType: E, data: D): CompositeTransformResult<E> {
open fun transformImplicitType(implicitType: FirImplicitType, data: D): CompositeTransformResult<FirType> {
return transformType(implicitType, data)
}
open fun <E : FirType> transformTypeWithNullability(typeWithNullability: E, data: D): CompositeTransformResult<E> {
open fun transformTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): CompositeTransformResult<FirType> {
return transformType(typeWithNullability, data)
}
open fun <E : FirTypeWithNullability> transformDynamicType(dynamicType: E, data: D): CompositeTransformResult<E> {
open fun transformDynamicType(dynamicType: FirDynamicType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(dynamicType, data)
}
open fun <E : FirTypeWithNullability> transformFunctionType(functionType: E, data: D): CompositeTransformResult<E> {
open fun transformFunctionType(functionType: FirFunctionType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(functionType, data)
}
open fun <E : FirTypeWithNullability> transformResolvedType(resolvedType: E, data: D): CompositeTransformResult<E> {
open fun transformResolvedType(resolvedType: FirResolvedType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(resolvedType, data)
}
open fun <E : FirTypeWithNullability> transformUserType(userType: E, data: D): CompositeTransformResult<E> {
open fun transformUserType(userType: FirUserType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(userType, data)
}
open fun <E : FirElement> transformTypeProjection(typeProjection: E, data: D): CompositeTransformResult<E> {
open fun transformTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult<FirTypeProjection> {
return transformElement(typeProjection, data)
}
open fun <E : FirTypeProjection> transformStarProjection(starProjection: E, data: D): CompositeTransformResult<E> {
open fun transformStarProjection(starProjection: FirStarProjection, data: D): CompositeTransformResult<FirTypeProjection> {
return transformTypeProjection(starProjection, data)
}
open fun <E : FirTypeProjection> transformTypeProjectionWithVariance(
typeProjectionWithVariance: E,
data: D
): CompositeTransformResult<E> {
open fun transformTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): CompositeTransformResult<FirTypeProjection> {
return transformTypeProjection(typeProjectionWithVariance, data)
}
@@ -192,10 +190,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclaration(declaration, data)
}
final override fun visitDeclarationWithBody(
declarationWithBody: FirDeclarationWithBody,
data: D
): CompositeTransformResult<FirElement> {
final override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult<FirElement> {
return transformDeclarationWithBody(declarationWithBody, data)
}
@@ -235,10 +230,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTypeProjection(typeProjection, data)
}
final override fun visitTypeWithNullability(
typeWithNullability: FirTypeWithNullability,
data: D
): CompositeTransformResult<FirElement> {
final override fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): CompositeTransformResult<FirElement> {
return transformTypeWithNullability(typeWithNullability, data)
}
@@ -246,8 +238,8 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformAnnotationCall(annotationCall, data)
}
final override fun visitConstructorCall(constructorCall: FirConstructorCall, data: D): CompositeTransformResult<FirElement> {
return transformConstructorCall(constructorCall, data)
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirElement> {
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
}
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult<FirElement> {
@@ -278,10 +270,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformVariable(variable, data)
}
final override fun visitAnonymousInitializer(
anonymousInitializer: FirAnonymousInitializer,
data: D
): CompositeTransformResult<FirElement> {
final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirElement> {
return transformAnonymousInitializer(anonymousInitializer, data)
}
@@ -293,6 +282,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformBody(body, data)
}
final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult<FirElement> {
return transformErrorExpression(errorExpression, data)
}
final override fun visitConstructor(constructor: FirConstructor, data: D): CompositeTransformResult<FirElement> {
return transformConstructor(constructor, data)
}
@@ -333,10 +326,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformStarProjection(starProjection, data)
}
final override fun visitTypeProjectionWithVariance(
typeProjectionWithVariance: FirTypeProjectionWithVariance,
data: D
): CompositeTransformResult<FirElement> {
final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): CompositeTransformResult<FirElement> {
return transformTypeProjectionWithVariance(typeProjectionWithVariance, data)
}
@@ -122,8 +122,12 @@ abstract class FirVisitor<out R, in D> {
return visitCall(annotationCall, data)
}
open fun visitConstructorCall(constructorCall: FirConstructorCall, data: D): R {
return visitCall(constructorCall, data)
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R {
return visitCall(delegatedConstructorCall, data)
}
open fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): R {
return visitExpression(errorExpression, data)
}
open fun visitType(type: FirType, data: D): R {
@@ -122,8 +122,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitCall(annotationCall, null)
}
open fun visitConstructorCall(constructorCall: FirConstructorCall) {
visitCall(constructorCall, null)
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
visitCall(delegatedConstructorCall, null)
}
open fun visitErrorExpression(errorExpression: FirErrorExpression) {
visitExpression(errorExpression, null)
}
open fun visitType(type: FirType) {
@@ -234,8 +238,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitAnnotationCall(annotationCall)
}
final override fun visitConstructorCall(constructorCall: FirConstructorCall, data: Nothing?) {
visitConstructorCall(constructorCall)
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) {
visitDelegatedConstructorCall(delegatedConstructorCall)
}
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) {
@@ -278,6 +282,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitBody(body)
}
final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: Nothing?) {
visitErrorExpression(errorExpression)
}
final override fun visitConstructor(constructor: FirConstructor, data: Nothing?) {
visitConstructor(constructor)
}