diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/moduleVisibilityUtils.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/moduleVisibilityUtils.kt
index 1d953dd44ed..99fdfe578a4 100644
--- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/moduleVisibilityUtils.kt
+++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/moduleVisibilityUtils.kt
@@ -79,14 +79,13 @@ fun isContainedByCompiledPartOfOurModule(descriptor: DeclarationDescriptor, outD
}
fun getSourceElement(descriptor: DeclarationDescriptor): SourceElement =
- if (descriptor is CallableMemberDescriptor && descriptor.source === SourceElement.NO_SOURCE) {
- descriptor.containingDeclaration.toSourceElement
- }
- else if (descriptor is DeserializedTypeAliasDescriptor) {
- descriptor.containingDeclaration.toSourceElement
- }
- else {
- descriptor.toSourceElement
+ when {
+ descriptor is CallableMemberDescriptor && descriptor.source === SourceElement.NO_SOURCE ->
+ getSourceElement(descriptor.containingDeclaration)
+ descriptor is DeserializedTypeAliasDescriptor ->
+ getSourceElement(descriptor.containingDeclaration)
+ else ->
+ descriptor.toSourceElement
}
private val DeclarationDescriptor.toSourceElement: SourceElement
diff --git a/compiler/testData/diagnostics/tests/deprecated/typealiasUsage.txt b/compiler/testData/diagnostics/tests/deprecated/typealiasUsage.txt
index 2002a92aa79..8afe0e41060 100644
--- a/compiler/testData/diagnostics/tests/deprecated/typealiasUsage.txt
+++ b/compiler/testData/diagnostics/tests/deprecated/typealiasUsage.txt
@@ -1,6 +1,6 @@
package
-public val test2: Base
+public val test2: Obsolete /* = Base */
public val test3: Base.Companion
public fun test1(/*0*/ x: Obsolete /* = Base */): Obsolete /* = Base */
public fun test1a(/*0*/ x: kotlin.collections.List): kotlin.collections.List
diff --git a/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsConstructors.txt b/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsConstructors.txt
index 75131dd8b33..2110377b938 100644
--- a/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsConstructors.txt
+++ b/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsConstructors.txt
@@ -1,7 +1,7 @@
package
public val test1: [ERROR : Type for C1_Alias()]
-public val test2: C2
+public val test2: C2_Alias /* = C2 */
@kotlin.SinceKotlin(version = "1.1") public open class C1 {
public constructor C1()
diff --git a/compiler/testData/diagnostics/tests/typealias/innerClassTypeAliasConstructor.txt b/compiler/testData/diagnostics/tests/typealias/innerClassTypeAliasConstructor.txt
index 9d60d188a64..83ec38967f1 100644
--- a/compiler/testData/diagnostics/tests/typealias/innerClassTypeAliasConstructor.txt
+++ b/compiler/testData/diagnostics/tests/typealias/innerClassTypeAliasConstructor.txt
@@ -1,6 +1,6 @@
package
-public fun test1(/*0*/ x: Outer): Outer.Inner
+public fun test1(/*0*/ x: Outer): OI /* = Outer.Inner */
public fun test2(/*0*/ x: Generic): GI /* = Generic.Inner */
public fun *0*/ T> test3(/*0*/ x: Generic): GI /* = Generic.Inner */
public fun *0*/ T> test4(/*0*/ x: Generic>): GI> /* = Generic>.Inner */
diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongClass.txt b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongClass.txt
index d62977ae320..49ad3823820 100644
--- a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongClass.txt
+++ b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongClass.txt
@@ -1,19 +1,19 @@
package
-public val test1: AbstractClass
+public val test1: Test1 /* = AbstractClass */
public val test1a: AbstractClass
-public val test2: AnnotationClass
+public val test2: Test2 /* = AnnotationClass */
public val test2a: AnnotationClass
-public val test3: EnumClass
+public val test3: Test3 /* = EnumClass */
public val test3a: EnumClass
-public val test4: SealedClass
+public val test4: Test4 /* = SealedClass */
public val test4a: SealedClass
public val test5: [ERROR : Type for Test5()]
public val test5a: [ERROR : Type for Outer.Inner()]
public val test5b: [ERROR : Type for Outer.TestInner()]
public val test5c: [ERROR : Type for Outer().TestInner()]
public val test5d: Outer.Inner
-public val test5e: Outer.Inner
+public val test5e: Test5 /* = Outer.Inner */
public abstract class AbstractClass {
public constructor AbstractClass()
diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt
index 674c26e5999..98c114782e2 100644
--- a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt
+++ b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt
@@ -4,7 +4,7 @@ public val test1: [ERROR : Type for MyAlias(1)]
public val test1a: [ERROR : Type for MyClass(1)]
public val test2: [ERROR : Type for MyAlias("")]
public val test2a: [ERROR : Type for MyClass("")]
-public val test3: MyClass
+public val test3: MyAlias /* = MyClass */
public val test3a: MyClass
public open class MyClass {
@@ -21,9 +21,9 @@ public final class MyDerived : MyClass {
public constructor MyDerived()
public final val test4: [ERROR : Type for MyAlias(1)]
public final val test4a: [ERROR : Type for MyClass(1)]
- public final val test5: MyClass
+ public final val test5: MyAlias /* = MyClass */
public final val test5a: MyClass
- public final val test6: MyClass
+ public final val test6: MyAlias /* = MyClass */
public final val test6a: MyClass
public final override /*1*/ /*fake_override*/ val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasObjectWithInvoke.txt b/compiler/testData/diagnostics/tests/typealias/typeAliasObjectWithInvoke.txt
index c159234cddc..dc71f767a36 100644
--- a/compiler/testData/diagnostics/tests/typealias/typeAliasObjectWithInvoke.txt
+++ b/compiler/testData/diagnostics/tests/typealias/typeAliasObjectWithInvoke.txt
@@ -2,9 +2,9 @@ package
public val test1: ObjectWithInvoke
public val test2: ObjectWithInvoke
-public val test3: ClassWithCompanionObjectWithInvoke
+public val test3: CWI /* = ClassWithCompanionObjectWithInvoke */
public val test4: kotlin.Any
-public val test5: ClassWithCompanionObjectWithInvoke
+public val test5: CWI /* = ClassWithCompanionObjectWithInvoke */
public val test5a: ClassWithCompanionObjectWithInvoke
public final class ClassWithCompanionObjectWithInvoke {
diff --git a/compiler/testData/ir/irText/expressions/kt16905.txt b/compiler/testData/ir/irText/expressions/kt16905.txt
index 8b296d0402c..96ee4d584c6 100644
--- a/compiler/testData/ir/irText/expressions/kt16905.txt
+++ b/compiler/testData/ir/irText/expressions/kt16905.txt
@@ -57,9 +57,8 @@ FILE /kt16905.kt
FUN FAKE_OVERRIDE public open override fun toString(): kotlin.String
$this: VALUE_PARAMETER this@Any: Any
TYPEALIAS typealias OI = Outer.Inner type=Outer.Inner
- FUN public fun test(): Outer.Inner
+ FUN public fun test(): OI /* = Outer.Inner */
BLOCK_BODY
- RETURN type=kotlin.Nothing from='test(): Outer.Inner'
+ RETURN type=kotlin.Nothing from='test(): OI /* = Outer.Inner */'
CALL 'constructor Inner()' type=Outer.Inner origin=null
$this: CALL 'constructor Outer()' type=Outer origin=null
-
diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt
index 3e8af2f299e..789c903d3dc 100644
--- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt
+++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt
@@ -185,11 +185,7 @@ class TypeAliasConstructorDescriptorImpl private constructor(
val returnType = run {
val returnTypeNoAbbreviation = substitutorForUnderlyingClass.substitute(constructor.returnType, Variance.INVARIANT)
?: return null
- val abbreviation = typeAliasDescriptor.defaultType
- if (returnTypeNoAbbreviation is SimpleType && abbreviation is SimpleType)
- returnTypeNoAbbreviation.withAbbreviation(abbreviation)
- else
- returnTypeNoAbbreviation
+ returnTypeNoAbbreviation.unwrap().lowerIfFlexible().withAbbreviation(typeAliasDescriptor.defaultType)
}
val receiverParameterType = constructor.dispatchReceiverParameter?.let { substitutorForUnderlyingClass.safeSubstitute(it.type, Variance.INVARIANT) }
diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java
index d9e707398a3..f349f6d69bc 100644
--- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java
+++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java
@@ -557,6 +557,18 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta
doTest(fileName);
}
+ @TestMetadata("internalTypealiasConstructor")
+ public void testInternalTypealiasConstructor() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/");
+ doTest(fileName);
+ }
+
+ @TestMetadata("internalTypealiasObject")
+ public void testInternalTypealiasObject() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/");
+ doTest(fileName);
+ }
+
@TestMetadata("localClassChanged")
public void testLocalClassChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/localClassChanged/");
diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java
index dd59d1607f9..2d994d90d2e 100644
--- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java
+++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java
@@ -557,6 +557,18 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
doTest(fileName);
}
+ @TestMetadata("internalTypealiasConstructor")
+ public void testInternalTypealiasConstructor() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/");
+ doTest(fileName);
+ }
+
+ @TestMetadata("internalTypealiasObject")
+ public void testInternalTypealiasObject() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/");
+ doTest(fileName);
+ }
+
@TestMetadata("localClassChanged")
public void testLocalClassChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/localClassChanged/");
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealias/TypeAlias.kt b/jps-plugin/testData/incremental/pureKotlin/internalTypealias/TypeAlias.kt
index 43ff16c5829..4e3c78d004d 100644
--- a/jps-plugin/testData/incremental/pureKotlin/internalTypealias/TypeAlias.kt
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealias/TypeAlias.kt
@@ -1,3 +1,4 @@
package foo
-internal typealias TypeAlias = Int
\ No newline at end of file
+internal typealias TypeAlias = Int
+internal typealias TypeAlias2 = TypeAlias
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealias/useTypeAlias.kt b/jps-plugin/testData/incremental/pureKotlin/internalTypealias/useTypeAlias.kt
index 2cd8e56b071..03499eba7be 100644
--- a/jps-plugin/testData/incremental/pureKotlin/internalTypealias/useTypeAlias.kt
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealias/useTypeAlias.kt
@@ -2,4 +2,8 @@ package foo
internal fun useTypeAlias(x: TypeAlias) {
x.toString()
+}
+
+internal fun useTypeAlias2(x: TypeAlias2) {
+ x.toString()
}
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/TypeAlias.kt b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/TypeAlias.kt
new file mode 100644
index 00000000000..6f139507e8f
--- /dev/null
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/TypeAlias.kt
@@ -0,0 +1,6 @@
+package test
+
+class C
+
+internal typealias CAlias = C
+internal typealias CAlias2 = CAlias
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/build.log b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/build.log
new file mode 100644
index 00000000000..5a335ab7fa8
--- /dev/null
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/build.log
@@ -0,0 +1,11 @@
+================ Step #1 =================
+
+Cleaning output files:
+ out/production/module/META-INF/module.kotlin_module
+ out/production/module/test/UseTypeAliasConstructorKt.class
+End of files
+Compiling files:
+ src/useTypeAliasConstructor.kt
+End of files
+Exit code: OK
+------------------------------------------
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/useTypeAliasConstructor.kt b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/useTypeAliasConstructor.kt
new file mode 100644
index 00000000000..7579f4a453d
--- /dev/null
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/useTypeAliasConstructor.kt
@@ -0,0 +1,4 @@
+package test
+
+val c = CAlias()
+val c2 = CAlias2()
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/useTypeAliasConstructor.kt.touch b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasConstructor/useTypeAliasConstructor.kt.touch
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/TypeAlias.kt b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/TypeAlias.kt
new file mode 100644
index 00000000000..12e479b2785
--- /dev/null
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/TypeAlias.kt
@@ -0,0 +1,8 @@
+package test
+
+class C {
+ companion object
+}
+
+internal typealias CAlias = C
+internal typealias CAlias2 = CAlias
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/build.log b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/build.log
new file mode 100644
index 00000000000..245b2ea5428
--- /dev/null
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/build.log
@@ -0,0 +1,11 @@
+================ Step #1 =================
+
+Cleaning output files:
+ out/production/module/META-INF/module.kotlin_module
+ out/production/module/test/UseTypeAliasObjectKt.class
+End of files
+Compiling files:
+ src/useTypeAliasObject.kt
+End of files
+Exit code: OK
+------------------------------------------
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/useTypeAliasObject.kt b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/useTypeAliasObject.kt
new file mode 100644
index 00000000000..93e0cb1c07d
--- /dev/null
+++ b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/useTypeAliasObject.kt
@@ -0,0 +1,4 @@
+package test
+
+val cc = CAlias
+val cc2 = CAlias2
\ No newline at end of file
diff --git a/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/useTypeAliasObject.kt.touch b/jps-plugin/testData/incremental/pureKotlin/internalTypealiasObject/useTypeAliasObject.kt.touch
new file mode 100644
index 00000000000..e69de29bb2d