From a2703b1534f2596656168b823af2d5d697aa3ece Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Thu, 31 Oct 2019 19:02:48 +0300 Subject: [PATCH] [IR] Unlink `isLocal` and `isAnonymousObject` from Descriptors API --- .../kotlin/ir/util/AdditionalIrUtils.kt | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt index c0ca56a46f6..7728ce3890b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.ir.util +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.SourceManager import org.jetbrains.kotlin.ir.SourceRangeInfo import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET @@ -13,7 +15,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.resolve.descriptorUtil.module import java.io.File @@ -124,8 +126,25 @@ fun IrDeclaration.findTopLevelDeclaration(): IrDeclaration = when { (this.parent as IrDeclaration).findTopLevelDeclaration() } -val IrDeclaration.isAnonymousObject get() = DescriptorUtils.isAnonymousObject(this.descriptor) -val IrDeclaration.isLocal get() = DescriptorUtils.isLocal(this.descriptor) +val IrDeclaration.isAnonymousObject get() = this is IrClass && name == SpecialNames.NO_NAME_PROVIDED + +val IrDeclaration.isLocal: Boolean + get() { + var current: IrElement = this + while (current !is IrPackageFragment) { + require(current is IrDeclaration) + + if (current is IrDeclarationWithVisibility) { + if (current.visibility == Visibilities.LOCAL) return true + } + + if (current.isAnonymousObject) return true + + current = current.parent + } + + return false + } val IrDeclaration.module get() = this.descriptor.module