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 test3(/*0*/ x: Generic): GI /* = Generic.Inner */ public fun 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