Minor: reformat code
This commit is contained in:
+25
-25
@@ -26,13 +26,13 @@ import org.jetbrains.kotlin.storage.StorageManager
|
|||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
|
|
||||||
abstract class AbstractTypeAliasDescriptor(
|
abstract class AbstractTypeAliasDescriptor(
|
||||||
containingDeclaration: DeclarationDescriptor,
|
containingDeclaration: DeclarationDescriptor,
|
||||||
annotations: Annotations,
|
annotations: Annotations,
|
||||||
name: Name,
|
name: Name,
|
||||||
sourceElement: SourceElement,
|
sourceElement: SourceElement,
|
||||||
private val visibilityImpl: Visibility
|
private val visibilityImpl: Visibility
|
||||||
) : DeclarationDescriptorNonRootImpl(containingDeclaration, annotations, name, sourceElement),
|
) : DeclarationDescriptorNonRootImpl(containingDeclaration, annotations, name, sourceElement),
|
||||||
TypeAliasDescriptor {
|
TypeAliasDescriptor {
|
||||||
|
|
||||||
protected abstract val storageManager: StorageManager
|
protected abstract val storageManager: StorageManager
|
||||||
|
|
||||||
@@ -44,19 +44,19 @@ abstract class AbstractTypeAliasDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
|
||||||
visitor.visitTypeAliasDescriptor(this, data)
|
visitor.visitTypeAliasDescriptor(this, data)
|
||||||
|
|
||||||
override fun isInner(): Boolean =
|
override fun isInner(): Boolean =
|
||||||
// NB: it's ok to use underlyingType here, since referenced inner type aliases also capture type parameters.
|
// NB: it's ok to use underlyingType here, since referenced inner type aliases also capture type parameters.
|
||||||
// Using expandedType looks "proper", but in fact will cause a recursion in expandedType resolution,
|
// Using expandedType looks "proper", but in fact will cause a recursion in expandedType resolution,
|
||||||
// which will silently produce wrong result.
|
// which will silently produce wrong result.
|
||||||
TypeUtils.contains(underlyingType) { type ->
|
TypeUtils.contains(underlyingType) { type ->
|
||||||
!type.isError && run {
|
!type.isError && run {
|
||||||
val constructorDescriptor = type.constructor.declarationDescriptor
|
val constructorDescriptor = type.constructor.declarationDescriptor
|
||||||
constructorDescriptor is TypeParameterDescriptor &&
|
constructorDescriptor is TypeParameterDescriptor &&
|
||||||
constructorDescriptor.containingDeclaration != this@AbstractTypeAliasDescriptor
|
constructorDescriptor.containingDeclaration != this@AbstractTypeAliasDescriptor
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun getTypeAliasConstructors(): Collection<TypeAliasConstructorDescriptor> {
|
fun getTypeAliasConstructors(): Collection<TypeAliasConstructorDescriptor> {
|
||||||
@@ -68,7 +68,7 @@ abstract class AbstractTypeAliasDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getDeclaredTypeParameters(): List<TypeParameterDescriptor> =
|
override fun getDeclaredTypeParameters(): List<TypeParameterDescriptor> =
|
||||||
declaredTypeParametersImpl
|
declaredTypeParametersImpl
|
||||||
|
|
||||||
override fun getModality() = Modality.FINAL
|
override fun getModality() = Modality.FINAL
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ abstract class AbstractTypeAliasDescriptor(
|
|||||||
override fun isExternal() = false
|
override fun isExternal() = false
|
||||||
|
|
||||||
override fun getTypeConstructor(): TypeConstructor =
|
override fun getTypeConstructor(): TypeConstructor =
|
||||||
typeConstructor
|
typeConstructor
|
||||||
|
|
||||||
override fun toString(): String = "typealias ${name.asString()}"
|
override fun toString(): String = "typealias ${name.asString()}"
|
||||||
|
|
||||||
@@ -90,26 +90,26 @@ abstract class AbstractTypeAliasDescriptor(
|
|||||||
protected abstract fun getTypeConstructorTypeParameters(): List<TypeParameterDescriptor>
|
protected abstract fun getTypeConstructorTypeParameters(): List<TypeParameterDescriptor>
|
||||||
|
|
||||||
protected fun computeDefaultType(): SimpleType =
|
protected fun computeDefaultType(): SimpleType =
|
||||||
TypeUtils.makeUnsubstitutedType(this, classDescriptor?.unsubstitutedMemberScope ?: MemberScope.Empty)
|
TypeUtils.makeUnsubstitutedType(this, classDescriptor?.unsubstitutedMemberScope ?: MemberScope.Empty)
|
||||||
|
|
||||||
private val typeConstructor = object : TypeConstructor {
|
private val typeConstructor = object : TypeConstructor {
|
||||||
override fun getDeclarationDescriptor(): TypeAliasDescriptor =
|
override fun getDeclarationDescriptor(): TypeAliasDescriptor =
|
||||||
this@AbstractTypeAliasDescriptor
|
this@AbstractTypeAliasDescriptor
|
||||||
|
|
||||||
override fun getParameters(): List<TypeParameterDescriptor> =
|
override fun getParameters(): List<TypeParameterDescriptor> =
|
||||||
getTypeConstructorTypeParameters()
|
getTypeConstructorTypeParameters()
|
||||||
|
|
||||||
override fun getSupertypes(): Collection<KotlinType> =
|
override fun getSupertypes(): Collection<KotlinType> =
|
||||||
declarationDescriptor.underlyingType.constructor.supertypes
|
declarationDescriptor.underlyingType.constructor.supertypes
|
||||||
|
|
||||||
override fun isFinal(): Boolean =
|
override fun isFinal(): Boolean =
|
||||||
declarationDescriptor.underlyingType.constructor.isFinal
|
declarationDescriptor.underlyingType.constructor.isFinal
|
||||||
|
|
||||||
override fun isDenotable(): Boolean =
|
override fun isDenotable(): Boolean =
|
||||||
true
|
true
|
||||||
|
|
||||||
override fun getBuiltIns(): KotlinBuiltIns =
|
override fun getBuiltIns(): KotlinBuiltIns =
|
||||||
declarationDescriptor.builtIns
|
declarationDescriptor.builtIns
|
||||||
|
|
||||||
override fun toString(): String = "[typealias ${declarationDescriptor.name.asString()}]"
|
override fun toString(): String = "[typealias ${declarationDescriptor.name.asString()}]"
|
||||||
}
|
}
|
||||||
|
|||||||
+83
-80
@@ -38,25 +38,25 @@ interface TypeAliasConstructorDescriptor : ConstructorDescriptor, DescriptorDeri
|
|||||||
val withDispatchReceiver: TypeAliasConstructorDescriptor?
|
val withDispatchReceiver: TypeAliasConstructorDescriptor?
|
||||||
|
|
||||||
override fun copy(
|
override fun copy(
|
||||||
newOwner: DeclarationDescriptor,
|
newOwner: DeclarationDescriptor,
|
||||||
modality: Modality,
|
modality: Modality,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
kind: Kind,
|
kind: Kind,
|
||||||
copyOverrides: Boolean
|
copyOverrides: Boolean
|
||||||
): TypeAliasConstructorDescriptor
|
): TypeAliasConstructorDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
class TypeAliasConstructorDescriptorImpl private constructor(
|
class TypeAliasConstructorDescriptorImpl private constructor(
|
||||||
val storageManager: StorageManager,
|
val storageManager: StorageManager,
|
||||||
override val typeAliasDescriptor: TypeAliasDescriptor,
|
override val typeAliasDescriptor: TypeAliasDescriptor,
|
||||||
underlyingConstructorDescriptor: ClassConstructorDescriptor,
|
underlyingConstructorDescriptor: ClassConstructorDescriptor,
|
||||||
original: TypeAliasConstructorDescriptor?,
|
original: TypeAliasConstructorDescriptor?,
|
||||||
annotations: Annotations,
|
annotations: Annotations,
|
||||||
kind: Kind,
|
kind: Kind,
|
||||||
source: SourceElement
|
source: SourceElement
|
||||||
) : TypeAliasConstructorDescriptor,
|
) : TypeAliasConstructorDescriptor,
|
||||||
FunctionDescriptorImpl(typeAliasDescriptor, original, annotations, Name.special("<init>"), kind, source)
|
FunctionDescriptorImpl(typeAliasDescriptor, original, annotations, Name.special("<init>"), kind, source) {
|
||||||
{
|
|
||||||
init {
|
init {
|
||||||
isActual = typeAliasDescriptor.isActual
|
isActual = typeAliasDescriptor.isActual
|
||||||
}
|
}
|
||||||
@@ -67,46 +67,46 @@ class TypeAliasConstructorDescriptorImpl private constructor(
|
|||||||
// a dispatch receiver
|
// a dispatch receiver
|
||||||
override val withDispatchReceiver: TypeAliasConstructorDescriptor? by storageManager.createNullableLazyValue {
|
override val withDispatchReceiver: TypeAliasConstructorDescriptor? by storageManager.createNullableLazyValue {
|
||||||
TypeAliasConstructorDescriptorImpl(
|
TypeAliasConstructorDescriptorImpl(
|
||||||
storageManager,
|
storageManager,
|
||||||
typeAliasDescriptor,
|
typeAliasDescriptor,
|
||||||
underlyingConstructorDescriptor,
|
underlyingConstructorDescriptor,
|
||||||
this,
|
this,
|
||||||
underlyingConstructorDescriptor.annotations,
|
underlyingConstructorDescriptor.annotations,
|
||||||
underlyingConstructorDescriptor.kind,
|
underlyingConstructorDescriptor.kind,
|
||||||
typeAliasDescriptor.source
|
typeAliasDescriptor.source
|
||||||
).also { typeAliasConstructor ->
|
).also { typeAliasConstructor ->
|
||||||
val substitutorForUnderlyingClass = typeAliasDescriptor.getTypeSubstitutorForUnderlyingClass() ?:
|
val substitutorForUnderlyingClass =
|
||||||
return@createNullableLazyValue null
|
typeAliasDescriptor.getTypeSubstitutorForUnderlyingClass() ?: return@createNullableLazyValue null
|
||||||
|
|
||||||
typeAliasConstructor.initialize(
|
typeAliasConstructor.initialize(
|
||||||
null,
|
null,
|
||||||
underlyingConstructorDescriptor.dispatchReceiverParameter?.substitute(substitutorForUnderlyingClass),
|
underlyingConstructorDescriptor.dispatchReceiverParameter?.substitute(substitutorForUnderlyingClass),
|
||||||
typeAliasDescriptor.declaredTypeParameters,
|
typeAliasDescriptor.declaredTypeParameters,
|
||||||
valueParameters,
|
valueParameters,
|
||||||
returnType,
|
returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
typeAliasDescriptor.visibility
|
typeAliasDescriptor.visibility
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override var underlyingConstructorDescriptor: ClassConstructorDescriptor = underlyingConstructorDescriptor
|
override var underlyingConstructorDescriptor: ClassConstructorDescriptor = underlyingConstructorDescriptor
|
||||||
private set
|
private set
|
||||||
|
|
||||||
override fun isPrimary(): Boolean =
|
override fun isPrimary(): Boolean =
|
||||||
underlyingConstructorDescriptor.isPrimary
|
underlyingConstructorDescriptor.isPrimary
|
||||||
|
|
||||||
override fun getContainingDeclaration(): TypeAliasDescriptor =
|
override fun getContainingDeclaration(): TypeAliasDescriptor =
|
||||||
typeAliasDescriptor
|
typeAliasDescriptor
|
||||||
|
|
||||||
override fun getConstructedClass(): ClassDescriptor =
|
override fun getConstructedClass(): ClassDescriptor =
|
||||||
underlyingConstructorDescriptor.constructedClass
|
underlyingConstructorDescriptor.constructedClass
|
||||||
|
|
||||||
override fun getReturnType(): KotlinType =
|
override fun getReturnType(): KotlinType =
|
||||||
super.getReturnType()!!
|
super.getReturnType()!!
|
||||||
|
|
||||||
override fun getOriginal(): TypeAliasConstructorDescriptor =
|
override fun getOriginal(): TypeAliasConstructorDescriptor =
|
||||||
super.getOriginal() as TypeAliasConstructorDescriptor
|
super.getOriginal() as TypeAliasConstructorDescriptor
|
||||||
|
|
||||||
override fun substitute(substitutor: TypeSubstitutor): TypeAliasConstructorDescriptor? {
|
override fun substitute(substitutor: TypeSubstitutor): TypeAliasConstructorDescriptor? {
|
||||||
// class C<T>(val x: T)
|
// class C<T>(val x: T)
|
||||||
@@ -121,45 +121,46 @@ class TypeAliasConstructorDescriptorImpl private constructor(
|
|||||||
val substitutedTypeAliasConstructor = super.substitute(substitutor) as TypeAliasConstructorDescriptorImpl
|
val substitutedTypeAliasConstructor = super.substitute(substitutor) as TypeAliasConstructorDescriptorImpl
|
||||||
val underlyingConstructorSubstitutor = TypeSubstitutor.create(substitutedTypeAliasConstructor.returnType)
|
val underlyingConstructorSubstitutor = TypeSubstitutor.create(substitutedTypeAliasConstructor.returnType)
|
||||||
val substitutedUnderlyingConstructor = underlyingConstructorDescriptor.original.substitute(underlyingConstructorSubstitutor)
|
val substitutedUnderlyingConstructor = underlyingConstructorDescriptor.original.substitute(underlyingConstructorSubstitutor)
|
||||||
?: return null
|
?: return null
|
||||||
substitutedTypeAliasConstructor.underlyingConstructorDescriptor = substitutedUnderlyingConstructor
|
substitutedTypeAliasConstructor.underlyingConstructorDescriptor = substitutedUnderlyingConstructor
|
||||||
return substitutedTypeAliasConstructor
|
return substitutedTypeAliasConstructor
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copy(
|
override fun copy(
|
||||||
newOwner: DeclarationDescriptor,
|
newOwner: DeclarationDescriptor,
|
||||||
modality: Modality,
|
modality: Modality,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
kind: Kind,
|
kind: Kind,
|
||||||
copyOverrides: Boolean
|
copyOverrides: Boolean
|
||||||
): TypeAliasConstructorDescriptor =
|
): TypeAliasConstructorDescriptor =
|
||||||
newCopyBuilder()
|
newCopyBuilder()
|
||||||
.setOwner(newOwner)
|
.setOwner(newOwner)
|
||||||
.setModality(modality)
|
.setModality(modality)
|
||||||
.setVisibility(visibility)
|
.setVisibility(visibility)
|
||||||
.setKind(kind)
|
.setKind(kind)
|
||||||
.setCopyOverrides(copyOverrides)
|
.setCopyOverrides(copyOverrides)
|
||||||
.build() as TypeAliasConstructorDescriptor
|
.build() as TypeAliasConstructorDescriptor
|
||||||
|
|
||||||
override fun createSubstitutedCopy(
|
override fun createSubstitutedCopy(
|
||||||
newOwner: DeclarationDescriptor,
|
newOwner: DeclarationDescriptor,
|
||||||
original: FunctionDescriptor?,
|
original: FunctionDescriptor?,
|
||||||
kind: Kind,
|
kind: Kind,
|
||||||
newName: Name?,
|
newName: Name?,
|
||||||
annotations: Annotations,
|
annotations: Annotations,
|
||||||
source: SourceElement
|
source: SourceElement
|
||||||
): TypeAliasConstructorDescriptorImpl {
|
): TypeAliasConstructorDescriptorImpl {
|
||||||
assert(kind == Kind.DECLARATION || kind == Kind.SYNTHESIZED) {
|
assert(kind == Kind.DECLARATION || kind == Kind.SYNTHESIZED) {
|
||||||
"Creating a type alias constructor that is not a declaration: \ncopy from: ${this}\nnewOwner: $newOwner\nkind: $kind"
|
"Creating a type alias constructor that is not a declaration: \ncopy from: ${this}\nnewOwner: $newOwner\nkind: $kind"
|
||||||
}
|
}
|
||||||
assert(newName == null) { "Renaming type alias constructor: $this" }
|
assert(newName == null) { "Renaming type alias constructor: $this" }
|
||||||
return TypeAliasConstructorDescriptorImpl(
|
return TypeAliasConstructorDescriptorImpl(
|
||||||
storageManager,
|
storageManager,
|
||||||
typeAliasDescriptor,
|
typeAliasDescriptor,
|
||||||
underlyingConstructorDescriptor,
|
underlyingConstructorDescriptor,
|
||||||
this,
|
this,
|
||||||
annotations,
|
annotations,
|
||||||
Kind.DECLARATION, source)
|
Kind.DECLARATION, source
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -169,39 +170,41 @@ class TypeAliasConstructorDescriptorImpl private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun createIfAvailable(
|
fun createIfAvailable(
|
||||||
storageManager: StorageManager,
|
storageManager: StorageManager,
|
||||||
typeAliasDescriptor: TypeAliasDescriptor,
|
typeAliasDescriptor: TypeAliasDescriptor,
|
||||||
constructor: ClassConstructorDescriptor
|
constructor: ClassConstructorDescriptor
|
||||||
): TypeAliasConstructorDescriptor? {
|
): TypeAliasConstructorDescriptor? {
|
||||||
val substitutorForUnderlyingClass = typeAliasDescriptor.getTypeSubstitutorForUnderlyingClass() ?: return null
|
val substitutorForUnderlyingClass = typeAliasDescriptor.getTypeSubstitutorForUnderlyingClass() ?: return null
|
||||||
|
|
||||||
val typeAliasConstructor =
|
val typeAliasConstructor =
|
||||||
TypeAliasConstructorDescriptorImpl(
|
TypeAliasConstructorDescriptorImpl(
|
||||||
storageManager, typeAliasDescriptor, constructor, null, constructor.annotations,
|
storageManager, typeAliasDescriptor, constructor, null, constructor.annotations,
|
||||||
constructor.kind, typeAliasDescriptor.source)
|
constructor.kind, typeAliasDescriptor.source
|
||||||
|
)
|
||||||
|
|
||||||
val valueParameters =
|
val valueParameters =
|
||||||
FunctionDescriptorImpl.getSubstitutedValueParameters(
|
FunctionDescriptorImpl.getSubstitutedValueParameters(
|
||||||
typeAliasConstructor, constructor.valueParameters, substitutorForUnderlyingClass, false, false,
|
typeAliasConstructor, constructor.valueParameters, substitutorForUnderlyingClass, false, false,
|
||||||
null
|
null
|
||||||
) ?: return null
|
) ?: return null
|
||||||
|
|
||||||
val returnType = run {
|
val returnType = run {
|
||||||
val returnTypeNoAbbreviation = substitutorForUnderlyingClass.substitute(constructor.returnType, Variance.INVARIANT)
|
val returnTypeNoAbbreviation = substitutorForUnderlyingClass.substitute(constructor.returnType, Variance.INVARIANT)
|
||||||
?: return null
|
?: return null
|
||||||
returnTypeNoAbbreviation.unwrap().lowerIfFlexible().withAbbreviation(typeAliasDescriptor.defaultType)
|
returnTypeNoAbbreviation.unwrap().lowerIfFlexible().withAbbreviation(typeAliasDescriptor.defaultType)
|
||||||
}
|
}
|
||||||
|
|
||||||
val receiverParameterType = constructor.dispatchReceiverParameter?.let { substitutorForUnderlyingClass.safeSubstitute(it.type, Variance.INVARIANT) }
|
val receiverParameterType =
|
||||||
|
constructor.dispatchReceiverParameter?.let { substitutorForUnderlyingClass.safeSubstitute(it.type, Variance.INVARIANT) }
|
||||||
|
|
||||||
typeAliasConstructor.initialize(
|
typeAliasConstructor.initialize(
|
||||||
receiverParameterType,
|
receiverParameterType,
|
||||||
null,
|
null,
|
||||||
typeAliasDescriptor.declaredTypeParameters,
|
typeAliasDescriptor.declaredTypeParameters,
|
||||||
valueParameters,
|
valueParameters,
|
||||||
returnType,
|
returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
typeAliasDescriptor.visibility
|
typeAliasDescriptor.visibility
|
||||||
)
|
)
|
||||||
|
|
||||||
return typeAliasConstructor
|
return typeAliasConstructor
|
||||||
|
|||||||
Reference in New Issue
Block a user