Classes & type aliases, initial import.
This commit is contained in:
committed by
Dmitry Petrov
parent
b17e3b0299
commit
19e95d232a
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* 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.psi2ir.generators
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrClassImpl
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
|
class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator {
|
||||||
|
override val context: GeneratorContext get() = declarationGenerator.context
|
||||||
|
|
||||||
|
fun generateClass(ktClassOrObject: KtClassOrObject): IrClass {
|
||||||
|
val descriptor = getOrFail(BindingContext.CLASS, ktClassOrObject)
|
||||||
|
val irClass = IrClassImpl(ktClassOrObject.startOffset, ktClassOrObject.endOffset, IrDeclarationOrigin.DEFINED, descriptor)
|
||||||
|
// TODO generate members
|
||||||
|
return irClass
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-13
@@ -42,17 +42,12 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateClassOrObjectDeclaration(ktDeclaration: KtClassOrObject): IrDeclaration =
|
fun generateClassOrObjectDeclaration(ktClassOrObject: KtClassOrObject): IrClass =
|
||||||
IrDummyDeclaration(
|
ClassGenerator(this).generateClass(ktClassOrObject)
|
||||||
ktDeclaration.startOffset, ktDeclaration.endOffset,
|
|
||||||
getOrFail(BindingContext.CLASS, ktDeclaration)
|
|
||||||
)
|
|
||||||
|
|
||||||
fun generateTypeAliasDeclaration(ktDeclaration: KtTypeAlias): IrDeclaration =
|
fun generateTypeAliasDeclaration(ktDeclaration: KtTypeAlias): IrDeclaration =
|
||||||
IrDummyDeclaration(
|
IrTypeAliasImpl(ktDeclaration.startOffset, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED,
|
||||||
ktDeclaration.startOffset, ktDeclaration.endOffset,
|
getOrFail(BindingContext.TYPE_ALIAS, ktDeclaration))
|
||||||
getOrFail(BindingContext.TYPE_ALIAS, ktDeclaration)
|
|
||||||
)
|
|
||||||
|
|
||||||
fun generateFunctionDeclaration(ktNamedFunction: KtNamedFunction): IrFunction {
|
fun generateFunctionDeclaration(ktNamedFunction: KtNamedFunction): IrFunction {
|
||||||
val functionDescriptor = getOrFail(BindingContext.FUNCTION, ktNamedFunction)
|
val functionDescriptor = getOrFail(BindingContext.FUNCTION, ktNamedFunction)
|
||||||
@@ -85,11 +80,11 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
|
|
||||||
fun createFunction(ktFunction: KtFunction, functionDescriptor: FunctionDescriptor, body: IrBody): IrFunction =
|
fun createFunction(ktFunction: KtFunction, functionDescriptor: FunctionDescriptor, body: IrBody): IrFunction =
|
||||||
IrFunctionImpl(ktFunction.startOffset, ktFunction.endOffset,
|
IrFunctionImpl(ktFunction.startOffset, ktFunction.endOffset,
|
||||||
IrDeclarationOriginKind.DEFINED, functionDescriptor, body)
|
IrDeclarationOrigin.DEFINED, functionDescriptor, body)
|
||||||
|
|
||||||
fun createSimpleProperty(ktProperty: KtProperty, propertyDescriptor: PropertyDescriptor, valueInitializer: IrBody?): IrSimpleProperty =
|
fun createSimpleProperty(ktProperty: KtProperty, propertyDescriptor: PropertyDescriptor, valueInitializer: IrBody?): IrSimpleProperty =
|
||||||
IrSimplePropertyImpl(ktProperty.startOffset, ktProperty.endOffset,
|
IrSimplePropertyImpl(ktProperty.startOffset, ktProperty.endOffset,
|
||||||
IrDeclarationOriginKind.DEFINED, propertyDescriptor, valueInitializer)
|
IrDeclarationOrigin.DEFINED, propertyDescriptor, valueInitializer)
|
||||||
|
|
||||||
fun createPropertyGetter(
|
fun createPropertyGetter(
|
||||||
ktPropertyAccessor: KtPropertyAccessor,
|
ktPropertyAccessor: KtPropertyAccessor,
|
||||||
@@ -98,7 +93,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
getterBody: IrBody
|
getterBody: IrBody
|
||||||
): IrPropertyGetter =
|
): IrPropertyGetter =
|
||||||
IrPropertyGetterImpl(ktPropertyAccessor.startOffset, ktPropertyAccessor.endOffset,
|
IrPropertyGetterImpl(ktPropertyAccessor.startOffset, ktPropertyAccessor.endOffset,
|
||||||
IrDeclarationOriginKind.DEFINED, getterDescriptor, getterBody)
|
IrDeclarationOrigin.DEFINED, getterDescriptor, getterBody)
|
||||||
.apply { irProperty.getter = this }
|
.apply { irProperty.getter = this }
|
||||||
|
|
||||||
fun createPropertySetter(
|
fun createPropertySetter(
|
||||||
@@ -108,7 +103,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
setterBody: IrBody
|
setterBody: IrBody
|
||||||
) : IrPropertySetter =
|
) : IrPropertySetter =
|
||||||
IrPropertySetterImpl(ktPropertyAccessor.startOffset, ktPropertyAccessor.endOffset,
|
IrPropertySetterImpl(ktPropertyAccessor.startOffset, ktPropertyAccessor.endOffset,
|
||||||
IrDeclarationOriginKind.DEFINED, setterDescriptor, setterBody)
|
IrDeclarationOrigin.DEFINED, setterDescriptor, setterBody)
|
||||||
.apply { irProperty.setter = this }
|
.apply { irProperty.setter = this }
|
||||||
|
|
||||||
private fun getPropertyDescriptor(ktProperty: KtProperty): PropertyDescriptor {
|
private fun getPropertyDescriptor(ktProperty: KtProperty): PropertyDescriptor {
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginKind
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -138,7 +138,7 @@ class LoopExpressionGenerator(val statementGenerator: StatementGenerator) : Gene
|
|||||||
val irNextCall = callGenerator.generateCall(ktLoopRange, nextCall, IrOperator.FOR_LOOP_NEXT)
|
val irNextCall = callGenerator.generateCall(ktLoopRange, nextCall, IrOperator.FOR_LOOP_NEXT)
|
||||||
val irLoopParameter = if (ktLoopParameter != null) {
|
val irLoopParameter = if (ktLoopParameter != null) {
|
||||||
val loopParameterDescriptor = getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter)
|
val loopParameterDescriptor = getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter)
|
||||||
IrVariableImpl(ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOriginKind.DEFINED,
|
IrVariableImpl(ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.DEFINED,
|
||||||
loopParameterDescriptor, irNextCall)
|
loopParameterDescriptor, irNextCall)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginKind
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
||||||
@@ -40,7 +40,7 @@ class Scope(val scopeOwner: DeclarationDescriptor) {
|
|||||||
|
|
||||||
fun createTemporaryVariable(irExpression: IrExpression, nameHint: String? = null): IrVariable =
|
fun createTemporaryVariable(irExpression: IrExpression, nameHint: String? = null): IrVariable =
|
||||||
IrVariableImpl(
|
IrVariableImpl(
|
||||||
irExpression.startOffset, irExpression.endOffset, IrDeclarationOriginKind.IR_TEMPORARY_VARIABLE,
|
irExpression.startOffset, irExpression.endOffset, IrDeclarationOrigin.IR_TEMPORARY_VARIABLE,
|
||||||
createDescriptorForTemporaryVariable(irExpression.type, nameHint),
|
createDescriptorForTemporaryVariable(irExpression.type, nameHint),
|
||||||
irExpression
|
irExpression
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.psi2ir.generators
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.assertCast
|
import org.jetbrains.kotlin.ir.assertCast
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginKind
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -67,7 +67,7 @@ class StatementGenerator(
|
|||||||
|
|
||||||
val variableDescriptor = getOrFail(BindingContext.VARIABLE, property)
|
val variableDescriptor = getOrFail(BindingContext.VARIABLE, property)
|
||||||
|
|
||||||
val irLocalVariable = IrVariableImpl(property.startOffset, property.endOffset, IrDeclarationOriginKind.DEFINED, variableDescriptor)
|
val irLocalVariable = IrVariableImpl(property.startOffset, property.endOffset, IrDeclarationOrigin.DEFINED, variableDescriptor)
|
||||||
irLocalVariable.initializer = property.initializer?.genExpr()
|
irLocalVariable.initializer = property.initializer?.genExpr()
|
||||||
return irLocalVariable
|
return irLocalVariable
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ class StatementGenerator(
|
|||||||
val componentVariable = getOrFail(BindingContext.VARIABLE, ktEntry)
|
val componentVariable = getOrFail(BindingContext.VARIABLE, ktEntry)
|
||||||
val irComponentCall = callGenerator.generateCall(ktEntry.startOffset, ktEntry.endOffset, componentSubstitutedCall,
|
val irComponentCall = callGenerator.generateCall(ktEntry.startOffset, ktEntry.endOffset, componentSubstitutedCall,
|
||||||
IrOperator.COMPONENT_N.withIndex(index + 1))
|
IrOperator.COMPONENT_N.withIndex(index + 1))
|
||||||
val irComponentVar = IrVariableImpl(ktEntry.startOffset, ktEntry.endOffset, IrDeclarationOriginKind.DEFINED,
|
val irComponentVar = IrVariableImpl(ktEntry.startOffset, ktEntry.endOffset, IrDeclarationOrigin.DEFINED,
|
||||||
componentVariable, irComponentCall)
|
componentVariable, irComponentCall)
|
||||||
irBlock.addStatement(irComponentVar)
|
irBlock.addStatement(irComponentVar)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginKind
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
import org.jetbrains.kotlin.ir.declarations.IrVariableImpl
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptor
|
||||||
|
|||||||
@@ -21,38 +21,36 @@ import org.jetbrains.kotlin.ir.*
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
interface IrClassElement : IrElement
|
|
||||||
|
|
||||||
interface IrClass : IrDeclaration {
|
interface IrClass : IrDeclaration {
|
||||||
override val declarationKind: IrDeclarationKind
|
override val declarationKind: IrDeclarationKind
|
||||||
get() = IrDeclarationKind.CLASS
|
get() = IrDeclarationKind.CLASS
|
||||||
|
|
||||||
override val descriptor: ClassDescriptor
|
override val descriptor: ClassDescriptor
|
||||||
|
|
||||||
val children: List<IrClassElement>
|
val members: List<IrDeclaration>
|
||||||
}
|
}
|
||||||
|
|
||||||
class IrClassImpl(
|
class IrClassImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: ClassDescriptor
|
override val descriptor: ClassDescriptor
|
||||||
) : IrDeclarationBase(startOffset, endOffset, originKind), IrClass {
|
) : IrDeclarationBase(startOffset, endOffset, origin), IrClass {
|
||||||
override val children: MutableList<IrClassElement> = ArrayList()
|
override val members: MutableList<IrDeclaration> = ArrayList()
|
||||||
|
|
||||||
fun addElement(child: IrClassElement) {
|
fun addMember(member: IrDeclaration) {
|
||||||
child.assertDetached()
|
member.assertDetached()
|
||||||
child.setTreeLocation(this, children.size)
|
member.setTreeLocation(this, members.size)
|
||||||
children.add(child)
|
members.add(member)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getChild(slot: Int): IrElement? =
|
override fun getChild(slot: Int): IrElement? =
|
||||||
children.getOrNull(slot)
|
members.getOrNull(slot)
|
||||||
|
|
||||||
override fun replaceChild(slot: Int, newChild: IrElement) {
|
override fun replaceChild(slot: Int, newChild: IrElement) {
|
||||||
newChild.assertDetached()
|
newChild.assertDetached()
|
||||||
children.getOrNull(slot)?.detach() ?: throwNoSuchSlot(slot)
|
members.getOrNull(slot)?.detach() ?: throwNoSuchSlot(slot)
|
||||||
children[slot] = newChild.assertCast()
|
members[slot] = newChild.assertCast()
|
||||||
newChild.setTreeLocation(this, slot)
|
newChild.setTreeLocation(this, slot)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +58,7 @@ class IrClassImpl(
|
|||||||
visitor.visitClass(this, data)
|
visitor.visitClass(this, data)
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
children.forEach { it.accept(visitor, data) }
|
members.forEach { it.accept(visitor, data) }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
import org.jetbrains.kotlin.ir.IrElementBase
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
|
|
||||||
interface IrDeclaration : IrStatement, IrClassElement {
|
interface IrDeclaration : IrStatement {
|
||||||
val descriptor: DeclarationDescriptor?
|
val descriptor: DeclarationDescriptor?
|
||||||
val declarationKind: IrDeclarationKind
|
val declarationKind: IrDeclarationKind
|
||||||
val originKind: IrDeclarationOriginKind
|
val origin: IrDeclarationOrigin
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class IrDeclarationKind {
|
enum class IrDeclarationKind {
|
||||||
@@ -32,13 +32,15 @@ enum class IrDeclarationKind {
|
|||||||
FUNCTION,
|
FUNCTION,
|
||||||
PROPERTY_GETTER,
|
PROPERTY_GETTER,
|
||||||
PROPERTY_SETTER,
|
PROPERTY_SETTER,
|
||||||
|
CONSTRUCTOR,
|
||||||
PROPERTY,
|
PROPERTY,
|
||||||
VARIABLE,
|
VARIABLE,
|
||||||
CLASS,
|
CLASS,
|
||||||
|
TYPEALIAS,
|
||||||
DUMMY;
|
DUMMY;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class IrDeclarationOriginKind {
|
enum class IrDeclarationOrigin {
|
||||||
DEFINED,
|
DEFINED,
|
||||||
IR_TEMPORARY_VARIABLE,
|
IR_TEMPORARY_VARIABLE,
|
||||||
}
|
}
|
||||||
@@ -46,5 +48,5 @@ enum class IrDeclarationOriginKind {
|
|||||||
abstract class IrDeclarationBase(
|
abstract class IrDeclarationBase(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
override val originKind: IrDeclarationOriginKind
|
override val origin: IrDeclarationOrigin
|
||||||
) : IrElementBase(startOffset, endOffset), IrDeclaration
|
) : IrElementBase(startOffset, endOffset), IrDeclaration
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class IrDummyDeclaration(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
override val descriptor: DeclarationDescriptor
|
override val descriptor: DeclarationDescriptor
|
||||||
) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOriginKind.DEFINED) {
|
) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED) {
|
||||||
override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.DUMMY
|
override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.DUMMY
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ interface IrFunction : IrDeclaration {
|
|||||||
abstract class IrFunctionBase(
|
abstract class IrFunctionBase(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
body: IrBody? = null
|
body: IrBody? = null
|
||||||
) : IrDeclarationBase(startOffset, endOffset, originKind), IrFunction {
|
) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction {
|
||||||
init {
|
init {
|
||||||
body?.setTreeLocation(this, FUNCTION_BODY_SLOT)
|
body?.setTreeLocation(this, FUNCTION_BODY_SLOT)
|
||||||
}
|
}
|
||||||
@@ -70,10 +70,10 @@ abstract class IrFunctionBase(
|
|||||||
class IrFunctionImpl(
|
class IrFunctionImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: FunctionDescriptor,
|
override val descriptor: FunctionDescriptor,
|
||||||
body: IrBody
|
body: IrBody
|
||||||
) : IrFunctionBase(startOffset, endOffset, originKind, body) {
|
) : IrFunctionBase(startOffset, endOffset, origin, body) {
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitFunction(this, data)
|
visitor.visitFunction(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ interface IrDelegatedProperty : IrProperty {
|
|||||||
abstract class IrPropertyBase(
|
abstract class IrPropertyBase(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: PropertyDescriptor
|
override val descriptor: PropertyDescriptor
|
||||||
) : IrDeclarationBase(startOffset, endOffset, originKind), IrProperty {
|
) : IrDeclarationBase(startOffset, endOffset, origin), IrProperty {
|
||||||
override var getter: IrPropertyGetter? = null
|
override var getter: IrPropertyGetter? = null
|
||||||
set(newGetter) {
|
set(newGetter) {
|
||||||
newGetter?.run { assert(property == null) { "$newGetter: should not have a property" } }
|
newGetter?.run { assert(property == null) { "$newGetter: should not have a property" } }
|
||||||
@@ -70,10 +70,10 @@ abstract class IrPropertyBase(
|
|||||||
class IrSimplePropertyImpl(
|
class IrSimplePropertyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
valueInitializer: IrBody? = null
|
valueInitializer: IrBody? = null
|
||||||
) : IrPropertyBase(startOffset, endOffset, originKind, descriptor), IrSimpleProperty {
|
) : IrPropertyBase(startOffset, endOffset, origin, descriptor), IrSimpleProperty {
|
||||||
override var valueInitializer: IrBody? = valueInitializer
|
override var valueInitializer: IrBody? = valueInitializer
|
||||||
set(value) {
|
set(value) {
|
||||||
value?.assertDetached()
|
value?.assertDetached()
|
||||||
@@ -106,10 +106,10 @@ class IrSimplePropertyImpl(
|
|||||||
class IrDelegatedPropertyImpl(
|
class IrDelegatedPropertyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
delegateInitializer: IrBody
|
delegateInitializer: IrBody
|
||||||
) : IrPropertyBase(startOffset, endOffset, originKind, descriptor), IrDelegatedProperty {
|
) : IrPropertyBase(startOffset, endOffset, origin, descriptor), IrDelegatedProperty {
|
||||||
override var delegateInitializer: IrBody = delegateInitializer
|
override var delegateInitializer: IrBody = delegateInitializer
|
||||||
set(value) {
|
set(value) {
|
||||||
value.assertDetached()
|
value.assertDetached()
|
||||||
|
|||||||
@@ -44,19 +44,19 @@ interface IrPropertySetter : IrPropertyAccessor {
|
|||||||
abstract class IrPropertyAccessorBase(
|
abstract class IrPropertyAccessorBase(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
body: IrBody
|
body: IrBody
|
||||||
) : IrFunctionBase(startOffset, endOffset, originKind, body), IrPropertyAccessor {
|
) : IrFunctionBase(startOffset, endOffset, origin, body), IrPropertyAccessor {
|
||||||
override var property: IrProperty? = null
|
override var property: IrProperty? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
class IrPropertyGetterImpl(
|
class IrPropertyGetterImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: PropertyGetterDescriptor,
|
override val descriptor: PropertyGetterDescriptor,
|
||||||
body: IrBody
|
body: IrBody
|
||||||
) : IrPropertyAccessorBase(startOffset, endOffset, originKind, body), IrPropertyGetter {
|
) : IrPropertyAccessorBase(startOffset, endOffset, origin, body), IrPropertyGetter {
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitPropertyGetter(this, data)
|
visitor.visitPropertyGetter(this, data)
|
||||||
}
|
}
|
||||||
@@ -64,10 +64,10 @@ class IrPropertyGetterImpl(
|
|||||||
class IrPropertySetterImpl(
|
class IrPropertySetterImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: PropertySetterDescriptor,
|
override val descriptor: PropertySetterDescriptor,
|
||||||
body: IrBody
|
body: IrBody
|
||||||
) : IrPropertyAccessorBase(startOffset, endOffset, originKind, body), IrPropertySetter {
|
) : IrPropertyAccessorBase(startOffset, endOffset, origin, body), IrPropertySetter {
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitPropertySetter(this, data)
|
visitor.visitPropertySetter(this, data)
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* 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.declarations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
|
interface IrTypeAlias : IrDeclaration {
|
||||||
|
override val descriptor: TypeAliasDescriptor
|
||||||
|
|
||||||
|
override val declarationKind: IrDeclarationKind
|
||||||
|
get() = IrDeclarationKind.TYPEALIAS
|
||||||
|
}
|
||||||
|
|
||||||
|
class IrTypeAliasImpl(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
origin: IrDeclarationOrigin,
|
||||||
|
override val descriptor: TypeAliasDescriptor
|
||||||
|
) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeAlias {
|
||||||
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
|
return visitor.visitTypeAlias(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
|
// no children
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getChild(slot: Int): IrElement? = null
|
||||||
|
|
||||||
|
override fun replaceChild(slot: Int, newChild: IrElement) {
|
||||||
|
// no children
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,16 +33,16 @@ interface IrVariable : IrDeclaration {
|
|||||||
class IrVariableImpl(
|
class IrVariableImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: VariableDescriptor
|
override val descriptor: VariableDescriptor
|
||||||
) : IrDeclarationBase(startOffset, endOffset, originKind), IrVariable {
|
) : IrDeclarationBase(startOffset, endOffset, origin), IrVariable {
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
originKind: IrDeclarationOriginKind,
|
origin: IrDeclarationOrigin,
|
||||||
descriptor: VariableDescriptor,
|
descriptor: VariableDescriptor,
|
||||||
initializer: IrExpression
|
initializer: IrExpression
|
||||||
) : this(startOffset, endOffset, originKind, descriptor) {
|
) : this(startOffset, endOffset, origin, descriptor) {
|
||||||
this.initializer = initializer
|
this.initializer = initializer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,12 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
|||||||
override fun visitPropertySetter(declaration: IrPropertySetter, data: Nothing?): String =
|
override fun visitPropertySetter(declaration: IrPropertySetter, data: Nothing?): String =
|
||||||
"PROPERTY_SETTER ${declaration.descriptor.render()} property=${declaration.property?.name()}"
|
"PROPERTY_SETTER ${declaration.descriptor.render()} property=${declaration.property?.name()}"
|
||||||
|
|
||||||
|
override fun visitClass(declaration: IrClass, data: Nothing?): String =
|
||||||
|
"CLASS ${declaration.descriptor.kind} ${declaration.descriptor.name}"
|
||||||
|
|
||||||
|
override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?): String =
|
||||||
|
"TYPEALIAS ${declaration.descriptor.name} type=${declaration.descriptor.underlyingType.render()}"
|
||||||
|
|
||||||
override fun visitVariable(declaration: IrVariable, data: Nothing?): String =
|
override fun visitVariable(declaration: IrVariable, data: Nothing?): String =
|
||||||
"VAR ${declaration.descriptor.render()}"
|
"VAR ${declaration.descriptor.render()}"
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ interface IrElementVisitor<out R, in D> {
|
|||||||
|
|
||||||
fun visitDeclaration(declaration: IrDeclaration, data: D): R = visitElement(declaration, data)
|
fun visitDeclaration(declaration: IrDeclaration, data: D): R = visitElement(declaration, data)
|
||||||
fun visitClass(declaration: IrClass, data: D): R = visitDeclaration(declaration, data)
|
fun visitClass(declaration: IrClass, data: D): R = visitDeclaration(declaration, data)
|
||||||
|
fun visitTypeAlias(declaration: IrTypeAlias, data: D): R = visitDeclaration(declaration, data)
|
||||||
fun visitFunction(declaration: IrFunction, data: D): R = visitDeclaration(declaration, data)
|
fun visitFunction(declaration: IrFunction, data: D): R = visitDeclaration(declaration, data)
|
||||||
fun visitPropertyGetter(declaration: IrPropertyGetter, data: D): R = visitFunction(declaration, data)
|
fun visitPropertyGetter(declaration: IrPropertyGetter, data: D): R = visitFunction(declaration, data)
|
||||||
fun visitPropertySetter(declaration: IrPropertySetter, data: D): R = visitFunction(declaration, data)
|
fun visitPropertySetter(declaration: IrPropertySetter, data: D): R = visitFunction(declaration, data)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ FILE /arrayAugmentedAssignment1.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
CONST Int type=kotlin.Int value='42'
|
CONST Int type=kotlin.Int value='42'
|
||||||
DUMMY C
|
CLASS CLASS C
|
||||||
FUN public fun testVariable(): kotlin.Unit
|
FUN public fun testVariable(): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR var x: kotlin.IntArray
|
VAR var x: kotlin.IntArray
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FILE /arrayAugmentedAssignment2.kt
|
FILE /arrayAugmentedAssignment2.kt
|
||||||
DUMMY IA
|
CLASS INTERFACE IA
|
||||||
DUMMY IB
|
CLASS INTERFACE IB
|
||||||
FUN public fun IB.test(/*0*/ a: IA): kotlin.Unit
|
FUN public fun IB.test(/*0*/ a: IA): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit operator=PLUSEQ
|
BLOCK type=kotlin.Unit operator=PLUSEQ
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
FILE /assignments.kt
|
FILE /assignments.kt
|
||||||
DUMMY Ref
|
CLASS CLASS Ref
|
||||||
FUN public fun test1(): kotlin.Unit
|
FUN public fun test1(): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR var x: kotlin.Int
|
VAR var x: kotlin.Int
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
FILE /augmentedAssignment2.kt
|
FILE /augmentedAssignment2.kt
|
||||||
DUMMY A
|
CLASS CLASS A
|
||||||
FUN public operator fun A.plusAssign(/*0*/ s: kotlin.String): kotlin.Unit
|
FUN public operator fun A.plusAssign(/*0*/ s: kotlin.String): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN public operator fun A.minusAssign(/*0*/ s: kotlin.String): kotlin.Unit
|
FUN public operator fun A.minusAssign(/*0*/ s: kotlin.String): kotlin.Unit
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
FILE /chainOfSafeCalls.kt
|
FILE /chainOfSafeCalls.kt
|
||||||
DUMMY C
|
CLASS CLASS C
|
||||||
FUN public fun test(/*0*/ nc: C?): C?
|
FUN public fun test(/*0*/ nc: C?): C?
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
FILE /conventionComparisons.kt
|
FILE /conventionComparisons.kt
|
||||||
DUMMY IA
|
CLASS INTERFACE IA
|
||||||
DUMMY IB
|
CLASS INTERFACE IB
|
||||||
FUN public fun IB.test1(/*0*/ a1: IA, /*1*/ a2: IA): kotlin.Boolean
|
FUN public fun IB.test1(/*0*/ a1: IA, /*1*/ a2: IA): kotlin.Boolean
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
FILE /forWithImplicitReceivers.kt
|
FILE /forWithImplicitReceivers.kt
|
||||||
DUMMY FiveTimes
|
CLASS OBJECT FiveTimes
|
||||||
DUMMY IntCell
|
CLASS CLASS IntCell
|
||||||
DUMMY IReceiver
|
CLASS INTERFACE IReceiver
|
||||||
FUN public fun IReceiver.test(): kotlin.Unit
|
FUN public fun IReceiver.test(): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit operator=FOR_LOOP
|
BLOCK type=kotlin.Unit operator=FOR_LOOP
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FILE /safeCallWithIncrementDecrement.kt
|
FILE /safeCallWithIncrementDecrement.kt
|
||||||
DUMMY C
|
CLASS CLASS C
|
||||||
PROPERTY public var test.C?.p: kotlin.Int getter=<get-p> setter=<set-p>
|
PROPERTY public var test.C?.p: kotlin.Int getter=<get-p> setter=<set-p>
|
||||||
PROPERTY_GETTER public fun test.C?.<get-p>(): kotlin.Int property=p
|
PROPERTY_GETTER public fun test.C?.<get-p>(): kotlin.Int property=p
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
FILE /safeCalls.kt
|
FILE /safeCalls.kt
|
||||||
DUMMY Ref
|
CLASS CLASS Ref
|
||||||
DUMMY IHost
|
CLASS INTERFACE IHost
|
||||||
FUN public fun test1(/*0*/ x: kotlin.String?): kotlin.Int?
|
FUN public fun test1(/*0*/ x: kotlin.String?): kotlin.Int?
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FILE /smartCastsWithDestructuring.kt
|
FILE /smartCastsWithDestructuring.kt
|
||||||
DUMMY I1
|
CLASS INTERFACE I1
|
||||||
DUMMY I2
|
CLASS INTERFACE I2
|
||||||
FUN public operator fun I1.component1(): kotlin.Int
|
FUN public operator fun I1.component1(): kotlin.Int
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
FILE /typeOperators.kt
|
FILE /typeOperators.kt
|
||||||
DUMMY IThing
|
CLASS INTERFACE IThing
|
||||||
FUN public fun test1(/*0*/ x: kotlin.Any): kotlin.Boolean
|
FUN public fun test1(/*0*/ x: kotlin.Any): kotlin.Boolean
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
FILE /values.kt
|
FILE /values.kt
|
||||||
DUMMY Enum
|
CLASS ENUM_CLASS Enum
|
||||||
DUMMY A
|
CLASS OBJECT A
|
||||||
PROPERTY public val a: kotlin.Int = 0 getter=null setter=null
|
PROPERTY public val a: kotlin.Int = 0 getter=null setter=null
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
CONST Int type=kotlin.Int value='0'
|
CONST Int type=kotlin.Int value='0'
|
||||||
DUMMY Z
|
CLASS CLASS Z
|
||||||
FUN public fun test1(): Enum
|
FUN public fun test1(): Enum
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
FILE /when.kt
|
FILE /when.kt
|
||||||
DUMMY A
|
CLASS OBJECT A
|
||||||
FUN public fun testWithSubject(/*0*/ x: kotlin.Any?): kotlin.String
|
FUN public fun testWithSubject(/*0*/ x: kotlin.Any?): kotlin.String
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing
|
RETURN type=kotlin.Nothing
|
||||||
|
|||||||
Reference in New Issue
Block a user