From 93618ebb124369135553ad7f8cf63734b68f2d3a Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 31 Aug 2016 16:11:37 +0300 Subject: [PATCH] IrClassReference --- .../kotlin/ir/expressions/IrClassReference.kt | 37 +++++++++++++++++++ .../kotlin/ir/util/RenderIrElement.kt | 3 ++ .../kotlin/ir/visitors/IrElementVisitor.kt | 2 + 3 files changed, 42 insertions(+) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt new file mode 100644 index 00000000000..7ff81233cd1 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.ir.expressions + +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.types.KotlinType + + +interface IrClassReference : IrDeclarationReference { + override val descriptor: ClassDescriptor +} + +class IrClassReferenceImpl( + startOffset: Int, + endOffset: Int, + type: KotlinType, + descriptor: ClassDescriptor +) : IrTerminalDeclarationReferenceBase(startOffset, endOffset, type, descriptor), IrClassReference { + override fun accept(visitor: IrElementVisitor, data: D): R { + return visitor.visitClassReference(this, data) + } +} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt index c1a412022b8..6e286a540ce 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt @@ -158,6 +158,9 @@ class RenderIrElementVisitor : IrElementVisitor { override fun visitCallableReference(expression: IrCallableReference, data: Nothing?): String = "CALLABLE_REFERENCE ${expression.descriptor.render()} type=${expression.type.render()}" + override fun visitClassReference(expression: IrClassReference, data: Nothing?): String = + "CLASS_REFERENCE ${expression.descriptor.render()} type=${expression.type.render()}" + override fun visitTryCatch(tryCatch: IrTryCatch, data: Nothing?): String = "TRY_CATCH type=${tryCatch.type.render()}" diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt index 6575a2e6df8..bea99cffaec 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt @@ -64,7 +64,9 @@ interface IrElementVisitor { fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data) fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitGeneralCall(expression, data) fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitGeneralCall(expression, data) + fun visitCallableReference(expression: IrCallableReference, data: D) = visitDeclarationReference(expression, data) + fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data) fun visitNestedInitializersCall(expression: IrNestedInitializersCall, data: D) = visitExpression(expression, data)