Prohibit references to members of containing class in super constructor of nested object
#KT-25289 In Progress
This commit is contained in:
committed by
TeamCityServer
parent
3c093f57ba
commit
53b6d6f767
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: +ProhibitSelfCallsInNestedObjects
|
||||
// ISSUE: KT-25289
|
||||
|
||||
abstract class Base(val baseProp: String)
|
||||
|
||||
open class Foo1(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo1(prop, baseProp)
|
||||
}
|
||||
|
||||
open class Foo2(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo2(this.prop, this.baseProp)
|
||||
}
|
||||
|
||||
open class Foo3(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo3(Companion.prop, Companion.baseProp)
|
||||
}
|
||||
|
||||
open class Foo4(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
object MyObject : Foo4(MyObject.prop, MyObject.baseProp)
|
||||
}
|
||||
|
||||
open class CheckNested(a: Any) {
|
||||
class Nested
|
||||
|
||||
companion object : CheckNested(Nested()) // Nested() doesn't have receiver, so there will be no error
|
||||
}
|
||||
|
||||
open class Foo5(val prop: Int) {
|
||||
object MyObject : Foo5(with(MyObject) { prop })
|
||||
}
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: +ProhibitSelfCallsInNestedObjects
|
||||
// ISSUE: KT-25289
|
||||
|
||||
abstract class Base(val baseProp: String)
|
||||
|
||||
open class Foo1(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo1(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>prop<!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>baseProp<!>)
|
||||
}
|
||||
|
||||
open class Foo2(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo2(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>this.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>prop<!><!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>this.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>baseProp<!><!>)
|
||||
}
|
||||
|
||||
open class Foo3(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo3(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>Companion.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>prop<!><!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>Companion.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>baseProp<!><!>)
|
||||
}
|
||||
|
||||
open class Foo4(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
object MyObject : Foo4(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>MyObject.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>prop<!><!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>MyObject.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>baseProp<!><!>)
|
||||
}
|
||||
|
||||
open class CheckNested(a: Any) {
|
||||
class Nested
|
||||
|
||||
companion object : CheckNested(Nested()) // Nested() doesn't have receiver, so there will be no error
|
||||
}
|
||||
|
||||
open class Foo5(val prop: Int) {
|
||||
object MyObject : Foo5(with(MyObject) { <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR!>prop<!> })
|
||||
}
|
||||
Vendored
+119
@@ -0,0 +1,119 @@
|
||||
package
|
||||
|
||||
public abstract class Base {
|
||||
public constructor Base(/*0*/ baseProp: kotlin.String)
|
||||
public final val baseProp: kotlin.String
|
||||
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 open class CheckNested {
|
||||
public constructor CheckNested(/*0*/ a: kotlin.Any)
|
||||
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 : CheckNested {
|
||||
private constructor Companion()
|
||||
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 final class Nested {
|
||||
public constructor Nested()
|
||||
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 open class Foo1 : Base {
|
||||
public constructor Foo1(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 : Foo1 {
|
||||
private constructor Companion()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo2 : Base {
|
||||
public constructor Foo2(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 : Foo2 {
|
||||
private constructor Companion()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo3 : Base {
|
||||
public constructor Foo3(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 : Foo3 {
|
||||
private constructor Companion()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo4 : Base {
|
||||
public constructor Foo4(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 object MyObject : Foo4 {
|
||||
private constructor MyObject()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo5 {
|
||||
public constructor Foo5(/*0*/ prop: kotlin.Int)
|
||||
public final val prop: kotlin.Int
|
||||
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 object MyObject : Foo5 {
|
||||
private constructor MyObject()
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
compiler/testData/diagnostics/tests/classObjects/selfCallsInCompanionSuperConstructor_warning.fir.kt
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: -ProhibitSelfCallsInNestedObjects
|
||||
// ISSUE: KT-25289
|
||||
|
||||
abstract class Base(val baseProp: String)
|
||||
|
||||
open class Foo1(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo1(prop, baseProp)
|
||||
}
|
||||
|
||||
open class Foo2(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo2(this.prop, this.baseProp)
|
||||
}
|
||||
|
||||
open class Foo3(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo3(Companion.prop, Companion.baseProp)
|
||||
}
|
||||
|
||||
open class Foo4(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
object MyObject : Foo4(MyObject.prop, MyObject.baseProp)
|
||||
}
|
||||
|
||||
open class CheckNested(a: Any) {
|
||||
class Nested
|
||||
|
||||
companion object : CheckNested(Nested()) // Nested() doesn't have receiver, so there will be no error
|
||||
}
|
||||
|
||||
open class Foo5(val prop: Int) {
|
||||
object MyObject : Foo5(with(MyObject) { prop })
|
||||
}
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: -ProhibitSelfCallsInNestedObjects
|
||||
// ISSUE: KT-25289
|
||||
|
||||
abstract class Base(val baseProp: String)
|
||||
|
||||
open class Foo1(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo1(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>prop<!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>baseProp<!>)
|
||||
}
|
||||
|
||||
open class Foo2(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo2(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>this.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>prop<!><!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>this.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>baseProp<!><!>)
|
||||
}
|
||||
|
||||
open class Foo3(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
companion object : Foo3(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>Companion.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>prop<!><!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>Companion.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>baseProp<!><!>)
|
||||
}
|
||||
|
||||
open class Foo4(val prop: Int, baseProp: String) : Base(baseProp) {
|
||||
object MyObject : Foo4(<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>MyObject.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>prop<!><!>, <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>MyObject.<!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>baseProp<!><!>)
|
||||
}
|
||||
|
||||
open class CheckNested(a: Any) {
|
||||
class Nested
|
||||
|
||||
companion object : CheckNested(Nested()) // Nested() doesn't have receiver, so there will be no error
|
||||
}
|
||||
|
||||
open class Foo5(val prop: Int) {
|
||||
object MyObject : Foo5(with(MyObject) { <!SELF_CALL_IN_NESTED_OBJECT_CONSTRUCTOR_WARNING!>prop<!> })
|
||||
}
|
||||
Vendored
+119
@@ -0,0 +1,119 @@
|
||||
package
|
||||
|
||||
public abstract class Base {
|
||||
public constructor Base(/*0*/ baseProp: kotlin.String)
|
||||
public final val baseProp: kotlin.String
|
||||
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 open class CheckNested {
|
||||
public constructor CheckNested(/*0*/ a: kotlin.Any)
|
||||
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 : CheckNested {
|
||||
private constructor Companion()
|
||||
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 final class Nested {
|
||||
public constructor Nested()
|
||||
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 open class Foo1 : Base {
|
||||
public constructor Foo1(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 : Foo1 {
|
||||
private constructor Companion()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo2 : Base {
|
||||
public constructor Foo2(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 : Foo2 {
|
||||
private constructor Companion()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo3 : Base {
|
||||
public constructor Foo3(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 : Foo3 {
|
||||
private constructor Companion()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo4 : Base {
|
||||
public constructor Foo4(/*0*/ prop: kotlin.Int, /*1*/ baseProp: kotlin.String)
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final val prop: kotlin.Int
|
||||
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 object MyObject : Foo4 {
|
||||
private constructor MyObject()
|
||||
public final override /*1*/ /*fake_override*/ val baseProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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 open class Foo5 {
|
||||
public constructor Foo5(/*0*/ prop: kotlin.Int)
|
||||
public final val prop: kotlin.Int
|
||||
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 object MyObject : Foo5 {
|
||||
private constructor MyObject()
|
||||
public final override /*1*/ /*fake_override*/ val prop: kotlin.Int
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user