Minor, remove code duplication in WrappedDescriptors

This commit is contained in:
Alexander Udalov
2019-07-17 17:35:50 +02:00
parent 0423d0f41e
commit 9d639bc9a4
@@ -382,14 +382,8 @@ open class WrappedSimpleFunctionDescriptor(
var originalDescriptor: FunctionDescriptor? = null
override fun getOverriddenDescriptors() = owner.overriddenSymbols.map { it.descriptor }
override fun getContainingDeclaration(): DeclarationDescriptor {
val parent = owner.parent
return if (parent is IrClass && parent.origin == IrDeclarationOrigin.FILE_CLASS && parent.parent is IrExternalPackageFragment) {
return (parent.parent as IrExternalPackageFragment).packageFragmentDescriptor
} else {
(parent as IrSymbolOwner).symbol.descriptor
}
}
override fun getContainingDeclaration(): DeclarationDescriptor = getContainingDeclaration(owner)
override fun getModality() = owner.modality
override fun getName() = owner.name
@@ -841,14 +835,7 @@ open class WrappedPropertyDescriptor(
override fun isConst() = owner.isConst
override fun getContainingDeclaration(): DeclarationDescriptor {
val parent = owner.parent
return if (parent is IrClass && parent.origin == IrDeclarationOrigin.FILE_CLASS && parent.parent is IrExternalPackageFragment) {
return (parent.parent as IrExternalPackageFragment).packageFragmentDescriptor
} else {
(parent as IrSymbolOwner).symbol.descriptor
}
}
override fun getContainingDeclaration(): DeclarationDescriptor = getContainingDeclaration(owner)
override fun isLateInit() = owner.isLateinit
@@ -993,3 +980,14 @@ open class WrappedFieldDescriptor(
override fun <V : Any?> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
}
private fun getContainingDeclaration(declaration: IrDeclarationWithName): DeclarationDescriptor {
val parent = declaration.parent
return if (parent is IrClass && parent.origin == IrDeclarationOrigin.FILE_CLASS && parent.parent is IrExternalPackageFragment) {
// JVM IR adds facade classes for IR of functions/properties loaded from dependencies. However, these shouldn't exist
// in the descriptor hierarchy, since this is what the old backend (dealing with descriptors) expects.
return (parent.parent as IrExternalPackageFragment).packageFragmentDescriptor
} else {
(parent as IrSymbolOwner).symbol.descriptor
}
}