FIR: split transformer into three (imports / types / descriptors)

This commit is contained in:
Mikhail Glukhikh
2018-03-20 15:25:16 +03:00
parent 8933c9035b
commit 6c8a326e15
22 changed files with 243 additions and 81 deletions
@@ -6,8 +6,10 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.FqName
@@ -5,16 +5,19 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@BaseTransformedType
interface FirImport : FirElement {
val importedFqName: FqName?
val isAllUnder: Boolean
val aliasName: String?
val aliasName: Name?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitImport(this, data)
@@ -6,5 +6,9 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirDescriptorOwner
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirResolvedClass : FirClass, FirDescriptorOwner<FirResolvedClass>
interface FirResolvedClass : FirClass, FirDescriptorOwner<FirResolvedClass> {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedClass(this, data)
}
@@ -0,0 +1,16 @@
/*
* 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
import org.jetbrains.kotlin.fir.UnambiguousFqName
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirResolvedImport : FirImport {
val resolvedFqName: UnambiguousFqName
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedImport(this, data)
}
@@ -9,11 +9,12 @@ import com.intellij.psi.PsiElement
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?,
override val importedFqName: FqName?,
override val isAllUnder: Boolean,
override val aliasName: String?
override val aliasName: Name?
) : FirImport
@@ -0,0 +1,19 @@
/*
* 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 org.jetbrains.kotlin.fir.UnambiguousFqName
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.visitors.FirVisitor
class FirResolvedImportImpl(
val delegate: FirImport,
override val resolvedFqName: UnambiguousFqName
) : FirResolvedImport, FirImport by delegate {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedImport(this, data)
}
@@ -94,10 +94,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclaration(variable, data)
}
open fun <E : FirElement> transformImport(import: E, data: D): CompositeTransformResult<E> {
open fun transformImport(import: FirImport, data: D): CompositeTransformResult<FirImport> {
return transformElement(import, data)
}
open fun transformResolvedImport(resolvedImport: FirResolvedImport, data: D): CompositeTransformResult<FirImport> {
return transformImport(resolvedImport, data)
}
open fun <E : FirElement> transformPackageFragment(packageFragment: E, data: D): CompositeTransformResult<E> {
return transformElement(packageFragment, data)
}
@@ -210,6 +214,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformFunction(function, data)
}
final override fun visitImport(import: FirImport, data: D): CompositeTransformResult<FirElement> {
return transformImport(import, data)
}
final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): CompositeTransformResult<FirElement> {
return transformMemberDeclaration(memberDeclaration, data)
}
@@ -282,10 +290,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformAnonymousInitializer(anonymousInitializer, data)
}
final override fun visitImport(import: FirImport, data: D): CompositeTransformResult<FirElement> {
return transformImport(import, data)
}
final override fun visitBody(body: FirBody, data: D): CompositeTransformResult<FirElement> {
return transformBody(body, data)
}
@@ -306,6 +310,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformPropertyAccessor(propertyAccessor, data)
}
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): CompositeTransformResult<FirElement> {
return transformResolvedImport(resolvedImport, data)
}
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirElement> {
return transformTypeAlias(typeAlias, data)
}
@@ -98,6 +98,10 @@ abstract class FirVisitor<out R, in D> {
return visitElement(import, data)
}
open fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): R {
return visitImport(resolvedImport, data)
}
open fun visitPackageFragment(packageFragment: FirPackageFragment, data: D): R {
return visitElement(packageFragment, data)
}
@@ -98,6 +98,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(import, null)
}
open fun visitResolvedImport(resolvedImport: FirResolvedImport) {
visitImport(resolvedImport, null)
}
open fun visitPackageFragment(packageFragment: FirPackageFragment) {
visitElement(packageFragment, null)
}
@@ -210,6 +214,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitFunction(function)
}
final override fun visitImport(import: FirImport, data: Nothing?) {
visitImport(import)
}
final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) {
visitMemberDeclaration(memberDeclaration)
}
@@ -282,10 +290,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitAnonymousInitializer(anonymousInitializer)
}
final override fun visitImport(import: FirImport, data: Nothing?) {
visitImport(import)
}
final override fun visitBody(body: FirBody, data: Nothing?) {
visitBody(body)
}
@@ -306,6 +310,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitPropertyAccessor(propertyAccessor)
}
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) {
visitResolvedImport(resolvedImport)
}
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Nothing?) {
visitTypeAlias(typeAlias)
}