IR: IrSymbolVisitor
This commit is contained in:
@@ -19,11 +19,14 @@ package org.jetbrains.kotlin.ir.symbols
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
|
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
|
||||||
|
import org.jetbrains.kotlin.ir.util.IrSymbolVisitor
|
||||||
|
|
||||||
interface IrSymbol {
|
interface IrSymbol {
|
||||||
val owner: IrSymbolOwner
|
val owner: IrSymbolOwner
|
||||||
val descriptor: DeclarationDescriptor
|
val descriptor: DeclarationDescriptor
|
||||||
val isBound: Boolean
|
val isBound: Boolean
|
||||||
|
|
||||||
|
fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol {
|
interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol {
|
||||||
@@ -35,43 +38,135 @@ interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : I
|
|||||||
|
|
||||||
interface IrPackageFragmentSymbol : IrSymbol {
|
interface IrPackageFragmentSymbol : IrSymbol {
|
||||||
override val descriptor: PackageFragmentDescriptor
|
override val descriptor: PackageFragmentDescriptor
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitPackageFragmentSymbol(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrFileSymbol : IrPackageFragmentSymbol, IrBindableSymbol<PackageFragmentDescriptor, IrFile>
|
interface IrFileSymbol :
|
||||||
interface IrExternalPackageFragmentSymbol : IrPackageFragmentSymbol, IrBindableSymbol<PackageFragmentDescriptor, IrExternalPackageFragment>
|
IrPackageFragmentSymbol, IrBindableSymbol<PackageFragmentDescriptor, IrFile> {
|
||||||
|
|
||||||
interface IrAnonymousInitializerSymbol : IrBindableSymbol<ClassDescriptor, IrAnonymousInitializer>
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
interface IrEnumEntrySymbol : IrBindableSymbol<ClassDescriptor, IrEnumEntry>
|
visitor.visitFileSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
interface IrFieldSymbol : IrBindableSymbol<PropertyDescriptor, IrField>
|
interface IrExternalPackageFragmentSymbol :
|
||||||
|
IrPackageFragmentSymbol, IrBindableSymbol<PackageFragmentDescriptor, IrExternalPackageFragment> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitExternalPackageFragmentSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrAnonymousInitializerSymbol :
|
||||||
|
IrBindableSymbol<ClassDescriptor, IrAnonymousInitializer> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitAnonymousInitializerSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrEnumEntrySymbol :
|
||||||
|
IrBindableSymbol<ClassDescriptor, IrEnumEntry> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitEnumEntrySymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrFieldSymbol :
|
||||||
|
IrBindableSymbol<PropertyDescriptor, IrField> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitFieldSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrClassifierSymbol :
|
||||||
|
IrSymbol {
|
||||||
|
|
||||||
interface IrClassifierSymbol : IrSymbol {
|
|
||||||
override val descriptor: ClassifierDescriptor
|
override val descriptor: ClassifierDescriptor
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitClassifierSymbol(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrClassSymbol : IrClassifierSymbol, IrBindableSymbol<ClassDescriptor, IrClass>
|
interface IrClassSymbol :
|
||||||
interface IrTypeParameterSymbol : IrClassifierSymbol, IrBindableSymbol<TypeParameterDescriptor, IrTypeParameter>
|
IrClassifierSymbol, IrBindableSymbol<ClassDescriptor, IrClass> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitClassSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrTypeParameterSymbol :
|
||||||
|
IrClassifierSymbol, IrBindableSymbol<TypeParameterDescriptor, IrTypeParameter> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitTypeParameterSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrValueSymbol :
|
||||||
|
IrSymbol {
|
||||||
|
|
||||||
interface IrValueSymbol : IrSymbol {
|
|
||||||
override val descriptor: ValueDescriptor
|
override val descriptor: ValueDescriptor
|
||||||
override val owner: IrValueDeclaration
|
override val owner: IrValueDeclaration
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitValueSymbol(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrValueParameterSymbol : IrValueSymbol, IrBindableSymbol<ParameterDescriptor, IrValueParameter>
|
interface IrValueParameterSymbol :
|
||||||
interface IrVariableSymbol : IrValueSymbol, IrBindableSymbol<VariableDescriptor, IrVariable>
|
IrValueSymbol, IrBindableSymbol<ParameterDescriptor, IrValueParameter> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitValueParameterSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrVariableSymbol :
|
||||||
|
IrValueSymbol, IrBindableSymbol<VariableDescriptor, IrVariable> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitVariableSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrReturnTargetSymbol :
|
||||||
|
IrSymbol {
|
||||||
|
|
||||||
interface IrReturnTargetSymbol : IrSymbol {
|
|
||||||
override val descriptor: FunctionDescriptor
|
override val descriptor: FunctionDescriptor
|
||||||
override val owner: IrReturnTarget
|
override val owner: IrReturnTarget
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitReturnTargetSymbol(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrFunctionSymbol : IrReturnTargetSymbol {
|
interface IrFunctionSymbol :
|
||||||
|
IrReturnTargetSymbol {
|
||||||
|
|
||||||
override val owner: IrFunction
|
override val owner: IrFunction
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitFunctionSymbol(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrConstructorSymbol : IrFunctionSymbol, IrBindableSymbol<ClassConstructorDescriptor, IrConstructor>
|
interface IrConstructorSymbol :
|
||||||
interface IrSimpleFunctionSymbol : IrFunctionSymbol, IrBindableSymbol<FunctionDescriptor, IrSimpleFunction>
|
IrFunctionSymbol, IrBindableSymbol<ClassConstructorDescriptor, IrConstructor> {
|
||||||
|
|
||||||
interface IrReturnableBlockSymbol : IrReturnTargetSymbol, IrBindableSymbol<FunctionDescriptor, IrReturnableBlock>
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitConstructorSymbol(this, data)
|
||||||
|
}
|
||||||
|
interface IrSimpleFunctionSymbol :
|
||||||
|
IrFunctionSymbol, IrBindableSymbol<FunctionDescriptor, IrSimpleFunction> {
|
||||||
|
|
||||||
interface IrPropertySymbol : IrBindableSymbol<PropertyDescriptor, IrProperty>
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitSimpleFunctionSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrReturnableBlockSymbol :
|
||||||
|
IrReturnTargetSymbol, IrBindableSymbol<FunctionDescriptor, IrReturnableBlock> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitReturnableBlockSymbol(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IrPropertySymbol :
|
||||||
|
IrBindableSymbol<PropertyDescriptor, IrProperty> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitPropertySymbol(this, data)
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.ir.util
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
|
|
||||||
|
interface IrSymbolVisitor<out R, in D> {
|
||||||
|
fun visitSymbol(symbol: IrSymbol, data: D): R
|
||||||
|
|
||||||
|
fun visitPackageFragmentSymbol(symbol: IrPackageFragmentSymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitFileSymbol(symbol: IrFileSymbol, data: D) =
|
||||||
|
visitPackageFragmentSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitExternalPackageFragmentSymbol(symbol: IrExternalPackageFragmentSymbol, data: D) =
|
||||||
|
visitPackageFragmentSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitClassifierSymbol(symbol: IrClassifierSymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitClassSymbol(symbol: IrClassSymbol, data: D) =
|
||||||
|
visitClassifierSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitTypeParameterSymbol(symbol: IrTypeParameterSymbol, data: D) =
|
||||||
|
visitClassifierSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitValueSymbol(symbol: IrValueSymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitVariableSymbol(symbol: IrVariableSymbol, data: D) =
|
||||||
|
visitValueSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitValueParameterSymbol(symbol: IrValueParameterSymbol, data: D) =
|
||||||
|
visitValueSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitReturnTargetSymbol(symbol: IrReturnTargetSymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitFunctionSymbol(symbol: IrFunctionSymbol, data: D) =
|
||||||
|
visitReturnTargetSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitSimpleFunctionSymbol(symbol: IrSimpleFunctionSymbol, data: D) =
|
||||||
|
visitFunctionSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitConstructorSymbol(symbol: IrConstructorSymbol, data: D) =
|
||||||
|
visitFunctionSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitReturnableBlockSymbol(symbol: IrReturnableBlockSymbol, data: D) =
|
||||||
|
visitReturnTargetSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitAnonymousInitializerSymbol(symbol: IrAnonymousInitializerSymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitEnumEntrySymbol(symbol: IrEnumEntrySymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitFieldSymbol(symbol: IrFieldSymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitPropertySymbol(symbol: IrPropertySymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user