diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index c5f63c7a35d..4694688f947 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -451,6 +451,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { supertype = components.typeResolver.resolveType(context.scope, superTypeQualifier, context.trace, true); } + if (classifierCandidate instanceof TypeAliasDescriptor) { + classifierCandidate = ((TypeAliasDescriptor) classifierCandidate).getClassDescriptor(); + } + if (supertype != null) { if (supertypes.contains(supertype)) { result = supertype; diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.kt b/compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.kt new file mode 100644 index 00000000000..8f0ab7e25ab --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.kt @@ -0,0 +1,39 @@ +open class Base { + open fun foo() {} +} + +open class GenericBase { + open fun foo() {} +} + +class Unrelated { + fun foo() {} +} + +typealias B = Base +typealias U = Unrelated +typealias GB = GenericBase + +class TestSuperForBase : B() { + typealias MyBase = B + + override fun foo() { + super.foo() + super.foo() + super.foo() + super<U>.foo() + } +} + +class TestSuperForGenericBase : GB() { + typealias MyBase = GB + typealias MyBaseInt = GB + + override fun foo() { + super.foo() + super.foo() + super.foo() + super.foo() // Type arguments don't matter here + super<U>.foo() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.txt b/compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.txt new file mode 100644 index 00000000000..fe224e521fd --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.txt @@ -0,0 +1,47 @@ +package + +public open class Base { + public constructor Base() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class GenericBase { + public constructor GenericBase() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class TestSuperForBase : B /* = Base */ { + public constructor TestSuperForBase() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public typealias MyBase = B +} + +public final class TestSuperForGenericBase : GB /* = GenericBase */ { + public constructor TestSuperForGenericBase() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public typealias MyBase /*captured type parameters: /*0*/ T*/ = GB + public typealias MyBaseInt /*captured type parameters: /*0*/ T*/ = GB +} + +public final class Unrelated { + public constructor Unrelated() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} +public typealias B = Base +public typealias GB = GenericBase +public typealias U = Unrelated diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 18dd0a937ff..879c701869a 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -20604,6 +20604,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("typeAliasAsSuperQualifier.kt") + public void testTypeAliasAsSuperQualifier() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/typeAliasAsSuperQualifier.kt"); + doTest(fileName); + } + @TestMetadata("typeAliasConstructor.kt") public void testTypeAliasConstructor() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/typeAliasConstructor.kt");