Expose validity of objc stubs' descriptors

This commit is contained in:
Florian Kistner
2020-03-09 17:55:35 +01:00
committed by SvyatoslavScherbina
parent dcefc2cb31
commit 4b4bbdd02c
2 changed files with 27 additions and 6 deletions
@@ -18,7 +18,10 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
import org.jetbrains.kotlin.psi.psiUtil.modalityModifier
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierTypeOrDefault
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.BindingTraceContext
import org.jetbrains.kotlin.resolve.DescriptorResolver
@@ -26,7 +29,7 @@ import org.jetbrains.kotlin.resolve.TypeResolver
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope
@@ -51,7 +54,7 @@ interface ObjCExportLazy {
fun createObjCExportLazy(
configuration: ObjCExportLazy.Configuration,
warningCollector: ObjCExportWarningCollector,
resolveSession: ResolveSession,
codeAnalyzer: KotlinCodeAnalyzer,
typeResolver: TypeResolver,
descriptorResolver: DescriptorResolver,
fileScopeProvider: FileScopeProvider,
@@ -60,7 +63,7 @@ fun createObjCExportLazy(
): ObjCExportLazy = ObjCExportLazyImpl(
configuration,
warningCollector,
resolveSession,
codeAnalyzer,
typeResolver,
descriptorResolver,
fileScopeProvider,
@@ -71,7 +74,7 @@ fun createObjCExportLazy(
internal class ObjCExportLazyImpl(
private val configuration: ObjCExportLazy.Configuration,
warningCollector: ObjCExportWarningCollector,
private val resolveSession: ResolveSession,
private val codeAnalyzer: KotlinCodeAnalyzer,
private val typeResolver: TypeResolver,
private val descriptorResolver: DescriptorResolver,
private val fileScopeProvider: FileScopeProvider,
@@ -95,6 +98,9 @@ internal class ObjCExportLazyImpl(
objcGenerics = configuration.objcGenerics
)
private val isValid: Boolean
get() = codeAnalyzer.moduleDescriptor.isValid
override fun generateBase() = translator.generateBaseDeclarations()
override fun translate(file: KtFile): List<ObjCTopLevel<*>> =
@@ -203,7 +209,7 @@ internal class ObjCExportLazyImpl(
}
private fun resolveDeclaration(ktDeclaration: KtDeclaration): DeclarationDescriptor =
resolveSession.resolveToDescriptor(ktDeclaration)
codeAnalyzer.resolveToDescriptor(ktDeclaration)
private fun resolve(ktClassOrObject: KtClassOrObject) =
resolveDeclaration(ktClassOrObject) as ClassDescriptor
@@ -301,6 +307,9 @@ internal class ObjCExportLazyImpl(
) : LazyObjCProtocol(name) {
override val descriptor: ClassDescriptor by lazy { lazy.resolve(psi) }
override val isValid: Boolean
get() = lazy.isValid
override fun computeRealStub(): ObjCProtocol = lazy.translator.translateInterface(descriptor)
}
@@ -313,6 +322,9 @@ internal class ObjCExportLazyImpl(
) : LazyObjCInterface(name = name, generics = generics, categoryName = null, attributes = attributes) {
override val descriptor: ClassDescriptor by lazy { lazy.resolve(psi) }
override val isValid: Boolean
get() = lazy.isValid
override fun computeRealStub(): ObjCInterface = lazy.translator.translateClass(descriptor)
}
@@ -325,6 +337,9 @@ internal class ObjCExportLazyImpl(
override val descriptor: ClassDescriptor?
get() = null
override val isValid: Boolean
get() = lazy.isValid
override val psi: PsiElement?
get() = null
@@ -348,6 +363,9 @@ internal class ObjCExportLazyImpl(
override val descriptor: ClassDescriptor?
get() = null
override val isValid: Boolean
get() = lazy.isValid
override val psi: PsiElement?
get() = null
@@ -7,12 +7,15 @@ package org.jetbrains.kotlin.backend.konan.objcexport
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
abstract class Stub<out D : DeclarationDescriptor>(val name: String) {
abstract val descriptor: D?
open val psi: PsiElement?
get() = ((descriptor as? DeclarationDescriptorWithSource)?.source as? PsiSourceElement)?.psi
open val isValid: Boolean
get() = descriptor?.module?.isValid ?: true
}
abstract class ObjCTopLevel<out D : DeclarationDescriptor>(name: String) : Stub<D>(name)