diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JavaClassOnCompanionChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JavaClassOnCompanionChecker.kt index 00d2d658176..6b833f9bb88 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JavaClassOnCompanionChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JavaClassOnCompanionChecker.kt @@ -44,7 +44,7 @@ class JavaClassOnCompanionChecker : CallChecker { val arguments = listOf(TypeProjectionImpl(containingClass.defaultType)) val expectedType = KotlinTypeFactory.simpleType(Annotations.EMPTY, javaLangClass.typeConstructor, arguments, - actualType.isMarkedNullable, javaLangClass.getMemberScope(arguments)) + actualType.isMarkedNullable) context.trace.report(ErrorsJvm.JAVA_CLASS_ON_COMPANION.on(resolvedCall.call.callElement, actualType, expectedType)) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt index b04ba936397..aa91603049d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt @@ -471,7 +471,7 @@ class TypeResolver( } return if (c.abbreviated) { - val abbreviatedType = KotlinTypeFactory.simpleType(annotations, descriptor.typeConstructor, arguments, false, MemberScope.Empty) + val abbreviatedType = KotlinTypeFactory.simpleType(annotations, descriptor.typeConstructor, arguments, false) type(abbreviatedType) } else { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt index 44cb5a79c9e..fdf5f7d574f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt @@ -220,7 +220,7 @@ class DoubleColonExpressionResolver( val arguments = descriptor.typeConstructor.parameters.map(TypeUtils::makeStarProjection) KotlinTypeFactory.simpleType( Annotations.EMPTY, descriptor.typeConstructor, arguments, - possiblyBareType.isNullable || doubleColonExpression.hasQuestionMarks, descriptor.getMemberScope(arguments) + possiblyBareType.isNullable || doubleColonExpression.hasQuestionMarks ) } else { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt index 79ff6dd81d7..48eb85525aa 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt @@ -114,9 +114,8 @@ class JavaTypeResolver( val constructor = computeTypeConstructor(javaType, attr) ?: return null val arguments = computeArguments(javaType, attr, constructor) val isNullable = isNullable(javaType, attr) - val memberScope = AbstractLazyType.computeMemberScope(constructor, arguments) - return KotlinTypeFactory.simpleType(annotations, constructor, arguments, isNullable, memberScope) + return KotlinTypeFactory.simpleType(annotations, constructor, arguments, isNullable) } private fun computeTypeConstructor(javaType: JavaClassifierType, attr: JavaTypeAttributes): TypeConstructor? { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt index 3de7f5b4af7..52856ebac7f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt @@ -121,8 +121,7 @@ internal object RawSubstitution : TypeSubstitution() { TypeProjectionImpl(componentTypeProjection.projectionKind, eraseType(componentTypeProjection.type)) ) return KotlinTypeFactory.simpleType( - type.annotations, type.constructor, arguments, type.isMarkedNullable, - declaration.getMemberScope(arguments) + type.annotations, type.constructor, arguments, type.isMarkedNullable ) to false } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt index 11bad45b271..a63fa53e5a2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhancement/typeEnhancement.kt @@ -129,16 +129,11 @@ private fun SimpleType.enhanceInflexible(qualifiers: (Int) -> JavaTypeQualifiers enhancedNullabilityAnnotations ).filterNotNull().compositeAnnotationsOrSingle() - val newSubstitution = TypeConstructorSubstitution.create(typeConstructor, enhancedArguments) - val enhancedType = KotlinTypeFactory.simpleType( newAnnotations, typeConstructor, enhancedArguments, - enhancedNullability, - if (enhancedClassifier is ClassDescriptor) - enhancedClassifier.getMemberScope(newSubstitution) - else enhancedClassifier.defaultType.memberScope + enhancedNullability ) val result = if (effectiveQualifiers.isNotNullTypeParameter) NotNullTypeParameter(enhancedType) else enhancedType diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt index 05026b795fe..5f83a238060 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt @@ -17,10 +17,21 @@ package org.jetbrains.kotlin.types import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.resolve.scopes.MemberScope object KotlinTypeFactory { + private fun computeMemberScope(constructor: TypeConstructor, arguments: List): MemberScope { + val descriptor = constructor.declarationDescriptor + return when (descriptor) { + is TypeParameterDescriptor -> descriptor.getDefaultType().memberScope + is ClassDescriptor -> descriptor.getMemberScope(TypeConstructorSubstitution.create(constructor, arguments)) + is TypeAliasDescriptor -> ErrorUtils.createErrorScope("Scope for abbreviation: ${descriptor.name}", true) + else -> throw IllegalStateException("Unsupported classifier: $descriptor for constructor: $constructor") + } + } @JvmStatic fun simpleType( @@ -28,7 +39,7 @@ object KotlinTypeFactory { constructor: TypeConstructor, arguments: List, nullable: Boolean, - memberScope: MemberScope + memberScope: MemberScope = computeMemberScope(constructor, arguments) ): SimpleType = SimpleTypeImpl(annotations, constructor, arguments, nullable, memberScope) @JvmStatic diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitution.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitution.kt index 8cbb1b348b7..ad7ebd57f02 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitution.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitution.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.types -import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations @@ -145,20 +144,11 @@ fun SimpleType.replace( ) } - val newSubstitution = TypeConstructorSubstitution.create(constructor, newArguments) - - val declarationDescriptor = constructor.declarationDescriptor - val newScope = - if (declarationDescriptor is ClassDescriptor) - declarationDescriptor.getMemberScope(newSubstitution) - else ErrorUtils.createErrorScope("Unexpected declaration descriptor for type constructor: $constructor") - return KotlinTypeFactory.simpleType( newAnnotations, constructor, newArguments, - isMarkedNullable, - newScope + isMarkedNullable ) }