Expose validity of objc stubs' descriptors
This commit is contained in:
committed by
SvyatoslavScherbina
parent
dcefc2cb31
commit
4b4bbdd02c
+24
-6
@@ -18,7 +18,10 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
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.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorResolver
|
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.deprecation.DeprecationResolver
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
|
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.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope
|
||||||
@@ -51,7 +54,7 @@ interface ObjCExportLazy {
|
|||||||
fun createObjCExportLazy(
|
fun createObjCExportLazy(
|
||||||
configuration: ObjCExportLazy.Configuration,
|
configuration: ObjCExportLazy.Configuration,
|
||||||
warningCollector: ObjCExportWarningCollector,
|
warningCollector: ObjCExportWarningCollector,
|
||||||
resolveSession: ResolveSession,
|
codeAnalyzer: KotlinCodeAnalyzer,
|
||||||
typeResolver: TypeResolver,
|
typeResolver: TypeResolver,
|
||||||
descriptorResolver: DescriptorResolver,
|
descriptorResolver: DescriptorResolver,
|
||||||
fileScopeProvider: FileScopeProvider,
|
fileScopeProvider: FileScopeProvider,
|
||||||
@@ -60,7 +63,7 @@ fun createObjCExportLazy(
|
|||||||
): ObjCExportLazy = ObjCExportLazyImpl(
|
): ObjCExportLazy = ObjCExportLazyImpl(
|
||||||
configuration,
|
configuration,
|
||||||
warningCollector,
|
warningCollector,
|
||||||
resolveSession,
|
codeAnalyzer,
|
||||||
typeResolver,
|
typeResolver,
|
||||||
descriptorResolver,
|
descriptorResolver,
|
||||||
fileScopeProvider,
|
fileScopeProvider,
|
||||||
@@ -71,7 +74,7 @@ fun createObjCExportLazy(
|
|||||||
internal class ObjCExportLazyImpl(
|
internal class ObjCExportLazyImpl(
|
||||||
private val configuration: ObjCExportLazy.Configuration,
|
private val configuration: ObjCExportLazy.Configuration,
|
||||||
warningCollector: ObjCExportWarningCollector,
|
warningCollector: ObjCExportWarningCollector,
|
||||||
private val resolveSession: ResolveSession,
|
private val codeAnalyzer: KotlinCodeAnalyzer,
|
||||||
private val typeResolver: TypeResolver,
|
private val typeResolver: TypeResolver,
|
||||||
private val descriptorResolver: DescriptorResolver,
|
private val descriptorResolver: DescriptorResolver,
|
||||||
private val fileScopeProvider: FileScopeProvider,
|
private val fileScopeProvider: FileScopeProvider,
|
||||||
@@ -95,6 +98,9 @@ internal class ObjCExportLazyImpl(
|
|||||||
objcGenerics = configuration.objcGenerics
|
objcGenerics = configuration.objcGenerics
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val isValid: Boolean
|
||||||
|
get() = codeAnalyzer.moduleDescriptor.isValid
|
||||||
|
|
||||||
override fun generateBase() = translator.generateBaseDeclarations()
|
override fun generateBase() = translator.generateBaseDeclarations()
|
||||||
|
|
||||||
override fun translate(file: KtFile): List<ObjCTopLevel<*>> =
|
override fun translate(file: KtFile): List<ObjCTopLevel<*>> =
|
||||||
@@ -203,7 +209,7 @@ internal class ObjCExportLazyImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun resolveDeclaration(ktDeclaration: KtDeclaration): DeclarationDescriptor =
|
private fun resolveDeclaration(ktDeclaration: KtDeclaration): DeclarationDescriptor =
|
||||||
resolveSession.resolveToDescriptor(ktDeclaration)
|
codeAnalyzer.resolveToDescriptor(ktDeclaration)
|
||||||
|
|
||||||
private fun resolve(ktClassOrObject: KtClassOrObject) =
|
private fun resolve(ktClassOrObject: KtClassOrObject) =
|
||||||
resolveDeclaration(ktClassOrObject) as ClassDescriptor
|
resolveDeclaration(ktClassOrObject) as ClassDescriptor
|
||||||
@@ -301,6 +307,9 @@ internal class ObjCExportLazyImpl(
|
|||||||
) : LazyObjCProtocol(name) {
|
) : LazyObjCProtocol(name) {
|
||||||
override val descriptor: ClassDescriptor by lazy { lazy.resolve(psi) }
|
override val descriptor: ClassDescriptor by lazy { lazy.resolve(psi) }
|
||||||
|
|
||||||
|
override val isValid: Boolean
|
||||||
|
get() = lazy.isValid
|
||||||
|
|
||||||
override fun computeRealStub(): ObjCProtocol = lazy.translator.translateInterface(descriptor)
|
override fun computeRealStub(): ObjCProtocol = lazy.translator.translateInterface(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,6 +322,9 @@ internal class ObjCExportLazyImpl(
|
|||||||
) : LazyObjCInterface(name = name, generics = generics, categoryName = null, attributes = attributes) {
|
) : LazyObjCInterface(name = name, generics = generics, categoryName = null, attributes = attributes) {
|
||||||
override val descriptor: ClassDescriptor by lazy { lazy.resolve(psi) }
|
override val descriptor: ClassDescriptor by lazy { lazy.resolve(psi) }
|
||||||
|
|
||||||
|
override val isValid: Boolean
|
||||||
|
get() = lazy.isValid
|
||||||
|
|
||||||
override fun computeRealStub(): ObjCInterface = lazy.translator.translateClass(descriptor)
|
override fun computeRealStub(): ObjCInterface = lazy.translator.translateClass(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,6 +337,9 @@ internal class ObjCExportLazyImpl(
|
|||||||
override val descriptor: ClassDescriptor?
|
override val descriptor: ClassDescriptor?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
override val isValid: Boolean
|
||||||
|
get() = lazy.isValid
|
||||||
|
|
||||||
override val psi: PsiElement?
|
override val psi: PsiElement?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
@@ -348,6 +363,9 @@ internal class ObjCExportLazyImpl(
|
|||||||
override val descriptor: ClassDescriptor?
|
override val descriptor: ClassDescriptor?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
override val isValid: Boolean
|
||||||
|
get() = lazy.isValid
|
||||||
|
|
||||||
override val psi: PsiElement?
|
override val psi: PsiElement?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
|||||||
+3
@@ -7,12 +7,15 @@ package org.jetbrains.kotlin.backend.konan.objcexport
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||||
|
|
||||||
abstract class Stub<out D : DeclarationDescriptor>(val name: String) {
|
abstract class Stub<out D : DeclarationDescriptor>(val name: String) {
|
||||||
abstract val descriptor: D?
|
abstract val descriptor: D?
|
||||||
open val psi: PsiElement?
|
open val psi: PsiElement?
|
||||||
get() = ((descriptor as? DeclarationDescriptorWithSource)?.source as? PsiSourceElement)?.psi
|
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)
|
abstract class ObjCTopLevel<out D : DeclarationDescriptor>(name: String) : Stub<D>(name)
|
||||||
|
|||||||
Reference in New Issue
Block a user