Implement backend error reporting on unsupported script capturing

#KT-30616 fixed
#KT-43995 fixed
#KT-19424 fixed
#KT-49443 fixed
This commit is contained in:
Ilya Chernikov
2021-11-30 17:14:24 +01:00
committed by TeamCityServer
parent cb5e451e05
commit 10c5071eda
22 changed files with 444 additions and 34 deletions
@@ -0,0 +1,10 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
// KT-30616
val foo = "hello"
<!SCRIPT_CAPTURING_ENUM!>enum class Bar(val s: String = foo) {
Eleven("0")
}<!>
@@ -0,0 +1,30 @@
package
public final class EnumCapturesProperty : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor EnumCapturesProperty(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<kotlin.String>
public final val foo: kotlin.String = "hello"
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 enum class Bar : kotlin.Enum<EnumCapturesProperty.Bar> {
enum entry Eleven
private constructor Bar(/*0*/ s: kotlin.String = ...)
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
public final val s: kotlin.String
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: EnumCapturesProperty.Bar): kotlin.Int
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit
public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<EnumCapturesProperty.Bar!>!
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): EnumCapturesProperty.Bar
public final /*synthesized*/ fun values(): kotlin.Array<EnumCapturesProperty.Bar>
}
}
@@ -0,0 +1,9 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
// KT-30616
val foo = "hello"
<!SCRIPT_CAPTURING_ENUM!>enum class Bar(val s: String) {
Eleven(s = foo)
}<!>
@@ -0,0 +1,30 @@
package
public final class EnumEntryCapturesProperty : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor EnumEntryCapturesProperty(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<kotlin.String>
public final val foo: kotlin.String = "hello"
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 enum class Bar : kotlin.Enum<EnumEntryCapturesProperty.Bar> {
enum entry Eleven
private constructor Bar(/*0*/ s: kotlin.String)
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
public final val s: kotlin.String
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: EnumEntryCapturesProperty.Bar): kotlin.Int
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit
public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<EnumEntryCapturesProperty.Bar!>!
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): EnumEntryCapturesProperty.Bar
public final /*synthesized*/ fun values(): kotlin.Array<EnumEntryCapturesProperty.Bar>
}
}
@@ -0,0 +1,14 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
fun foo() = B().bar()
val life = 42
<!SCRIPT_CAPTURING_INTERFACE!>interface A {
val x get() = life
}<!>
class B : A {
fun bar() = x
}
@@ -0,0 +1,27 @@
package
public final class InterfaceCapturesProperty : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor InterfaceCapturesProperty(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<kotlin.String>
public final val life: kotlin.Int = 42
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public interface A {
public open val x: 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 final class B : InterfaceCapturesProperty.A {
public constructor B()
public open override /*1*/ /*fake_override*/ val x: kotlin.Int
public final fun bar(): 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
}
}
@@ -0,0 +1,10 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
fun foo() = B.bar()
val life = 42
<!SCRIPT_CAPTURING_OBJECT!>object B<!> {
fun bar() = life
}
@@ -0,0 +1,19 @@
package
public final class ObjectCapturesProperty : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor ObjectCapturesProperty(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<kotlin.String>
public final val life: kotlin.Int = 42
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public object B {
private constructor B()
public final fun bar(): 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
}
}
@@ -0,0 +1,14 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
fun foo() = B.bar()
val life = 42
class A {
val x = life
}
<!SCRIPT_CAPTURING_OBJECT!>object B<!> {
fun bar() = A().x
}
@@ -0,0 +1,27 @@
package
public final class ObjectCapturesPropertyIndirect : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor ObjectCapturesPropertyIndirect(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<kotlin.String>
public final val life: kotlin.Int = 42
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class A {
public constructor A()
public final val x: kotlin.Int = 42
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 B {
private constructor B()
public final fun bar(): 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
}
}
@@ -0,0 +1,23 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
// see KT-49443
// two similar examples check dependency on declarations ordering
interface I {
fun rename()
}
<!SCRIPT_CAPTURING_OBJECT!>object ZipHelper<!> {
fun buildZip() {
DefaultEachEntryConfiguration(0).rename()
}
}
class DefaultEachEntryConfiguration(val entry: Int) : I {
override fun rename() {
entry.copy()
}
}
fun Int.copy() = Unit
@@ -0,0 +1,35 @@
package
public final class ObjectCapturesPropertyViaExtension1 : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor ObjectCapturesPropertyViaExtension1(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<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 final fun kotlin.Int.copy(): kotlin.Unit
public final class DefaultEachEntryConfiguration : ObjectCapturesPropertyViaExtension1.I {
public constructor DefaultEachEntryConfiguration(/*0*/ entry: kotlin.Int)
public final val entry: 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*/ fun rename(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface I {
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 abstract fun rename(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object ZipHelper {
private constructor ZipHelper()
public final fun buildZip(): kotlin.Unit
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
}
}
@@ -0,0 +1,23 @@
// !RENDER_DIAGNOSTICS_FULL_TEXT
// TARGET_BACKEND: JVM_IR
// see KT-49443
// two similar examples check dependency on declarations ordering
interface I {
fun rename()
}
class DefaultEachEntryConfiguration(val entry: Int) : I {
override fun rename() {
entry.copy()
}
}
<!SCRIPT_CAPTURING_OBJECT!>object ZipHelper<!> {
fun buildZip() {
DefaultEachEntryConfiguration(0).rename()
}
}
fun Int.copy() = Unit
@@ -0,0 +1,35 @@
package
public final class ObjectCapturesPropertyViaExtension2 : kotlin.script.templates.standard.ScriptTemplateWithArgs {
public constructor ObjectCapturesPropertyViaExtension2(/*0*/ args: kotlin.Array<kotlin.String>)
public final override /*1*/ /*fake_override*/ val args: kotlin.Array<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 final fun kotlin.Int.copy(): kotlin.Unit
public final class DefaultEachEntryConfiguration : ObjectCapturesPropertyViaExtension2.I {
public constructor DefaultEachEntryConfiguration(/*0*/ entry: kotlin.Int)
public final val entry: 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*/ fun rename(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface I {
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 abstract fun rename(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object ZipHelper {
private constructor ZipHelper()
public final fun buildZip(): kotlin.Unit
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
}
}