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.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
|
||||
import org.jetbrains.kotlin.ir.util.IrSymbolVisitor
|
||||
|
||||
interface IrSymbol {
|
||||
val owner: IrSymbolOwner
|
||||
val descriptor: DeclarationDescriptor
|
||||
val isBound: Boolean
|
||||
|
||||
fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R
|
||||
}
|
||||
|
||||
interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol {
|
||||
@@ -35,43 +38,135 @@ interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : I
|
||||
|
||||
interface IrPackageFragmentSymbol : IrSymbol {
|
||||
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 IrExternalPackageFragmentSymbol : IrPackageFragmentSymbol, IrBindableSymbol<PackageFragmentDescriptor, IrExternalPackageFragment>
|
||||
interface IrFileSymbol :
|
||||
IrPackageFragmentSymbol, IrBindableSymbol<PackageFragmentDescriptor, IrFile> {
|
||||
|
||||
interface IrAnonymousInitializerSymbol : IrBindableSymbol<ClassDescriptor, IrAnonymousInitializer>
|
||||
interface IrEnumEntrySymbol : IrBindableSymbol<ClassDescriptor, IrEnumEntry>
|
||||
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||
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 fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||
visitor.visitClassifierSymbol(this, data)
|
||||
}
|
||||
|
||||
interface IrClassSymbol : IrClassifierSymbol, IrBindableSymbol<ClassDescriptor, IrClass>
|
||||
interface IrTypeParameterSymbol : IrClassifierSymbol, IrBindableSymbol<TypeParameterDescriptor, IrTypeParameter>
|
||||
interface IrClassSymbol :
|
||||
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 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 IrVariableSymbol : IrValueSymbol, IrBindableSymbol<VariableDescriptor, IrVariable>
|
||||
interface IrValueParameterSymbol :
|
||||
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 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 fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||
visitor.visitFunctionSymbol(this, data)
|
||||
}
|
||||
|
||||
interface IrConstructorSymbol : IrFunctionSymbol, IrBindableSymbol<ClassConstructorDescriptor, IrConstructor>
|
||||
interface IrSimpleFunctionSymbol : IrFunctionSymbol, IrBindableSymbol<FunctionDescriptor, IrSimpleFunction>
|
||||
interface IrConstructorSymbol :
|
||||
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