From 7a0f986823b3ab4960c2bceae02b9f99469f915b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 4 Jun 2020 18:42:52 +0300 Subject: [PATCH] [IR] Introduce & use DescriptorBasedIr OptIn --- compiler/ir/backend.common/build.gradle.kts | 8 ++++++++ compiler/ir/backend.jvm/build.gradle.kts | 8 ++++++++ compiler/ir/ir.psi2ir/build.gradle.kts | 8 ++++++++ compiler/ir/ir.tree/build.gradle.kts | 8 ++++++++ .../src/org/jetbrains/kotlin/ir/DescriptorBasedIr.kt | 9 +++++++++ .../jetbrains/kotlin/ir/declarations/IrDeclaration.kt | 3 ++- .../src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt | 3 ++- compiler/ir/serialization.common/build.gradle.kts | 8 ++++++++ compiler/ir/serialization.jvm/build.gradle.kts | 8 ++++++++ .../org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt | 1 + 10 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/DescriptorBasedIr.kt diff --git a/compiler/ir/backend.common/build.gradle.kts b/compiler/ir/backend.common/build.gradle.kts index acb573d5779..caef995ea9d 100644 --- a/compiler/ir/backend.common/build.gradle.kts +++ b/compiler/ir/backend.common/build.gradle.kts @@ -16,3 +16,11 @@ sourceSets { "test" {} } +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } +} + diff --git a/compiler/ir/backend.jvm/build.gradle.kts b/compiler/ir/backend.jvm/build.gradle.kts index db95227e83e..d588830a642 100644 --- a/compiler/ir/backend.jvm/build.gradle.kts +++ b/compiler/ir/backend.jvm/build.gradle.kts @@ -20,3 +20,11 @@ sourceSets { } "test" {} } + +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } +} diff --git a/compiler/ir/ir.psi2ir/build.gradle.kts b/compiler/ir/ir.psi2ir/build.gradle.kts index acb573d5779..caef995ea9d 100644 --- a/compiler/ir/ir.psi2ir/build.gradle.kts +++ b/compiler/ir/ir.psi2ir/build.gradle.kts @@ -16,3 +16,11 @@ sourceSets { "test" {} } +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } +} + diff --git a/compiler/ir/ir.tree/build.gradle.kts b/compiler/ir/ir.tree/build.gradle.kts index 85c902645a9..ce4670be612 100644 --- a/compiler/ir/ir.tree/build.gradle.kts +++ b/compiler/ir/ir.tree/build.gradle.kts @@ -13,4 +13,12 @@ dependencies { sourceSets { "main" { projectDefault() } "test" {} +} + +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/DescriptorBasedIr.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/DescriptorBasedIr.kt new file mode 100644 index 00000000000..ddee0bc7e39 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/DescriptorBasedIr.kt @@ -0,0 +1,9 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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 + +@RequiresOptIn(message = "Please use IR declaration properties and not its descriptor properties", level = RequiresOptIn.Level.ERROR) +annotation class DescriptorBasedIr \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index 755631d1bc1..5c772043173 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrSymbol @@ -34,7 +35,7 @@ interface IrMetadataSourceOwner : IrElement { } interface IrDeclaration : IrStatement, IrMutableAnnotationContainer, IrMetadataSourceOwner { - @Deprecated("Please use IR declaration properties and not its descriptor properties") + @DescriptorBasedIr val descriptor: DeclarationDescriptor var origin: IrDeclarationOrigin diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt index 779b72cef2f..cfe47f65bb5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.symbols import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.IrScript import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock @@ -28,7 +29,7 @@ import org.jetbrains.kotlin.types.model.TypeParameterMarker interface IrSymbol { val owner: IrSymbolOwner - @Deprecated("Please use IR declaration properties and not its descriptor properties") + @DescriptorBasedIr val descriptor: DeclarationDescriptor val isBound: Boolean diff --git a/compiler/ir/serialization.common/build.gradle.kts b/compiler/ir/serialization.common/build.gradle.kts index ad51a4b7d33..89d609251d5 100644 --- a/compiler/ir/serialization.common/build.gradle.kts +++ b/compiler/ir/serialization.common/build.gradle.kts @@ -25,3 +25,11 @@ sourceSets { "test" {} } +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } +} + diff --git a/compiler/ir/serialization.jvm/build.gradle.kts b/compiler/ir/serialization.jvm/build.gradle.kts index 5b248259793..95c21730742 100644 --- a/compiler/ir/serialization.jvm/build.gradle.kts +++ b/compiler/ir/serialization.jvm/build.gradle.kts @@ -17,4 +17,12 @@ sourceSets { projectDefault() } "test" {} +} + +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } } \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt index e73423ae75c..d421302c471 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt @@ -179,6 +179,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { element.acceptChildrenVoid(this) } + @OptIn(DescriptorBasedIr::class) override fun visitDeclaration(declaration: IrDeclaration) { if (declaration is IrSymbolOwner) { declaration.symbol.checkBinding("decl", declaration)