Containing declaration for TypeAliasConstructorDescriptor

is a corresponding TypeAliasDescriptor.
This commit is contained in:
Dmitry Petrov
2016-09-15 12:05:32 +03:00
committed by Dmitry Petrov
parent 1cc7f19d10
commit b31ab729de
8 changed files with 61 additions and 39 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.cfg.WhenMissingCase
import org.jetbrains.kotlin.cfg.hasUnknown
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newTable
import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newText
import org.jetbrains.kotlin.psi.KtClass
@@ -85,7 +86,9 @@ object Renderers {
val declarationKindWithSpace = when (it) {
is PackageFragmentDescriptor -> "package "
is ClassDescriptor -> "${it.renderKind()} "
is TypeAliasDescriptor -> "typealias "
is ConstructorDescriptor -> "constructor "
is TypeAliasConstructorDescriptor -> "typealias constructor "
is PropertyGetterDescriptor -> "property getter "
is PropertySetterDescriptor -> "property setter "
is FunctionDescriptor -> "function "
@@ -90,8 +90,7 @@ class OverloadChecker(val specificityComparator: TypeSpecificityComparator) {
DeclarationCategory.EXTENSION_PROPERTY
else
DeclarationCategory.TYPE_OR_VALUE
is ConstructorDescriptor,
is SimpleFunctionDescriptor ->
is FunctionDescriptor ->
DeclarationCategory.FUNCTION
is ClassifierDescriptor ->
DeclarationCategory.TYPE_OR_VALUE
@@ -41,8 +41,8 @@ class OverloadResolver(
checkOverloadsInPackages(c)
}
private fun findConstructorsInNestedClassesAndTypeAliases(c: BodiesResolveContext): MultiMap<ClassDescriptor, ConstructorDescriptor> {
val constructorsByOuterClass = MultiMap.create<ClassDescriptor, ConstructorDescriptor>()
private fun findConstructorsInNestedClassesAndTypeAliases(c: BodiesResolveContext): MultiMap<ClassDescriptor, FunctionDescriptor> {
val constructorsByOuterClass = MultiMap.create<ClassDescriptor, FunctionDescriptor>()
for (klass in c.declaredClasses.values) {
if (klass.kind.isSingleton || klass.name.isSpecial) {
@@ -83,7 +83,7 @@ class OverloadResolver(
private fun checkOverloadsInClass(
classDescriptor: ClassDescriptorWithResolutionScopes,
nestedClassConstructors: Collection<ConstructorDescriptor>
nestedClassConstructors: Collection<FunctionDescriptor>
) {
val functionsByName = MultiMap.create<Name, CallableMemberDescriptor>()
@@ -92,12 +92,7 @@ class OverloadResolver(
}
for (nestedConstructor in nestedClassConstructors) {
val name =
if (nestedConstructor is TypeAliasConstructorDescriptor)
nestedConstructor.typeAliasDescriptor.name
else
nestedConstructor.containingDeclaration.name
val name = nestedConstructor.containingDeclaration.name
functionsByName.putValue(name, nestedConstructor)
}
@@ -630,7 +630,7 @@ class CandidateResolver(
val substitutedType = typeAliasParametersSubstitutor.substitute(typeAliasConstructorDescriptor.returnType, Variance.INVARIANT)!!
val boundsSubstitutor = TypeSubstitutor.create(substitutedType)
val typeAliasDescriptor = typeAliasConstructorDescriptor.typeAliasDescriptor
val typeAliasDescriptor = typeAliasConstructorDescriptor.containingDeclaration
val unsubstitutedType = typeAliasDescriptor.expandedType
if (unsubstitutedType.isError) return