Add KotlinType in WrappedClassDescriptor & WrappedTypeParameterDescriptor
This commit is contained in:
+44
-34
@@ -13,14 +13,22 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
import org.jetbrains.kotlin.ir.types.toKotlinType
|
import org.jetbrains.kotlin.ir.types.toKotlinType
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.TypeIntersectionScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
|
||||||
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
|
|
||||||
|
|
||||||
abstract class WrappedDeclarationDescriptor<T : IrDeclaration>(override val annotations: Annotations) : DeclarationDescriptor {
|
abstract class WrappedDeclarationDescriptor<T : IrDeclaration>(override val annotations: Annotations) : DeclarationDescriptor {
|
||||||
lateinit var owner: T
|
lateinit var owner: T
|
||||||
fun bind(declaration: T) { owner = declaration }
|
private var bound = false
|
||||||
|
fun bind(declaration: T) {
|
||||||
|
assert(!bound)
|
||||||
|
bound = true
|
||||||
|
owner = declaration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class WrappedCallableDescriptor<T : IrDeclaration>(
|
abstract class WrappedCallableDescriptor<T : IrDeclaration>(
|
||||||
@@ -129,37 +137,44 @@ open class WrappedTypeParameterDescriptor(
|
|||||||
|
|
||||||
override fun getUpperBounds() = owner.superTypes.map { it.toKotlinType() }
|
override fun getUpperBounds() = owner.superTypes.map { it.toKotlinType() }
|
||||||
|
|
||||||
override fun getTypeConstructor(): TypeConstructor {
|
private val _typeConstryuctor: TypeConstructor by lazy {
|
||||||
return object : TypeConstructor {
|
object : AbstractTypeConstructor(LockBasedStorageManager.NO_LOCKS) {
|
||||||
override fun getParameters(): List<TypeParameterDescriptor> {
|
override fun computeSupertypes() = upperBounds
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getSupertypes() = upperBounds
|
override val supertypeLoopChecker = SupertypeLoopChecker.EMPTY
|
||||||
|
|
||||||
|
override fun getParameters() = emptyList()
|
||||||
|
|
||||||
override fun isFinal() = false
|
override fun isFinal() = false
|
||||||
|
|
||||||
override fun isDenotable() = false
|
override fun isDenotable() = true
|
||||||
|
|
||||||
override fun getDeclarationDescriptor() = owner.descriptor
|
override fun getDeclarationDescriptor() = this@WrappedTypeParameterDescriptor
|
||||||
|
|
||||||
override fun getBuiltIns(): KotlinBuiltIns {
|
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
override fun getBuiltIns() = module.builtIns
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getTypeConstructor() = _typeConstryuctor
|
||||||
|
|
||||||
override fun getOriginal() = this
|
override fun getOriginal() = this
|
||||||
|
|
||||||
override fun getIndex() = owner.index
|
override fun getIndex() = owner.index
|
||||||
|
|
||||||
override fun isCapturedFromOuterDeclaration() = false
|
override fun isCapturedFromOuterDeclaration() = false
|
||||||
|
|
||||||
override fun getDefaultType(): SimpleType {
|
private val _defaultType: SimpleType by lazy {
|
||||||
TODO("not implemented")
|
KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope(
|
||||||
|
Annotations.EMPTY, typeConstructor, emptyList(), false,
|
||||||
|
TypeIntersectionScope.create(
|
||||||
|
"Scope for type parameter " + name.asString(),
|
||||||
|
upperBounds
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getDefaultType() = _defaultType
|
||||||
|
|
||||||
override fun getContainingDeclaration() = (owner.parent as IrDeclaration).descriptor
|
override fun getContainingDeclaration() = (owner.parent as IrDeclaration).descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>?, data: D): R =
|
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>?, data: D): R =
|
||||||
@@ -385,25 +400,15 @@ open class WrappedClassDescriptor(
|
|||||||
) : ClassDescriptor, WrappedDeclarationDescriptor<IrClass>(annotations) {
|
) : ClassDescriptor, WrappedDeclarationDescriptor<IrClass>(annotations) {
|
||||||
override fun getName() = owner.name
|
override fun getName() = owner.name
|
||||||
|
|
||||||
override fun getMemberScope(typeArguments: MutableList<out TypeProjection>): MemberScope {
|
override fun getMemberScope(typeArguments: MutableList<out TypeProjection>)= MemberScope.Empty
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getMemberScope(typeSubstitution: TypeSubstitution): MemberScope {
|
override fun getMemberScope(typeSubstitution: TypeSubstitution)= MemberScope.Empty
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getUnsubstitutedMemberScope(): MemberScope {
|
override fun getUnsubstitutedMemberScope() = MemberScope.Empty
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getUnsubstitutedInnerClassesScope(): MemberScope {
|
override fun getUnsubstitutedInnerClassesScope() = MemberScope.Empty
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getStaticScope(): MemberScope {
|
override fun getStaticScope() = MemberScope.Empty
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getSource() = sourceElement
|
override fun getSource() = sourceElement
|
||||||
|
|
||||||
@@ -411,10 +416,13 @@ open class WrappedClassDescriptor(
|
|||||||
|
|
||||||
override fun getContainingDeclaration() = (owner.parent as IrSymbolOwner).symbol.descriptor
|
override fun getContainingDeclaration() = (owner.parent as IrSymbolOwner).symbol.descriptor
|
||||||
|
|
||||||
override fun getDefaultType(): SimpleType {
|
|
||||||
TODO("not implemented")
|
private val _defaultType: SimpleType by lazy {
|
||||||
|
TypeUtils.makeUnsubstitutedType(this, unsubstitutedMemberScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getDefaultType(): SimpleType = _defaultType
|
||||||
|
|
||||||
override fun getKind() = owner.kind
|
override fun getKind() = owner.kind
|
||||||
|
|
||||||
override fun getModality() = owner.modality
|
override fun getModality() = owner.modality
|
||||||
@@ -451,10 +459,12 @@ open class WrappedClassDescriptor(
|
|||||||
|
|
||||||
override fun isActual() = false
|
override fun isActual() = false
|
||||||
|
|
||||||
override fun getTypeConstructor(): TypeConstructor {
|
private val _typeConstructor: TypeConstructor by lazy {
|
||||||
TODO("not implemented")
|
ClassTypeConstructorImpl(this, emptyList(), owner.superTypes.map { it.toKotlinType() }, LockBasedStorageManager.NO_LOCKS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getTypeConstructor(): TypeConstructor = _typeConstructor
|
||||||
|
|
||||||
override fun isInner() = owner.isInner
|
override fun isInner() = owner.isInner
|
||||||
|
|
||||||
override fun isExternal() = owner.isExternal
|
override fun isExternal() = owner.isExternal
|
||||||
|
|||||||
Reference in New Issue
Block a user