FIR: add implicit primary constructors, add delegated types to them

So #KT-24088 In Progress
This commit is contained in:
Mikhail Glukhikh
2018-04-13 11:15:34 +03:00
parent 1c6490a1be
commit c06b0efdfa
50 changed files with 308 additions and 66 deletions
+4
View File
@@ -1,5 +1,9 @@
FILE: F.kt
public? open class A {
public? constructor(): super<kotlin.Any>()
}
public? final class B : A {
public? constructor(): super<kotlin.Any>()
}
@@ -1,12 +1,20 @@
FILE: NestedOfAliasedType.kt
public? abstract class A {
public? constructor(): super<kotlin.Any>()
public? abstract class Nested {
public? constructor(): super<kotlin.Any>()
}
}
public? final typealias TA = A
public? final class B : TA {
public? constructor(): super<TA>()
public? final class NestedInB : Nested {
public? constructor(): super<Nested>()
}
}
@@ -1,14 +1,24 @@
FILE: NestedSuperType.kt
public? abstract class My {
public? constructor(): super<kotlin.Any>()
public? abstract class NestedOne : My {
public? constructor(): super<My>()
public? abstract class NestedTwo : NestedOne {
public? constructor(): super<NestedOne>()
}
}
}
public? final class Your : My {
public? constructor(): super<My>()
public? final class NestedThree : NestedOne {
public? constructor(): super<NestedOne>()
}
}
@@ -1,6 +1,10 @@
FILE: complexTypes.kt
<T, out S> public? final class C {
public? constructor(): super<kotlin.Any>()
<R, in P> public? final inner class D {
public? constructor(): super<kotlin.Any>()
}
}
@@ -1,13 +1,13 @@
FILE: derivedClass.kt
<T> public? open class Base {
public? constructor(x: T)
public? constructor(x: T): super<kotlin.Any>()
public? final? property x(val): T
public? get(): T
}
<T : Any> public? final class Derived : Base<T> {
public? constructor(x: T): super()
public? constructor(x: T): super<Base<T>>()
}
<T : Any> public? final? function create(x: T): Derived<T> {
+17 -1
View File
@@ -1,17 +1,25 @@
FILE: enums.kt
public? final enum class Order {
public? constructor(): super<kotlin.Enum>()
public? final enum entry FIRST {
public? constructor(): super<kotlin.Any>()
}
public? final enum entry SECOND {
public? constructor(): super<kotlin.Any>()
}
public? final enum entry THIRD {
public? constructor(): super<kotlin.Any>()
}
}
public? final enum class Planet {
public? constructor(m: Double, r: Double)
public? constructor(m: Double, r: Double): super<kotlin.Enum>()
public? final? property m(val): Double
public? get(): Double
@@ -20,18 +28,24 @@ FILE: enums.kt
public? get(): Double
public? final enum entry MERCURY : Planet {
public? constructor(): super<Planet>()
public? open? override function sayHello(): kotlin.Unit {
}
}
public? final enum entry VENERA : Planet {
public? constructor(): super<Planet>()
public? open? override function sayHello(): kotlin.Unit {
}
}
public? final enum entry EARTH : Planet {
public? constructor(): super<Planet>()
public? open? override function sayHello(): kotlin.Unit {
}
@@ -43,6 +57,8 @@ FILE: enums.kt
public? abstract function sayHello(): kotlin.Unit
public? final companion object Companion {
public? constructor(): super<kotlin.Any>()
public? final? const property G(val): <implicit> = STUB
public? get(): <implicit>
+9 -1
View File
@@ -2,16 +2,22 @@ FILE: enums2.kt
public? abstract interface Some {
}
public? final object O1 : Some {
public? constructor(): super<kotlin.Any>()
}
public? final object O2 : Some {
public? constructor(): super<kotlin.Any>()
}
public? final enum class SomeEnum {
public? constructor(x: Some)
public? constructor(x: Some): super<kotlin.Enum>()
public? final? property x(val): Some
public? get(): Some
public? final enum entry FIRST : SomeEnum {
public? constructor(): super<SomeEnum>()
public? open? override function check(y: Some): Boolean {
STUB
}
@@ -19,6 +25,8 @@ FILE: enums2.kt
}
public? final enum entry SECOND : SomeEnum {
public? constructor(): super<SomeEnum>()
public? open? override function check(y: Some): Boolean {
STUB
}
@@ -1,10 +1,14 @@
FILE: expectActual.kt
public? final expect class MyClass {
public? constructor(): super<kotlin.Any>()
}
public? final? expect function foo(): String
public? final? expect property x(val): Int
public? get(): Int
public? final actual class MyClass {
public? constructor(): super<kotlin.Any>()
}
public? final? actual function foo(): <implicit> {
STUB
@@ -5,6 +5,8 @@ FILE: genericFunctions.kt
STUB
}
public? abstract class Summator {
public? constructor(): super<kotlin.Any>()
<T> public? abstract function plus(first: T, second: T): T
}
@@ -1,18 +1,22 @@
FILE: nestedClass.kt
public? abstract class Base {
public? constructor(s: String)
public? constructor(s: String): super<kotlin.Any>()
public? final? property s(val): String
public? get(): String
}
public? final class Outer {
public? constructor(): super<kotlin.Any>()
public? final class Derived : Base {
public? constructor(s: String): super()
public? constructor(s: String): super<Base>()
}
public? final object Obj : Base {
public? constructor(): super<Base>()
}
}
@@ -0,0 +1,9 @@
class NoPrimary {
val x: String
constructor(x: String) {
this.x = x
}
constructor(): this("")
}
@@ -0,0 +1,11 @@
FILE: noPrimaryConstructor.kt
public? final class NoPrimary {
public? final? property x(val): String
public? get(): String
public? constructor(x: String): this<<ERROR TYPE: Not implemented yet>>() {
}
public? constructor(): this<<ERROR TYPE: Not implemented yet>>()
}
@@ -7,6 +7,8 @@ FILE: simpleClass.kt
}
public? final class SomeClass : SomeInterface {
public? constructor(): super<kotlin.Any>()
private final? property baz(val): <implicit> = STUB
public? get(): <implicit>
@@ -26,4 +28,6 @@ FILE: simpleClass.kt
}
public? final inline class InlineClass {
public? constructor(): super<kotlin.Any>()
}
@@ -3,4 +3,6 @@ FILE: simpleTypeAlias.kt
}
public? final typealias C = B
public? final class D : C {
public? constructor(): super<kotlin.Any>()
}
@@ -1,8 +1,12 @@
FILE: typeAliasWithGeneric.kt
public? open class A {
public? constructor(): super<kotlin.Any>()
}
<S, T : A> public? abstract interface B {
}
<T> public? final typealias C = B<T, A>
public? final class D : C<A> {
public? constructor(): super<kotlin.Any>()
}
@@ -2,7 +2,11 @@ FILE: typeParameterVsNested.kt
public? abstract interface Some {
}
<T : Some> public? abstract class My {
public? constructor(): super<kotlin.Any>()
public? final inner class T {
public? constructor(): super<kotlin.Any>()
}
public? abstract property x(val): T
@@ -17,6 +21,8 @@ FILE: typeParameterVsNested.kt
public? get(): test.My.T
public? final class Some : T {
public? constructor(): super<T>()
}
}
@@ -8,8 +8,12 @@ FILE: typeParameters.kt
public? final typealias StringList = List<out String>
public? final typealias AnyList = List<*>
<out T : Any> public? abstract class AbstractList : List<T> {
public? constructor(): super<kotlin.Any>()
}
public? final class SomeList : AbstractList<Int> {
public? constructor(): super<AbstractList<Int>>()
public? open? override function get(index: Int): Int {
STUB
}
+1 -1
View File
@@ -1,4 +1,4 @@
open class A
class B : A
class B : A()
+4
View File
@@ -1,5 +1,9 @@
FILE: F.kt
public? open class A {
public? constructor(): super<R|kotlin/Any|>()
}
public? final class B : R|A| {
public? constructor(): super<R|A|>()
}
+8
View File
@@ -1,12 +1,20 @@
FILE: NestedOfAliasedType.kt
public? abstract class A {
public? constructor(): super<R|kotlin/Any|>()
public? abstract class Nested {
public? constructor(): super<R|kotlin/Any|>()
}
}
public? final typealias TA = R|A|
public? final class B : R|TA = A| {
public? constructor(): super<R|TA = A|>()
public? final class NestedInB : R|A.Nested| {
public? constructor(): super<R|A.Nested|>()
}
}
+10
View File
@@ -1,14 +1,24 @@
FILE: NestedSuperType.kt
public? abstract class My {
public? constructor(): super<R|kotlin/Any|>()
public? abstract class NestedOne : R|p/My| {
public? constructor(): super<R|p/My|>()
public? abstract class NestedTwo : R|p/My.NestedOne| {
public? constructor(): super<R|p/My.NestedOne|>()
}
}
}
public? final class Your : R|p/My| {
public? constructor(): super<R|p/My|>()
public? final class NestedThree : R|p/My.NestedOne| {
public? constructor(): super<R|p/My.NestedOne|>()
}
}
@@ -1,5 +1,9 @@
FILE: TwoDeclarationsInSameFile.kt
public? open class A {
public? constructor(): super<R|kotlin/Any|>()
}
public? final class B : R|p/A| {
public? constructor(): super<R|p/A|>()
}
+4
View File
@@ -1,7 +1,11 @@
FILE: lists.kt
public? abstract class MyStringList : R|kotlin/collections/List<kotlin/String>| {
public? constructor(): super<R|kotlin/Any|>()
}
public? abstract class MyMutableStringList : R|kotlin/collections/MutableList<kotlin/String>| {
public? constructor(): super<R|kotlin/Any|>()
}
public? final? function convert R|kotlin/collections/List<kotlin/String>|.(): R|MyStringList| {
STUB
+12
View File
@@ -1,7 +1,13 @@
FILE: companion.kt
public? abstract class Some {
public? constructor(): super<R|kotlin/Any|>()
public? final companion object Companion {
public? constructor(): super<R|kotlin/Any|>()
public? final class InCompanion {
public? constructor(): super<R|kotlin/Any|>()
}
}
@@ -11,8 +17,14 @@ FILE: companion.kt
}
public? abstract class Another {
public? constructor(): super<R|kotlin/Any|>()
public? final companion object NamedCompanion {
public? constructor(): super<R|kotlin/Any|>()
public? final class InCompanion {
public? constructor(): super<R|kotlin/Any|>()
}
}
+2 -2
View File
@@ -1,13 +1,13 @@
FILE: derivedClass.kt
<T> public? open class Base {
public? constructor(x: R|T|)
public? constructor(x: R|T|): super<R|kotlin/Any|>()
public? final? property x(val): R|T|
public? get(): R|T|
}
<T : R|kotlin/Any|> public? final class Derived : R|Base<T>| {
public? constructor(x: R|T|): super()
public? constructor(x: R|T|): super<R|Base<T>|>()
}
<T : R|kotlin/Any|> public? final? function create(x: R|T|): R|Derived<T>| {
+9 -1
View File
@@ -2,16 +2,22 @@ FILE: enum.kt
public? abstract interface Some {
}
public? final object O1 : R|Some| {
public? constructor(): super<R|kotlin/Any|>()
}
public? final object O2 : R|Some| {
public? constructor(): super<R|kotlin/Any|>()
}
public? final enum class SomeEnum {
public? constructor(x: R|Some|)
public? constructor(x: R|Some|): super<R|kotlin/Enum|>()
public? final? property x(val): R|Some|
public? get(): R|Some|
public? final enum entry FIRST : R|SomeEnum| {
public? constructor(): super<R|SomeEnum|>()
public? open? override function check(y: R|Some|): R|kotlin/Boolean| {
STUB
}
@@ -19,6 +25,8 @@ FILE: enum.kt
}
public? final enum entry SECOND : R|SomeEnum| {
public? constructor(): super<R|SomeEnum|>()
public? open? override function check(y: R|Some|): R|kotlin/Boolean| {
STUB
}
+2
View File
@@ -5,6 +5,8 @@ FILE: genericFunctions.kt
STUB
}
public? abstract class Summator {
public? constructor(): super<R|Any|>()
<T> public? abstract function plus(first: R|T|, second: R|T|): R|T|
}
+4 -2
View File
@@ -1,6 +1,8 @@
FILE: Annotations.kt
@FILE:R|annotations/Simple|()
@R|annotations/WithInt|(STUB) public? abstract class First {
public? constructor(): super<R|kotlin/Any|>()
@R|annotations/Simple|() public? abstract function foo(@R|annotations/WithString|(STUB) arg: @R|annotations/Simple|() R|kotlin/Double|): R|kotlin/Unit|
@R|annotations/Complex|(STUB, STUB) public? abstract property v(val): R|kotlin/String|
@@ -8,7 +10,7 @@ FILE: Annotations.kt
}
@R|annotations/WithString|(STUB) public? final class Second : @R|annotations/WithInt|(STUB) R|test/First| {
public? constructor(y: R|kotlin/Char|): super()
public? constructor(y: R|kotlin/Char|): super<@R|annotations/WithInt|(STUB) R|test/First|>()
public? final? property y(val): R|kotlin/Char|
public? get(): R|kotlin/Char|
@@ -21,7 +23,7 @@ FILE: Annotations.kt
STUB
}
@R|annotations/WithString|(STUB) public? constructor(): this()
@R|annotations/WithString|(STUB) public? constructor(): this<R|error: Not implemented yet|>()
}
@R|annotations/WithInt|(STUB) @R|annotations/WithInt|(STUB) public? final typealias Third = @R|annotations/Simple|() R|test/Second|
@@ -1,9 +1,15 @@
FILE: NestedSuperType.kt
public? final class A : R|b/B| {
public? constructor(): super<R|b/B|>()
public? final class NestedInA1 : R|b/B.NestedInB| {
public? constructor(): super<R|b/B.NestedInB|>()
}
public? final class NestedInA2 : R|c/C.NestedInC| {
public? constructor(): super<R|c/C.NestedInC|>()
}
}
@@ -2,6 +2,6 @@ package a
import b.TA
class MyClass : TA
class MyClass : TA()
// analyzePriority: 0
@@ -1,3 +1,5 @@
FILE: TypeAliasExpansion.kt
public? final class MyClass : R|b/TA = b/A| {
public? constructor(): super<R|b/TA = b/A|>()
}
@@ -1,5 +1,7 @@
FILE: sealedStarImport.kt
public? abstract class Factory {
public? constructor(): super<R|kotlin/Any|>()
public? abstract function createTest(): R|error: Symbol not found|
public? abstract function createObj(): R|test/Test.O|
@@ -1,4 +1,4 @@
package a
import b.MyClass as HisClass
class YourClass : HisClass
class YourClass : HisClass()
@@ -1,3 +1,5 @@
FILE: simpleAliasedImport.kt
public? final class YourClass : R|b/MyClass| {
public? constructor(): super<R|b/MyClass|>()
}
+1 -1
View File
@@ -1,4 +1,4 @@
package a
import b.MyClass
class YourClass : MyClass
class YourClass : MyClass()
@@ -1,3 +1,5 @@
FILE: simpleImport.kt
public? final class YourClass : R|b/MyClass| {
public? constructor(): super<R|b/MyClass|>()
}
@@ -1,3 +1,5 @@
FILE: simpleImportNested.kt
public? final class YourClass : R|a/MyClass.MyNested| {
public? constructor(): super<R|a/MyClass.MyNested|>()
}
@@ -1,3 +1,5 @@
FILE: simpleImportOuter.kt
public? final class My : R|a/Outer.Nested| {
public? constructor(): super<R|a/Outer.Nested|>()
}
+6 -2
View File
@@ -1,18 +1,22 @@
FILE: nestedClass.kt
public? abstract class Base {
public? constructor(s: R|kotlin/String|)
public? constructor(s: R|kotlin/String|): super<R|kotlin/Any|>()
public? final? property s(val): R|kotlin/String|
public? get(): R|kotlin/String|
}
public? final class Outer {
public? constructor(): super<R|kotlin/Any|>()
public? final class Derived : R|Base| {
public? constructor(s: R|kotlin/String|): super()
public? constructor(s: R|kotlin/String|): super<R|Base|>()
}
public? final object Obj : R|Base| {
public? constructor(): super<R|Base|>()
}
}
+2
View File
@@ -7,6 +7,8 @@ FILE: simpleClass.kt
}
public? final class SomeClass : R|SomeInterface| {
public? constructor(): super<R|kotlin/Any|>()
private final? property baz(val): R|error: Not supported: FirImplicitTypeImpl| = STUB
public? get(): R|error: Not supported: FirImplicitTypeImpl|
+2
View File
@@ -3,4 +3,6 @@ FILE: simpleTypeAlias.kt
}
public? final typealias C = R|B|
public? final class D : R|C = B| {
public? constructor(): super<R|kotlin/Any|>()
}
+2
View File
@@ -4,6 +4,8 @@ FILE: functionX.kt
public? final? property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = STUB
public? get(): R|kotlin/Function1<kotlin/String, kotlin/String>|
public? final class MyFunction : R|kotlin/Function2<kotlin/Int, kotlin/String, kotlin/Unit>| {
public? constructor(): super<R|kotlin/Any|>()
public? open? override function invoke(p1: R|kotlin/Int|, p2: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -1,8 +1,12 @@
FILE: typeAliasWithGeneric.kt
public? open class A {
public? constructor(): super<R|kotlin/Any|>()
}
<S, T : R|A|> public? abstract interface B {
}
public? final class D : R|C<A> = B<T, A>| {
public? constructor(): super<R|kotlin/Any|>()
}
<T> public? final typealias C = R|B<T, A>|
@@ -2,7 +2,11 @@ FILE: typeParameterVsNested.kt
public? abstract interface Some {
}
<T : R|test/Some|> public? abstract class My {
public? constructor(): super<R|kotlin/Any|>()
public? final inner class T {
public? constructor(): super<R|kotlin/Any|>()
}
public? abstract property x(val): R|T|
@@ -17,6 +21,8 @@ FILE: typeParameterVsNested.kt
public? get(): R|test/My.T|
public? final class Some : R|test/My.T| {
public? constructor(): super<R|T|>()
}
}