KT-11588 Type aliases

Type alias companion object
This commit is contained in:
Dmitry Petrov
2016-05-23 14:41:07 +03:00
parent 8c2e80f9eb
commit 4a9507b3ab
7 changed files with 159 additions and 3 deletions
@@ -638,6 +638,7 @@ class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageValidator
is PackageViewDescriptor -> PackageQualifier(referenceExpression, descriptor)
is ClassDescriptor -> ClassQualifier(referenceExpression, descriptor)
is TypeParameterDescriptor -> TypeParameterQualifier(referenceExpression, descriptor)
is TypeAliasDescriptor -> ClassQualifier(referenceExpression, descriptor.classDescriptor ?: return null)
else -> return null
}
@@ -243,9 +243,16 @@ private fun ResolutionScope.getContributedVariablesAndObjects(name: Name, locati
private fun getFakeDescriptorForObject(classifier: ClassifierDescriptor?): FakeCallableDescriptorForObject? {
if (classifier !is ClassDescriptor || !classifier.hasClassValueDescriptor) return null // todo
return FakeCallableDescriptorForObject(classifier)
return when (classifier) {
is TypeAliasDescriptor ->
getFakeDescriptorForObject(classifier.classDescriptor)
is ClassDescriptor ->
if (classifier.hasClassValueDescriptor)
FakeCallableDescriptorForObject(classifier)
else
null
else -> null
}
}
private fun getClassWithConstructors(classifier: ClassifierDescriptor?): ClassDescriptor? {
@@ -0,0 +1,25 @@
object AnObject {
val ok = "OK"
fun foo() = "OK"
}
typealias GenericTestObject<T> = AnObject
val test11: AnObject = GenericTestObject
val test12: GenericTestObject<*> = GenericTestObject
val test13: String = GenericTestObject.ok
val test14: String = GenericTestObject.foo()
class GenericClassWithCompanion<T> {
companion object {
val ok = "OK"
fun foo() = "OK"
}
}
typealias TestGCWC<T> = GenericClassWithCompanion<T>
val test25: GenericClassWithCompanion.Companion = TestGCWC
val test26 = TestGCWC
val test27: String = TestGCWC.ok
val test28: String = TestGCWC.foo()
@@ -0,0 +1,37 @@
package
public typealias GenericTestObject</*0*/ T> = AnObject
public typealias TestGCWC</*0*/ T> = GenericClassWithCompanion<T>
public val test11: AnObject
public val test12: GenericTestObject<*> [= AnObject]
public val test13: kotlin.String = "OK"
public val test14: kotlin.String
public val test25: GenericClassWithCompanion.Companion
public val test26: GenericClassWithCompanion.Companion
public val test27: kotlin.String = "OK"
public val test28: kotlin.String
public object AnObject {
private constructor AnObject()
public final val ok: kotlin.String = "OK"
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class GenericClassWithCompanion</*0*/ T> {
public constructor GenericClassWithCompanion</*0*/ T>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
public final val ok: kotlin.String = "OK"
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -0,0 +1,32 @@
object AnObject {
val ok = "OK"
fun foo() = "OK"
}
typealias TestObject = AnObject
val test11: AnObject = TestObject
val test12: TestObject = TestObject
val test13: String = TestObject.ok
val test14: String = TestObject.foo()
typealias TestObject2 = TestObject
val test21: AnObject = TestObject2
val test22: TestObject2 = TestObject2
val test23: String = TestObject2.ok
val test24: String = TestObject2.foo()
class ClassWithCompanion {
companion object {
val ok = "OK"
fun foo() = "OK"
}
}
typealias TestCWC = ClassWithCompanion
val test35: ClassWithCompanion.Companion = TestCWC
val test36 = TestCWC
val test37: String = TestCWC.ok
val test38: String = TestCWC.foo()
@@ -0,0 +1,42 @@
package
public typealias TestCWC = ClassWithCompanion
public typealias TestObject = AnObject
public typealias TestObject2 = TestObject
public val test11: AnObject
public val test12: TestObject [= AnObject]
public val test13: kotlin.String = "OK"
public val test14: kotlin.String
public val test21: AnObject
public val test22: TestObject2 [= AnObject]
public val test23: kotlin.String = "OK"
public val test24: kotlin.String
public val test35: ClassWithCompanion.Companion
public val test36: ClassWithCompanion.Companion
public val test37: kotlin.String = "OK"
public val test38: kotlin.String
public object AnObject {
private constructor AnObject()
public final val ok: kotlin.String = "OK"
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class ClassWithCompanion {
public constructor ClassWithCompanion()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
public final val ok: kotlin.String = "OK"
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -19131,6 +19131,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/typealias"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("genericTypeAliasObject.kt")
public void testGenericTypeAliasObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/genericTypeAliasObject.kt");
doTest(fileName);
}
@TestMetadata("inSupertypesList.kt")
public void testInSupertypesList() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/inSupertypesList.kt");
@@ -19166,6 +19172,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/substitutionVariance.kt");
doTest(fileName);
}
@TestMetadata("typeAliasObject.kt")
public void testTypeAliasObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/typeAliasObject.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/diagnostics/tests/unit")