From 06ee768c6adf381ee23b3681409223c14e892e6c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Jan 2021 18:19:45 +0300 Subject: [PATCH] FIR: in case of smart cast, use original type for FirThisRcvrExpression Before this commit, we used type after smart cast both for original FirThisReceiverExpression and for wrapping FirExpressionWithSmartCast. However, this makes FIR2IR implicit cast generator work incorrectly (it decides not to insert implicit cast because original type is the same). After this commit, expressions have different types and implicit cast generator works properly. --- .../runners/ir/Fir2IrTextTestGenerated.java | 6 + .../kotlin/fir/resolve/calls/FirReceivers.kt | 2 + .../FirExpressionsResolveTransformer.kt | 2 +- .../implicitCastToTypeParameter.fir.kt.txt | 35 - .../implicitCastToTypeParameter.fir.txt | 81 -- .../implicitCastToTypeParameter.kt | 1 + .../firProblems/SimpleTypeMarker.fir.kt.txt | 39 + .../firProblems/SimpleTypeMarker.fir.txt | 96 ++ .../ir/irText/firProblems/SimpleTypeMarker.kt | 22 + .../firProblems/SimpleTypeMarker.kt.txt | 39 + .../irText/firProblems/SimpleTypeMarker.txt | 96 ++ .../test/runners/ir/IrTextTestGenerated.java | 6 + .../diagnostics/notLinked/dfa/neg/28.fir.kt | 4 +- .../diagnostics/notLinked/dfa/pos/11.fir.kt | 112 +- .../diagnostics/notLinked/dfa/pos/12.fir.kt | 1192 ++++++++--------- .../diagnostics/notLinked/dfa/pos/14.fir.kt | 8 +- .../diagnostics/notLinked/dfa/pos/44.fir.kt | 8 +- .../diagnostics/notLinked/dfa/pos/50.fir.kt | 36 +- 18 files changed, 988 insertions(+), 797 deletions(-) delete mode 100644 compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.kt.txt delete mode 100644 compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.txt create mode 100644 compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.kt.txt create mode 100644 compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.txt create mode 100644 compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt create mode 100644 compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt.txt create mode 100644 compiler/testData/ir/irText/firProblems/SimpleTypeMarker.txt diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java index bb8072a0083..3fc97204f64 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/ir/Fir2IrTextTestGenerated.java @@ -2176,6 +2176,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/firProblems/SignatureClash.kt"); } + @Test + @TestMetadata("SimpleTypeMarker.kt") + public void testSimpleTypeMarker() throws Exception { + runTest("compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt"); + } + @Test @TestMetadata("SyntheticSetterType.kt") public void testSyntheticSetterType() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt index a8eb72f0d49..d0a0e3c4dab 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt @@ -67,6 +67,8 @@ sealed class ImplicitReceiverValue>( final override var type: ConeKotlinType = type private set + val originalType: ConeKotlinType = type + var implicitScope: FirTypeScope? = type.scope(useSiteSession, scopeSession, FakeOverrideTypeCalculator.DoNothing) private set diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 786b7c061d2..6db37b3e083 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -78,7 +78,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform implicitReceiver?.boundSymbol?.let { callee.replaceBoundSymbol(it) } - val implicitType = implicitReceiver?.type + val implicitType = implicitReceiver?.originalType qualifiedAccessExpression.resultType = when { implicitReceiver is InaccessibleImplicitReceiverValue -> buildErrorTypeRef { source = qualifiedAccessExpression.source diff --git a/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.kt.txt b/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.kt.txt deleted file mode 100644 index 8afcaf303af..00000000000 --- a/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.kt.txt +++ /dev/null @@ -1,35 +0,0 @@ -inline fun Any.test1(): T? { - return when { - is T -> - else -> null - } -} - -interface Foo { - -} - -val Foo.asT: T? - inline get(): T? { - return when { - is T -> /*as T */ - else -> null - } - } - -class Bar { - constructor() /* primary */ { - super/*Any*/() - /* () */ - - } - - fun test(arg: Any) { - arg as T /*~> Unit */ - .useT(t = arg /*as T */) - } - - fun useT(t: T) { - } - -} diff --git a/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.txt b/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.txt deleted file mode 100644 index ff627c5d41f..00000000000 --- a/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.fir.txt +++ /dev/null @@ -1,81 +0,0 @@ -FILE fqName: fileName:/implicitCastToTypeParameter.kt - FUN name:test1 visibility:public modality:FINAL ($receiver:kotlin.Any) returnType:T of .test1? [inline] - TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any] - $receiver: VALUE_PARAMETER name: type:kotlin.Any - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun test1 (): T of .test1? [inline] declared in ' - WHEN type=T of .test1? origin=IF - BRANCH - if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=T of .test1 - GET_VAR ': kotlin.Any declared in .test1' type=kotlin.Any origin=null - then: GET_VAR ': kotlin.Any declared in .test1' type=T of .test1 origin=null - BRANCH - if: CONST Boolean type=kotlin.Boolean value=true - then: CONST Null type=kotlin.Nothing? value=null - CLASS INTERFACE name:Foo modality:ABSTRACT visibility:public superTypes:[kotlin.Any] - $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Foo.Foo> - TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] - FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] - overridden: - public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - VALUE_PARAMETER name:other index:0 type:kotlin.Any? - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] - overridden: - public open fun hashCode (): kotlin.Int declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] - overridden: - public open fun toString (): kotlin.String declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - PROPERTY name:asT visibility:public modality:FINAL [val] - FUN name: visibility:public modality:FINAL ($receiver:.Foo.>) returnType:T of .? [inline] - correspondingProperty: PROPERTY name:asT visibility:public modality:FINAL [val] - TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any] - $receiver: VALUE_PARAMETER name: type:.Foo.> - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): T of .? [inline] declared in ' - WHEN type=T of .? origin=IF - BRANCH - if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=T of . - GET_VAR ': .Foo.> declared in .' type=.Foo.> origin=null - then: TYPE_OP type=T of . origin=IMPLICIT_CAST typeOperand=T of . - GET_VAR ': .Foo.> declared in .' type=.Foo.> origin=null - BRANCH - if: CONST Boolean type=kotlin.Boolean value=true - then: CONST Null type=kotlin.Nothing? value=null - CLASS CLASS name:Bar modality:FINAL visibility:public superTypes:[kotlin.Any] - $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Bar.Bar> - TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] - CONSTRUCTOR visibility:public <> () returnType:.Bar.Bar> [primary] - BLOCK_BODY - DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' - INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Bar modality:FINAL visibility:public superTypes:[kotlin.Any]' - FUN name:test visibility:public modality:FINAL <> ($this:.Bar.Bar>, arg:kotlin.Any) returnType:kotlin.Unit - $this: VALUE_PARAMETER name: type:.Bar.Bar> - VALUE_PARAMETER name:arg index:0 type:kotlin.Any - BLOCK_BODY - TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit - TYPE_OP type=T of .Bar origin=CAST typeOperand=T of .Bar - GET_VAR 'arg: kotlin.Any declared in .Bar.test' type=kotlin.Any origin=null - CALL 'public final fun useT (t: T of .Bar): kotlin.Unit declared in .Bar' type=kotlin.Unit origin=null - $this: GET_VAR ': .Bar.Bar> declared in .Bar.test' type=.Bar.Bar> origin=null - t: TYPE_OP type=T of .Bar origin=IMPLICIT_CAST typeOperand=T of .Bar - GET_VAR 'arg: kotlin.Any declared in .Bar.test' type=kotlin.Any origin=null - FUN name:useT visibility:public modality:FINAL <> ($this:.Bar.Bar>, t:T of .Bar) returnType:kotlin.Unit - $this: VALUE_PARAMETER name: type:.Bar.Bar> - VALUE_PARAMETER name:t index:0 type:T of .Bar - BLOCK_BODY - FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] - overridden: - public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - VALUE_PARAMETER name:other index:0 type:kotlin.Any? - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] - overridden: - public open fun hashCode (): kotlin.Int declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] - overridden: - public open fun toString (): kotlin.String declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.kt b/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.kt index 5e9a09ea788..3c87e7b8455 100644 --- a/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.kt +++ b/compiler/testData/ir/irText/expressions/implicitCastToTypeParameter.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL inline fun Any.test1(): T? = if (this is T) this else null diff --git a/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.kt.txt b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.kt.txt new file mode 100644 index 00000000000..f58c86deb73 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.kt.txt @@ -0,0 +1,39 @@ +interface SimpleTypeMarker { + +} + +class SimpleType : SimpleTypeMarker { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + fun foo(): String { + return "OK" + } + +} + +interface User { + fun SimpleTypeMarker.bar(): String { + require(value = is SimpleType) + return /*as SimpleType */.foo() + } + +} + +class UserImpl { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + fun SimpleTypeMarker.bar(): String { + require(value = is SimpleType) + return /*as SimpleType */.foo() + } + +} + diff --git a/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.txt b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.txt new file mode 100644 index 00000000000..43d658ac456 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.fir.txt @@ -0,0 +1,96 @@ +FILE fqName: fileName:/SimpleTypeMarker.kt + CLASS INTERFACE name:SimpleTypeMarker modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.SimpleTypeMarker + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:SimpleType modality:FINAL visibility:public superTypes:[.SimpleTypeMarker] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.SimpleType + CONSTRUCTOR visibility:public <> () returnType:.SimpleType [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:SimpleType modality:FINAL visibility:public superTypes:[.SimpleTypeMarker]' + FUN name:foo visibility:public modality:FINAL <> ($this:.SimpleType) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.SimpleType + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String declared in .SimpleType' + CONST String type=kotlin.String value="OK" + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS INTERFACE name:User modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.User + FUN name:bar visibility:public modality:OPEN <> ($this:.User, $receiver:.SimpleTypeMarker) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.User + $receiver: VALUE_PARAMETER name: type:.SimpleTypeMarker + BLOCK_BODY + CALL 'public final fun require (value: kotlin.Boolean): kotlin.Unit [inline] declared in kotlin.PreconditionsKt' type=kotlin.Unit origin=null + value: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .User.bar' type=.SimpleTypeMarker origin=null + RETURN type=kotlin.Nothing from='public open fun bar (): kotlin.String declared in .User' + CALL 'public final fun foo (): kotlin.String declared in .SimpleType' type=kotlin.String origin=null + $this: TYPE_OP type=.SimpleType origin=IMPLICIT_CAST typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .User.bar' type=.SimpleTypeMarker origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:UserImpl modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.UserImpl + CONSTRUCTOR visibility:public <> () returnType:.UserImpl [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:UserImpl modality:FINAL visibility:public superTypes:[kotlin.Any]' + FUN name:bar visibility:public modality:FINAL <> ($this:.UserImpl, $receiver:.SimpleTypeMarker) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.UserImpl + $receiver: VALUE_PARAMETER name: type:.SimpleTypeMarker + BLOCK_BODY + CALL 'public final fun require (value: kotlin.Boolean): kotlin.Unit [inline] declared in kotlin.PreconditionsKt' type=kotlin.Unit origin=null + value: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .UserImpl.bar' type=.SimpleTypeMarker origin=null + RETURN type=kotlin.Nothing from='public final fun bar (): kotlin.String declared in .UserImpl' + CALL 'public final fun foo (): kotlin.String declared in .SimpleType' type=kotlin.String origin=null + $this: TYPE_OP type=.SimpleType origin=IMPLICIT_CAST typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .UserImpl.bar' type=.SimpleTypeMarker origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt new file mode 100644 index 00000000000..efce8922b20 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt @@ -0,0 +1,22 @@ +// WITH_RUNTIME + +interface SimpleTypeMarker + +class SimpleType : SimpleTypeMarker { + fun foo() = "OK" +} + +interface User { + fun SimpleTypeMarker.bar(): String { + require(this is SimpleType) + return this.foo() + } +} + +class UserImpl { + fun SimpleTypeMarker.bar(): String { + require(this is SimpleType) + return this.foo() + } +} + diff --git a/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt.txt b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt.txt new file mode 100644 index 00000000000..f58c86deb73 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt.txt @@ -0,0 +1,39 @@ +interface SimpleTypeMarker { + +} + +class SimpleType : SimpleTypeMarker { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + fun foo(): String { + return "OK" + } + +} + +interface User { + fun SimpleTypeMarker.bar(): String { + require(value = is SimpleType) + return /*as SimpleType */.foo() + } + +} + +class UserImpl { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + fun SimpleTypeMarker.bar(): String { + require(value = is SimpleType) + return /*as SimpleType */.foo() + } + +} + diff --git a/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.txt b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.txt new file mode 100644 index 00000000000..2a1b44bf546 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/SimpleTypeMarker.txt @@ -0,0 +1,96 @@ +FILE fqName: fileName:/SimpleTypeMarker.kt + CLASS INTERFACE name:SimpleTypeMarker modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.SimpleTypeMarker + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:SimpleType modality:FINAL visibility:public superTypes:[.SimpleTypeMarker] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.SimpleType + CONSTRUCTOR visibility:public <> () returnType:.SimpleType [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:SimpleType modality:FINAL visibility:public superTypes:[.SimpleTypeMarker]' + FUN name:foo visibility:public modality:FINAL <> ($this:.SimpleType) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.SimpleType + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String declared in .SimpleType' + CONST String type=kotlin.String value="OK" + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in .SimpleTypeMarker + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in .SimpleTypeMarker + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in .SimpleTypeMarker + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS INTERFACE name:User modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.User + FUN name:bar visibility:public modality:OPEN <> ($this:.User, $receiver:.SimpleTypeMarker) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.User + $receiver: VALUE_PARAMETER name: type:.SimpleTypeMarker + BLOCK_BODY + CALL 'public final fun require (value: kotlin.Boolean): kotlin.Unit [inline] declared in kotlin.PreconditionsKt' type=kotlin.Unit origin=null + value: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .User.bar' type=.SimpleTypeMarker origin=null + RETURN type=kotlin.Nothing from='public open fun bar (): kotlin.String declared in .User' + CALL 'public final fun foo (): kotlin.String declared in .SimpleType' type=kotlin.String origin=null + $this: TYPE_OP type=.SimpleType origin=IMPLICIT_CAST typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .User.bar' type=.SimpleTypeMarker origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:UserImpl modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.UserImpl + CONSTRUCTOR visibility:public <> () returnType:.UserImpl [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:UserImpl modality:FINAL visibility:public superTypes:[kotlin.Any]' + FUN name:bar visibility:public modality:FINAL <> ($this:.UserImpl, $receiver:.SimpleTypeMarker) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.UserImpl + $receiver: VALUE_PARAMETER name: type:.SimpleTypeMarker + BLOCK_BODY + CALL 'public final fun require (value: kotlin.Boolean): kotlin.Unit [inline] declared in kotlin.PreconditionsKt' type=kotlin.Unit origin=null + value: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .UserImpl.bar' type=.SimpleTypeMarker origin=null + RETURN type=kotlin.Nothing from='public final fun bar (): kotlin.String declared in .UserImpl' + CALL 'public final fun foo (): kotlin.String declared in .SimpleType' type=kotlin.String origin=null + $this: TYPE_OP type=.SimpleType origin=IMPLICIT_CAST typeOperand=.SimpleType + GET_VAR ': .SimpleTypeMarker declared in .UserImpl.bar' type=.SimpleTypeMarker origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java index 9a902176101..3f34ba8a394 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/IrTextTestGenerated.java @@ -2176,6 +2176,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest { runTest("compiler/testData/ir/irText/firProblems/SignatureClash.kt"); } + @Test + @TestMetadata("SimpleTypeMarker.kt") + public void testSimpleTypeMarker() throws Exception { + runTest("compiler/testData/ir/irText/firProblems/SimpleTypeMarker.kt"); + } + @Test @TestMetadata("SyntheticSetterType.kt") public void testSyntheticSetterType() throws Exception { diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/28.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/28.fir.kt index bc4e2af6ba6..788f77ff66f 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/28.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/28.fir.kt @@ -5,7 +5,7 @@ // TESTCASE NUMBER: 1 fun > Inv.case_1() { if (this is MutableList<*>) { - & Inv & kotlin.collections.MutableList<*> & Inv")!>this - & Inv & kotlin.collections.MutableList<*> & Inv")!>this[0] = & Inv & kotlin.collections.MutableList<*> & Inv")!>this[1] + & Inv & Inv")!>this + & Inv & Inv")!>this[0] = & Inv & Inv")!>this[1] } } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/11.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/11.fir.kt index f69f3a25738..578a5a62ed9 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/11.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/11.fir.kt @@ -54,16 +54,16 @@ fun case_3(a: Int?, b: Float?, c: Double?, d: Boolean?) { }.apply { ?")!>this if (this != null) { - & kotlin.Number & kotlin.Comparable<*>")!>this - & kotlin.Number & kotlin.Comparable<*>")!>this.equals(null) - & kotlin.Number & kotlin.Comparable<*>")!>this.propT - & kotlin.Number & kotlin.Comparable<*>")!>this.propAny - & kotlin.Number & kotlin.Comparable<*>")!>this.propNullableT - & kotlin.Number & kotlin.Comparable<*>")!>this.propNullableAny - & kotlin.Number & kotlin.Comparable<*>")!>this.funT() - & kotlin.Number & kotlin.Comparable<*>")!>this.funAny() - & kotlin.Number & kotlin.Comparable<*>")!>this.funNullableT() - & kotlin.Number & kotlin.Comparable<*>")!>this.funNullableAny() + & kotlin.Number? & kotlin.Comparable<*>?")!>this + & kotlin.Number? & kotlin.Comparable<*>?")!>this.equals(null) + & kotlin.Number? & kotlin.Comparable<*>?")!>this.propT + & kotlin.Number? & kotlin.Comparable<*>?")!>this.propAny + & kotlin.Number? & kotlin.Comparable<*>?")!>this.propNullableT + & kotlin.Number? & kotlin.Comparable<*>?")!>this.propNullableAny + & kotlin.Number? & kotlin.Comparable<*>?")!>this.funT() + & kotlin.Number? & kotlin.Comparable<*>?")!>this.funAny() + & kotlin.Number? & kotlin.Comparable<*>?")!>this.funNullableT() + & kotlin.Number? & kotlin.Comparable<*>?")!>this.funNullableAny() } }.let { ?")!>it @@ -97,16 +97,16 @@ fun case_4(a: Interface1?, b: Interface2?, c: Boolean) { x.apply { this if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() } } x.let { @@ -140,16 +140,16 @@ fun case_5(a: Interface1?, b: Interface2?, d: Boolean) { x.apply { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() } } x.let { @@ -182,20 +182,20 @@ fun case_6(a: Interface1?, b: Interface2, d: Boolean) { x.apply { this as Interface3 - this + this if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() - this.itest2() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() + this.itest2() } } x.let { @@ -232,20 +232,20 @@ fun case_7(a: Interface1?, b: Interface2?, d: Boolean) { x.apply { this as Interface3? - this + this if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() - this.itest2() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() + this.itest2() } } x.let { diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/12.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/12.fir.kt index 1bebdfc9a4f..d4e97b770a2 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/12.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/12.fir.kt @@ -55,32 +55,32 @@ fun T?.case_2() { // TESTCASE NUMBER: 3 fun T.case_3() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() } } // TESTCASE NUMBER: 4 fun T?.case_4() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() } } @@ -88,17 +88,17 @@ fun T?.case_4() { fun T?.case_5() { if (this is Interface1) { if (this != null) { - this - this.equals(null) + this + this.equals(null) this.propT - this.propAny - this.propNullableT - this.propNullableAny + this.propAny + this.propNullableT + this.propNullableAny this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() equals(this) itest1() @@ -148,17 +148,17 @@ fun T?.case_5() { fun T?.case_6() { if (this is Interface1?) { if (this != null) { - this - this.equals(null) + this + this.equals(null) this.propT - this.propAny - this.propNullableT - this.propNullableAny + this.propAny + this.propNullableT + this.propNullableAny this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() equals(this) itest1() @@ -263,17 +263,17 @@ fun T.case_7() { fun T.case_8() { if (this != null) { if (this is Interface1?) { - this - this.equals(null) + this + this.equals(null) this.propT - this.propAny - this.propNullableT - this.propNullableAny + this.propAny + this.propNullableT + this.propNullableAny this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() equals(this) itest1() @@ -392,17 +392,17 @@ fun T.case_9() { // TESTCASE NUMBER: 10 fun T.case_10() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.toByte() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.toByte() equals(this) toByte() @@ -449,17 +449,17 @@ fun T.case_10() { fun T?.case_11() { if (this is Interface1?) { if (this != null) { - this - this.equals(null) + this + this.equals(null) this.propT - this.propAny - this.propNullableT - this.propNullableAny + this.propAny + this.propNullableT + this.propNullableAny this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() equals(this) itest1() @@ -506,18 +506,18 @@ fun T?.case_11() { // TESTCASE NUMBER: 12 fun T.case_12() where T : Number?, T: Interface1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() - this.toByte() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() + this.toByte() equals(this) itest1() @@ -648,17 +648,17 @@ fun T.case_13() where T : Out<*>?, T: Comparable { */ fun ?> T.case_14() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() equals(this) get() @@ -708,17 +708,17 @@ fun ?> T.case_14() { */ fun ?> T.case_15() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() equals(this) itest1() @@ -768,17 +768,17 @@ fun ?> T.case_15() { */ fun ?> T.case_16() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() equals(this) ip1test1() @@ -828,17 +828,17 @@ fun ?> T.case_16() { */ fun ?> T.case_17() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() equals(this) ip1test1() @@ -942,17 +942,17 @@ fun ?> T.case_18() { */ fun ?> T.case_19() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() equals(this) ip1test1() @@ -1002,18 +1002,18 @@ fun ?> T.case_19() { */ fun T.case_20() where T: InterfaceWithTypeParameter1?, T: InterfaceWithTypeParameter2? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() - this.ip1test2() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() + this.ip1test2() equals(this) ip1test1() @@ -1067,19 +1067,19 @@ fun T.case_20() where T: InterfaceWithTypeParameter1?, T: InterfaceWit */ fun T.case_21() where T: InterfaceWithTypeParameter1?, T: InterfaceWithTypeParameter2?, T: InterfaceWithTypeParameter3? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() - this.ip1test2() - this.ip1test3() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() + this.ip1test2() + this.ip1test3() equals(this) ip1test1() @@ -1187,17 +1187,17 @@ fun >?> T.case // TESTCASE NUMBER: 23 fun >?> T.case_23() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() equals(this) ip1test1() @@ -1243,17 +1243,17 @@ fun >?> T.case // TESTCASE NUMBER: 24 fun > InterfaceWithTypeParameter1?.case_24() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(this) ip1test1() @@ -1299,17 +1299,17 @@ fun > InterfaceWithTypeParameter1?.case // TESTCASE NUMBER: 25 fun > InterfaceWithTypeParameter1?.case_25() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(this) ip1test1() @@ -1355,17 +1355,17 @@ fun > InterfaceWithTypeParameter1?.cas // TESTCASE NUMBER: 26 fun > InterfaceWithTypeParameter1?.case_26() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -1427,17 +1427,17 @@ fun > InterfaceWithTypeParameter1?.case // TESTCASE NUMBER: 27 fun > InterfaceWithTypeParameter1?.case_27() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -1499,17 +1499,17 @@ fun > InterfaceWithTypeParameter1?.cas // TESTCASE NUMBER: 28 fun > InterfaceWithTypeParameter1?.case_28() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -1571,17 +1571,17 @@ fun > InterfaceWithTypeParameter1?. // TESTCASE NUMBER: 29 fun > InterfaceWithTypeParameter1?.case_29() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -1643,17 +1643,17 @@ fun > InterfaceWithTypeParameter1?. // TESTCASE NUMBER: 30 fun > InterfaceWithTypeParameter1?.case_30() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -1715,17 +1715,17 @@ fun > InterfaceWithTypeParameter1?.c // TESTCASE NUMBER: 31 fun > InterfaceWithTypeParameter1?.case_31() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -1787,17 +1787,17 @@ fun > InterfaceWithTypeParameter1? // TESTCASE NUMBER: 32 fun Map?.case_32() { if (this != null) { - & kotlin.collections.Map")!>this - & kotlin.collections.Map")!>this.equals(null) - & kotlin.collections.Map")!>this.propT - & kotlin.collections.Map")!>this.propAny - & kotlin.collections.Map")!>this.propNullableT - & kotlin.collections.Map")!>this.propNullableAny - & kotlin.collections.Map")!>this.funT() - & kotlin.collections.Map")!>this.funAny() - & kotlin.collections.Map")!>this.funNullableT() - & kotlin.collections.Map")!>this.funNullableAny() - & kotlin.collections.Map")!>this.isEmpty() + & kotlin.collections.Map?")!>this + & kotlin.collections.Map?")!>this.equals(null) + & kotlin.collections.Map?")!>this.propT + & kotlin.collections.Map?")!>this.propAny + & kotlin.collections.Map?")!>this.propNullableT + & kotlin.collections.Map?")!>this.propNullableAny + & kotlin.collections.Map?")!>this.funT() + & kotlin.collections.Map?")!>this.funAny() + & kotlin.collections.Map?")!>this.funNullableT() + & kotlin.collections.Map?")!>this.funNullableAny() + & kotlin.collections.Map?")!>this.isEmpty() equals(null) @@ -1859,17 +1859,17 @@ fun Map?.case_32() { // TESTCASE NUMBER: 33 fun InterfaceWithFiveTypeParameters1?.case_33() { if (this != null) { - & InterfaceWithFiveTypeParameters1")!>this - & InterfaceWithFiveTypeParameters1")!>this.equals(null) - & InterfaceWithFiveTypeParameters1")!>this.propT - & InterfaceWithFiveTypeParameters1")!>this.propAny - & InterfaceWithFiveTypeParameters1")!>this.propNullableT - & InterfaceWithFiveTypeParameters1")!>this.propNullableAny - & InterfaceWithFiveTypeParameters1")!>this.funT() - & InterfaceWithFiveTypeParameters1")!>this.funAny() - & InterfaceWithFiveTypeParameters1")!>this.funNullableT() - & InterfaceWithFiveTypeParameters1")!>this.funNullableAny() - & InterfaceWithFiveTypeParameters1")!>this.itest() + & InterfaceWithFiveTypeParameters1?")!>this + & InterfaceWithFiveTypeParameters1?")!>this.equals(null) + & InterfaceWithFiveTypeParameters1?")!>this.propT + & InterfaceWithFiveTypeParameters1?")!>this.propAny + & InterfaceWithFiveTypeParameters1?")!>this.propNullableT + & InterfaceWithFiveTypeParameters1?")!>this.propNullableAny + & InterfaceWithFiveTypeParameters1?")!>this.funT() + & InterfaceWithFiveTypeParameters1?")!>this.funAny() + & InterfaceWithFiveTypeParameters1?")!>this.funNullableT() + & InterfaceWithFiveTypeParameters1?")!>this.funNullableAny() + & InterfaceWithFiveTypeParameters1?")!>this.itest() equals(null) @@ -1931,17 +1931,17 @@ fun InterfaceWithFiveTypeParameters1?.case_33() { // TESTCASE NUMBER: 34 fun InterfaceWithTypeParameter1?.case_34() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -2003,17 +2003,17 @@ fun InterfaceWithTypeParameter1?.case_34() { // TESTCASE NUMBER: 35 fun InterfaceWithTypeParameter1?.case_35() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -2075,17 +2075,17 @@ fun InterfaceWithTypeParameter1?.case_35() { // TESTCASE NUMBER: 36 fun InterfaceWithTypeParameter1?.case_36() { if (this != null) { - & InterfaceWithTypeParameter1")!>this - & InterfaceWithTypeParameter1")!>this.equals(null) - & InterfaceWithTypeParameter1")!>this.propT - & InterfaceWithTypeParameter1")!>this.propAny - & InterfaceWithTypeParameter1")!>this.propNullableT - & InterfaceWithTypeParameter1")!>this.propNullableAny - & InterfaceWithTypeParameter1")!>this.funT() - & InterfaceWithTypeParameter1")!>this.funAny() - & InterfaceWithTypeParameter1")!>this.funNullableT() - & InterfaceWithTypeParameter1")!>this.funNullableAny() - & InterfaceWithTypeParameter1")!>this.ip1test1() + & InterfaceWithTypeParameter1?")!>this + & InterfaceWithTypeParameter1?")!>this.equals(null) + & InterfaceWithTypeParameter1?")!>this.propT + & InterfaceWithTypeParameter1?")!>this.propAny + & InterfaceWithTypeParameter1?")!>this.propNullableT + & InterfaceWithTypeParameter1?")!>this.propNullableAny + & InterfaceWithTypeParameter1?")!>this.funT() + & InterfaceWithTypeParameter1?")!>this.funAny() + & InterfaceWithTypeParameter1?")!>this.funNullableT() + & InterfaceWithTypeParameter1?")!>this.funNullableAny() + & InterfaceWithTypeParameter1?")!>this.ip1test1() equals(null) @@ -2147,17 +2147,17 @@ fun InterfaceWithTypeParameter1?.case_36() { // TESTCASE NUMBER: 37 fun Map?.case_37() { if (this != null) { - & kotlin.collections.Map")!>this - & kotlin.collections.Map")!>this.equals(null) - & kotlin.collections.Map")!>this.propT - & kotlin.collections.Map")!>this.propAny - & kotlin.collections.Map")!>this.propNullableT - & kotlin.collections.Map")!>this.propNullableAny - & kotlin.collections.Map")!>this.funT() - & kotlin.collections.Map")!>this.funAny() - & kotlin.collections.Map")!>this.funNullableT() - & kotlin.collections.Map")!>this.funNullableAny() - & kotlin.collections.Map")!>this.isEmpty() + & kotlin.collections.Map?")!>this + & kotlin.collections.Map?")!>this.equals(null) + & kotlin.collections.Map?")!>this.propT + & kotlin.collections.Map?")!>this.propAny + & kotlin.collections.Map?")!>this.propNullableT + & kotlin.collections.Map?")!>this.propNullableAny + & kotlin.collections.Map?")!>this.funT() + & kotlin.collections.Map?")!>this.funAny() + & kotlin.collections.Map?")!>this.funNullableT() + & kotlin.collections.Map?")!>this.funNullableAny() + & kotlin.collections.Map?")!>this.isEmpty() equals(null) @@ -2219,17 +2219,17 @@ fun Map?.case_37() { // TESTCASE NUMBER: 38 fun Map<*, out T>?.case_38() { if (this != null) { - & kotlin.collections.Map<*, out T>")!>this - & kotlin.collections.Map<*, out T>")!>this.equals(null) - & kotlin.collections.Map<*, out T>")!>this.propT - & kotlin.collections.Map<*, out T>")!>this.propAny - & kotlin.collections.Map<*, out T>")!>this.propNullableT - & kotlin.collections.Map<*, out T>")!>this.propNullableAny - & kotlin.collections.Map<*, out T>")!>this.funT() - & kotlin.collections.Map<*, out T>")!>this.funAny() - & kotlin.collections.Map<*, out T>")!>this.funNullableT() - & kotlin.collections.Map<*, out T>")!>this.funNullableAny() - & kotlin.collections.Map<*, out T>")!>this.isEmpty() + & kotlin.collections.Map<*, out T>?")!>this + & kotlin.collections.Map<*, out T>?")!>this.equals(null) + & kotlin.collections.Map<*, out T>?")!>this.propT + & kotlin.collections.Map<*, out T>?")!>this.propAny + & kotlin.collections.Map<*, out T>?")!>this.propNullableT + & kotlin.collections.Map<*, out T>?")!>this.propNullableAny + & kotlin.collections.Map<*, out T>?")!>this.funT() + & kotlin.collections.Map<*, out T>?")!>this.funAny() + & kotlin.collections.Map<*, out T>?")!>this.funNullableT() + & kotlin.collections.Map<*, out T>?")!>this.funNullableAny() + & kotlin.collections.Map<*, out T>?")!>this.isEmpty() equals(null) @@ -2291,16 +2291,16 @@ fun Map<*, out T>?.case_38() { // TESTCASE NUMBER: 39 fun InterfaceWithTwoTypeParameters?.case_39() { if (this != null) { - & InterfaceWithTwoTypeParameters")!>this - & InterfaceWithTwoTypeParameters")!>this.equals(null) - & InterfaceWithTwoTypeParameters")!>this.propT - & InterfaceWithTwoTypeParameters")!>this.propAny - & InterfaceWithTwoTypeParameters")!>this.propNullableT - & InterfaceWithTwoTypeParameters")!>this.propNullableAny - & InterfaceWithTwoTypeParameters")!>this.funT() - & InterfaceWithTwoTypeParameters")!>this.funAny() - & InterfaceWithTwoTypeParameters")!>this.funNullableT() - & InterfaceWithTwoTypeParameters")!>this.funNullableAny() + & InterfaceWithTwoTypeParameters?")!>this + & InterfaceWithTwoTypeParameters?")!>this.equals(null) + & InterfaceWithTwoTypeParameters?")!>this.propT + & InterfaceWithTwoTypeParameters?")!>this.propAny + & InterfaceWithTwoTypeParameters?")!>this.propNullableT + & InterfaceWithTwoTypeParameters?")!>this.propNullableAny + & InterfaceWithTwoTypeParameters?")!>this.funT() + & InterfaceWithTwoTypeParameters?")!>this.funAny() + & InterfaceWithTwoTypeParameters?")!>this.funNullableT() + & InterfaceWithTwoTypeParameters?")!>this.funNullableAny() equals(null) @@ -2358,16 +2358,16 @@ fun InterfaceWithTwoTypeParameters?.case_39() { // TESTCASE NUMBER: 40 fun InterfaceWithTwoTypeParameters?.case_40() { if (this != null) { - & InterfaceWithTwoTypeParameters")!>this - & InterfaceWithTwoTypeParameters")!>this.equals(null) - & InterfaceWithTwoTypeParameters")!>this.propT - & InterfaceWithTwoTypeParameters")!>this.propAny - & InterfaceWithTwoTypeParameters")!>this.propNullableT - & InterfaceWithTwoTypeParameters")!>this.propNullableAny - & InterfaceWithTwoTypeParameters")!>this.funT() - & InterfaceWithTwoTypeParameters")!>this.funAny() - & InterfaceWithTwoTypeParameters")!>this.funNullableT() - & InterfaceWithTwoTypeParameters")!>this.funNullableAny() + & InterfaceWithTwoTypeParameters?")!>this + & InterfaceWithTwoTypeParameters?")!>this.equals(null) + & InterfaceWithTwoTypeParameters?")!>this.propT + & InterfaceWithTwoTypeParameters?")!>this.propAny + & InterfaceWithTwoTypeParameters?")!>this.propNullableT + & InterfaceWithTwoTypeParameters?")!>this.propNullableAny + & InterfaceWithTwoTypeParameters?")!>this.funT() + & InterfaceWithTwoTypeParameters?")!>this.funAny() + & InterfaceWithTwoTypeParameters?")!>this.funNullableT() + & InterfaceWithTwoTypeParameters?")!>this.funNullableAny() equals(null) @@ -2425,17 +2425,17 @@ fun InterfaceWithTwoTypeParameters?.case_40() { // TESTCASE NUMBER: 41 fun Map?.case_41() { if (this != null) { - & kotlin.collections.Map")!>this - & kotlin.collections.Map")!>this.equals(null) - & kotlin.collections.Map")!>this.propT - & kotlin.collections.Map")!>this.propAny - & kotlin.collections.Map")!>this.propNullableT - & kotlin.collections.Map")!>this.propNullableAny - & kotlin.collections.Map")!>this.funT() - & kotlin.collections.Map")!>this.funAny() - & kotlin.collections.Map")!>this.funNullableT() - & kotlin.collections.Map")!>this.funNullableAny() - & kotlin.collections.Map")!>this.isEmpty() + & kotlin.collections.Map?")!>this + & kotlin.collections.Map?")!>this.equals(null) + & kotlin.collections.Map?")!>this.propT + & kotlin.collections.Map?")!>this.propAny + & kotlin.collections.Map?")!>this.propNullableT + & kotlin.collections.Map?")!>this.propNullableAny + & kotlin.collections.Map?")!>this.funT() + & kotlin.collections.Map?")!>this.funAny() + & kotlin.collections.Map?")!>this.funNullableT() + & kotlin.collections.Map?")!>this.funNullableAny() + & kotlin.collections.Map?")!>this.isEmpty() equals(null) @@ -2497,17 +2497,17 @@ fun Map?.case_41() { // TESTCASE NUMBER: 42 fun Map?.case_42() { if (this != null) { - & kotlin.collections.Map")!>this - & kotlin.collections.Map")!>this.equals(null) - & kotlin.collections.Map")!>this.propT - & kotlin.collections.Map")!>this.propAny - & kotlin.collections.Map")!>this.propNullableT - & kotlin.collections.Map")!>this.propNullableAny - & kotlin.collections.Map")!>this.funT() - & kotlin.collections.Map")!>this.funAny() - & kotlin.collections.Map")!>this.funNullableT() - & kotlin.collections.Map")!>this.funNullableAny() - & kotlin.collections.Map")!>this.isEmpty() + & kotlin.collections.Map?")!>this + & kotlin.collections.Map?")!>this.equals(null) + & kotlin.collections.Map?")!>this.propT + & kotlin.collections.Map?")!>this.propAny + & kotlin.collections.Map?")!>this.propNullableT + & kotlin.collections.Map?")!>this.propNullableAny + & kotlin.collections.Map?")!>this.funT() + & kotlin.collections.Map?")!>this.funAny() + & kotlin.collections.Map?")!>this.funNullableT() + & kotlin.collections.Map?")!>this.funNullableAny() + & kotlin.collections.Map?")!>this.isEmpty() equals(null) @@ -2569,17 +2569,17 @@ fun Map?.case_42() { // TESTCASE NUMBER: 43 fun Map?.case_43() { if (this != null) { - & kotlin.collections.Map")!>this - & kotlin.collections.Map")!>this.equals(null) - & kotlin.collections.Map")!>this.propT - & kotlin.collections.Map")!>this.propAny - & kotlin.collections.Map")!>this.propNullableT - & kotlin.collections.Map")!>this.propNullableAny - & kotlin.collections.Map")!>this.funT() - & kotlin.collections.Map")!>this.funAny() - & kotlin.collections.Map")!>this.funNullableT() - & kotlin.collections.Map")!>this.funNullableAny() - & kotlin.collections.Map")!>this.isEmpty() + & kotlin.collections.Map?")!>this + & kotlin.collections.Map?")!>this.equals(null) + & kotlin.collections.Map?")!>this.propT + & kotlin.collections.Map?")!>this.propAny + & kotlin.collections.Map?")!>this.propNullableT + & kotlin.collections.Map?")!>this.propNullableAny + & kotlin.collections.Map?")!>this.funT() + & kotlin.collections.Map?")!>this.funAny() + & kotlin.collections.Map?")!>this.funNullableT() + & kotlin.collections.Map?")!>this.funNullableAny() + & kotlin.collections.Map?")!>this.isEmpty() equals(null) @@ -2641,17 +2641,17 @@ fun Map?.case_43() { // TESTCASE NUMBER: 44 fun InterfaceWithFiveTypeParameters1?.case_44() { if (this != null) { - & InterfaceWithFiveTypeParameters1")!>this - & InterfaceWithFiveTypeParameters1")!>this.equals(null) - & InterfaceWithFiveTypeParameters1")!>this.propT - & InterfaceWithFiveTypeParameters1")!>this.propAny - & InterfaceWithFiveTypeParameters1")!>this.propNullableT - & InterfaceWithFiveTypeParameters1")!>this.propNullableAny - & InterfaceWithFiveTypeParameters1")!>this.funT() - & InterfaceWithFiveTypeParameters1")!>this.funAny() - & InterfaceWithFiveTypeParameters1")!>this.funNullableT() - & InterfaceWithFiveTypeParameters1")!>this.funNullableAny() - & InterfaceWithFiveTypeParameters1")!>this.itest() + & InterfaceWithFiveTypeParameters1?")!>this + & InterfaceWithFiveTypeParameters1?")!>this.equals(null) + & InterfaceWithFiveTypeParameters1?")!>this.propT + & InterfaceWithFiveTypeParameters1?")!>this.propAny + & InterfaceWithFiveTypeParameters1?")!>this.propNullableT + & InterfaceWithFiveTypeParameters1?")!>this.propNullableAny + & InterfaceWithFiveTypeParameters1?")!>this.funT() + & InterfaceWithFiveTypeParameters1?")!>this.funAny() + & InterfaceWithFiveTypeParameters1?")!>this.funNullableT() + & InterfaceWithFiveTypeParameters1?")!>this.funNullableAny() + & InterfaceWithFiveTypeParameters1?")!>this.itest() equals(null) @@ -2713,18 +2713,18 @@ fun InterfaceWithFiveTypeParameters1?.case_44() { // TESTCASE NUMBER: 45 fun T.case_45() where T : Number?, T: Comparable? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.toByte() - this.compareTo(this) + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.toByte() + this.compareTo(this) equals(this) toByte() @@ -2774,19 +2774,19 @@ fun T.case_45() where T : Number?, T: Comparable? { // TESTCASE NUMBER: 46 fun T.case_46() where T : CharSequence?, T: Comparable?, T: Iterable<*>? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.compareTo(this) - this.get(0) - this.iterator() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.compareTo(this) + this.get(0) + this.iterator() equals(this) compareTo(this) @@ -2844,18 +2844,18 @@ fun T.case_46() where T : CharSequence?, T: Comparable?, T: Iterable<*>? */ fun T?.case_47() where T : Inv, T: Comparable<*>?, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -2900,7 +2900,7 @@ fun T?.case_47() where T : Inv, T: Comparable<*>?, T: InterfaceWithTypePa it.ip1test1() } - this.compareTo(return) + this.compareTo(return) compareTo(return) apply { @@ -2921,18 +2921,18 @@ fun T?.case_47() where T : Inv, T: Comparable<*>?, T: InterfaceWithTypePa */ fun T?.case_48() where T : Inv, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -2986,18 +2986,18 @@ fun T?.case_48() where T : Inv, T: InterfaceWithTypeParameter1? */ fun T?.case_49() where T : Inv, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3051,18 +3051,18 @@ fun T?.case_49() where T : Inv, T: InterfaceWithTypeParameter1? */ fun T?.case_50() where T : Inv, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3116,18 +3116,18 @@ fun T?.case_50() where T : Inv, T: InterfaceWithTypeParameter1 */ fun T?.case_51() where T : Inv, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3177,18 +3177,18 @@ fun T?.case_51() where T : Inv, T: InterfaceWithTypeParameter1? { // TESTCASE NUMBER: 52 fun T?.case_52() where T : Inv, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3242,18 +3242,18 @@ fun T?.case_52() where T : Inv, T: InterfaceWithTypeParameter1? { */ fun T?.case_53() where T : Inv, T: InterfaceWithTypeParameter1<*>? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3307,18 +3307,18 @@ fun T?.case_53() where T : Inv, T: InterfaceWithTypeParameter1<*>? { */ fun T?.case_54() where T : Inv<*>, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3368,18 +3368,18 @@ fun T?.case_54() where T : Inv<*>, T: InterfaceWithTypeParameter1? { // TESTCASE NUMBER: 55 fun T?.case_55() where T : Inv<*>, T: InterfaceWithTypeParameter1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.get() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.get() + this.ip1test1() equals(this) get() @@ -3429,18 +3429,18 @@ fun T?.case_55() where T : Inv<*>, T: InterfaceWithTypeParameter1? { // TESTCASE NUMBER: 56 fun T.case_56() where T : Number?, T: Interface1? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest() - this.toByte() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest() + this.toByte() equals(this) itest() @@ -3571,17 +3571,17 @@ fun T.case_57() where T : Out<*>?, T: Comparable { // TESTCASE NUMBER: 58 fun >>>>>>>>>?> T.case_59() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() equals(this) ip1test1() @@ -3631,19 +3631,19 @@ fun T.case_59() where T: InterfaceWithFiveTypeParameters1?, T: InterfaceWithFiveTypeParameters2?, T: InterfaceWithFiveTypeParameters3? { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.itest1() - this.itest2() - this.itest3() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.itest1() + this.itest2() + this.itest3() equals(this) itest1() @@ -3701,17 +3701,17 @@ fun T.case_59() where T: InterfaceWithFiveTypeParameters1?> T.case_60() { if (this != null) { - this - this.equals(null) - this.propT - this.propAny - this.propNullableT - this.propNullableAny - this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() - this.ip1test1() + this + this.equals(null) + this.propT + this.propAny + this.propNullableT + this.propNullableAny + this.funT() + this.funAny() + this.funNullableT() + this.funNullableAny() + this.ip1test1() equals(this) ip1test1() @@ -3766,10 +3766,10 @@ class Case61_3: InterfaceWithTypeParameter1, Case61_1, Case61_2 { fun T.case_61() where T : InterfaceWithTypeParameter1?, T: Case61_3?, T: Case61_1?, T: Case61_2? { if (this != null) { - this.test1() - this.test2() - this.ip1test1() - this.test4() + this.test1() + this.test2() + this.ip1test1() + this.test4() test1() test2() @@ -3799,8 +3799,8 @@ fun T.case_61() where T : InterfaceWithTypeParameter1?, T: Case61_3?, // TESTCASE NUMBER: 62 fun Nothing?.case_62() { if (this != null) { - this - this.hashCode() + this + this.hashCode() hashCode() apply { @@ -3840,8 +3840,8 @@ fun Nothing.case_63() { */ fun T.case_64() { if (this != null) { - this - this.hashCode() + this + this.hashCode() hashCode() apply { @@ -3865,16 +3865,16 @@ fun T.case_65() { if (this is Interface1?) { if (this is Interface2?) { if (this != null) { - this - this.equals(null) + this + this.equals(null) this.propT - this.propAny - this.propNullableT - this.propNullableAny + this.propAny + this.propNullableT + this.propNullableAny this.funT() - this.funAny() - this.funNullableT() - this.funNullableAny() + this.funAny() + this.funNullableT() + this.funNullableAny() apply { this this.equals(null) diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/14.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/14.fir.kt index 9d62f586de0..da8354f4c68 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/14.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/14.fir.kt @@ -14,8 +14,8 @@ fun case_1(vararg x: Int?) { fun case_2(vararg x: Int?) { x[0].apply { if (this != null) { - this - this.inv() + this + this.inv() } } @@ -39,8 +39,8 @@ fun case_3(vararg x: T?) { fun case_4(vararg x: T?) { x[0].apply { if (this != null) { - this - this.toByte() + this + this.toByte() } } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/44.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/44.fir.kt index 59ab61c5657..7535afb3fb3 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/44.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/44.fir.kt @@ -10,8 +10,8 @@ fun Int?.case_1() { val x = this if (x != null) { - this - this.inv() + this + this.inv() } } @@ -48,6 +48,6 @@ fun Int?.case_3() { fun Int?.case_4() { val x = this x!! - this - this.inv() + this + this.inv() } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.fir.kt index 31942a1c5bf..033dd38d297 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.fir.kt @@ -5,9 +5,9 @@ // TESTCASE NUMBER: 1 fun Any.case_1() { if (this is Inv<*>) { - & Inv<*>")!>this.test() - & Inv<*>")!>this.prop_4 - & Inv<*>")!>this.prop_4.inv() + & kotlin.Any")!>this.test() + & kotlin.Any")!>this.prop_4 + & kotlin.Any")!>this.prop_4.inv() prop_4 prop_4.inv() } @@ -16,9 +16,9 @@ fun Any.case_1() { // TESTCASE NUMBER: 2 fun Any.case_2() { if (this is ClassWithSixTypeParameters<*, *, *, *, *, *>) { - & ClassWithSixTypeParameters<*, *, *, *, *, *>")!>this.test() - & ClassWithSixTypeParameters<*, *, *, *, *, *>")!>this.x - & ClassWithSixTypeParameters<*, *, *, *, *, *>")!>this.y + & kotlin.Any")!>this.test() + & kotlin.Any")!>this.x + & kotlin.Any")!>this.y x y } @@ -27,9 +27,9 @@ fun Any.case_2() { // TESTCASE NUMBER: 3 fun T.case_3() { if (this is Inv<*>) { - & T!! & Inv<*> & T!!")!>this.test() - & T!! & Inv<*> & T!!")!>this.prop_4 - & T!! & Inv<*> & T!!")!>this.prop_4.inv() + & T!! & T")!>this.test() + & T!! & T")!>this.prop_4 + & T!! & T")!>this.prop_4.inv() prop_4 prop_4.inv() } @@ -38,9 +38,9 @@ fun T.case_3() { // TESTCASE NUMBER: 4 fun T?.case_4() { if (this is ClassWithSixTypeParameters<*, *, *, *, *, *>) { - & T?!! & ClassWithSixTypeParameters<*, *, *, *, *, *> & T?!!")!>this.test() - & T?!! & ClassWithSixTypeParameters<*, *, *, *, *, *> & T?!!")!>this.x - & T?!! & ClassWithSixTypeParameters<*, *, *, *, *, *> & T?!!")!>this.y + & T?!! & T?")!>this.test() + & T?!! & T?")!>this.x + & T?!! & T?")!>this.y x y } @@ -49,11 +49,11 @@ fun T?.case_4() { // TESTCASE NUMBER: 5 fun ClassWithSixTypeParameters.case_5() { if (this is InterfaceWithFiveTypeParameters1<*, *, *, *, *>) { - & ClassWithSixTypeParameters & InterfaceWithFiveTypeParameters1<*, *, *, *, *> & ClassWithSixTypeParameters")!>this.itest1() + & ClassWithSixTypeParameters & ClassWithSixTypeParameters")!>this.itest1() itest1() - & ClassWithSixTypeParameters & InterfaceWithFiveTypeParameters1<*, *, *, *, *> & ClassWithSixTypeParameters")!>this.test() - & ClassWithSixTypeParameters & InterfaceWithFiveTypeParameters1<*, *, *, *, *> & ClassWithSixTypeParameters")!>this.x - & ClassWithSixTypeParameters & InterfaceWithFiveTypeParameters1<*, *, *, *, *> & ClassWithSixTypeParameters")!>this.y + & ClassWithSixTypeParameters & ClassWithSixTypeParameters")!>this.test() + & ClassWithSixTypeParameters & ClassWithSixTypeParameters")!>this.x + & ClassWithSixTypeParameters & ClassWithSixTypeParameters")!>this.y x y } @@ -98,8 +98,8 @@ fun T.case_8() { */ fun T.case_9() { if (this is String) { - this - this.length + this + this.length length } }