Minor: reformat code

This commit is contained in:
Dmitry Petrov
2018-03-16 15:22:20 +03:00
parent 26dc5840f1
commit bfcf1584a2
2 changed files with 108 additions and 105 deletions
@@ -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()}]"
} }
@@ -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