KT-43217 Encode @EnhancedNullability types in IdSignature

This commit is contained in:
Dmitry Petrov
2020-11-09 08:37:00 +03:00
parent f6df624c6b
commit b9c6267a63
21 changed files with 470 additions and 2 deletions
@@ -223,6 +223,10 @@ open class FirJvmMangleComputer(
if (type.isMarkedNullable) {
tBuilder.appendSignature(MangleConstant.Q_MARK)
}
if (type.hasEnhancedNullability) {
tBuilder.appendSignature(MangleConstant.ENHANCED_NULLABILITY_MARK)
}
}
is ConeFlexibleType -> {
// TODO: is that correct way to mangle flexible type?
@@ -15969,6 +15969,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/javaInterop/genericSamSmartcast.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/kt43217.kt");
}
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");
@@ -196,6 +196,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
runTest("compiler/testData/ir/irText/classes/kt31649.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/ir/irText/classes/kt43217.kt");
}
@TestMetadata("lambdaInDataClassDefaultParameter.kt")
public void testLambdaInDataClassDefaultParameter() throws Exception {
runTest("compiler/testData/ir/irText/classes/lambdaInDataClassDefaultParameter.kt");
@@ -85,7 +85,7 @@ class SymbolTable(
@Suppress("LeakingThis")
val lazyWrapper = IrLazySymbolTable(this)
private abstract inner class SymbolTableBase<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> {
private abstract class SymbolTableBase<D : DeclarationDescriptor, B : IrSymbolOwner, S : IrBindableSymbol<D, B>> {
val unboundSymbols = linkedSetOf<S>()
abstract fun get(d: D): S?
@@ -16,6 +16,7 @@ enum class MangleConstant(val prefix: Char, val separator: Char, val suffix: Cha
const val VAR_ARG_MARK = "..."
const val STAR_MARK = '*'
const val Q_MARK = '?'
const val ENHANCED_NULLABILITY_MARK = "{EnhancedNullability}"
const val EXPECT_MARK = "#expect"
const val UNKNOWN_MARK = "<unknown>"
const val DYNAMIC_MARK = "<dynamic>"
@@ -10,7 +10,9 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode
import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangler
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.load.java.typeEnhancement.hasEnhancedNullability
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext
import org.jetbrains.kotlin.types.typeUtil.isUnit
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
@@ -188,6 +190,11 @@ abstract class DescriptorMangleComputer(protected val builder: StringBuilder, pr
}
if (type.isMarkedNullable) tBuilder.appendSignature(MangleConstant.Q_MARK)
// Disambiguate between 'double' and '@NotNull java.lang.Double' types in mixed Java/Kotlin class hierarchies
if (SimpleClassicTypeSystemContext.hasEnhancedNullability(type)) {
tBuilder.appendSignature(MangleConstant.ENHANCED_NULLABILITY_MARK)
}
}
is DynamicType -> tBuilder.appendSignature(MangleConstant.DYNAMIC_MARK)
is FlexibleType -> {
@@ -12,9 +12,11 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.hasAnnotation
import org.jetbrains.kotlin.ir.util.isVararg
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
@@ -178,6 +180,10 @@ abstract class IrMangleComputer(protected val builder: StringBuilder, private va
}
if (type.hasQuestionMark) tBuilder.appendSignature(MangleConstant.Q_MARK)
if (type.hasAnnotation(JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION)) {
tBuilder.append(MangleConstant.ENHANCED_NULLABILITY_MARK)
}
}
is IrDynamicType -> tBuilder.appendSignature(MangleConstant.DYNAMIC_MARK)
is IrErrorType -> tBuilder.appendSignature(MangleConstant.ERROR_MARK)
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.backend.common.serialization.signature
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.descriptors.WrappedDeclarationDescriptor
import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.IdSignatureComposer
+57
View File
@@ -0,0 +1,57 @@
// TARGET_BACKEND: JVM
// FILE: kt43217.kt
class A {
private val b =
object : DoubleExpression() {
override fun get(): Double {
return 0.0
}
}
val test: DoubleExpression = b
}
class C : DoubleExpression() {
override fun get() = 0.0
}
fun box(): String {
if (A().test.get() != 0.0) throw AssertionError("A().test.get() != 0.0")
if (C().get() != 0.0) throw AssertionError("C().get() != 0.0")
return "OK"
}
// FILE: DoubleExpression.java
import org.jetbrains.annotations.NotNull;
public abstract class DoubleExpression implements ObservableDouble {
@NotNull
@Override
public Object isEqualTo(double value) {
return null;
}
}
// FILE: ObservableValue.java
import org.jetbrains.annotations.NotNull;
public interface ObservableValue<T> {
@NotNull
T get();
@NotNull
default Object isEqualTo(@NotNull T value) {
return null;
}
}
// FILE: ObservableDouble.java
import org.jetbrains.annotations.NotNull;
public interface ObservableDouble extends ObservableValue<Double> {
@NotNull
Object isEqualTo(double value);
}
+46
View File
@@ -0,0 +1,46 @@
// FILE: kt43217.kt
class A {
private val b =
object : DoubleExpression() {
override fun get(): Double {
return 0.0
}
}
}
class C : DoubleExpression() {
override fun get() = 0.0
}
// FILE: DoubleExpression.java
import org.jetbrains.annotations.NotNull;
public abstract class DoubleExpression implements ObservableDouble {
@NotNull
@Override
public Object isEqualTo(double value) {
return null;
}
}
// FILE: ObservableValue.java
import org.jetbrains.annotations.NotNull;
public interface ObservableValue<T> {
@NotNull
T get();
@NotNull
default Object isEqualTo(@NotNull T value) {
return null;
}
}
// FILE: ObservableDouble.java
import org.jetbrains.annotations.NotNull;
public interface ObservableDouble extends ObservableValue<Double> {
@NotNull
Object isEqualTo(double value);
}
+25
View File
@@ -0,0 +1,25 @@
@kotlin.Metadata
public final class A$b$1 {
// source: 'kt43217.kt'
enclosing method A.<init>()V
inner (anonymous) class A$b$1
method <init>(): void
public @org.jetbrains.annotations.NotNull method get(): java.lang.Double
public synthetic bridge method get(): java.lang.Object
}
@kotlin.Metadata
public final class A {
// source: 'kt43217.kt'
private final field b: A$b$1
inner (anonymous) class A$b$1
public method <init>(): void
}
@kotlin.Metadata
public final class C {
// source: 'kt43217.kt'
public method <init>(): void
public @org.jetbrains.annotations.NotNull method get(): java.lang.Double
public synthetic bridge method get(): java.lang.Object
}
@@ -0,0 +1,25 @@
@kotlin.Metadata
public final class A$b$1 {
// source: 'kt43217.kt'
enclosing method A.<init>()V
inner (anonymous) class A$b$1
method <init>(): void
public @org.jetbrains.annotations.NotNull method get(): java.lang.Double
public synthetic bridge method get(): java.lang.Object
}
@kotlin.Metadata
public final class A {
// source: 'kt43217.kt'
private final @org.jetbrains.annotations.NotNull field b: A$b$1
inner (anonymous) class A$b$1
public method <init>(): void
}
@kotlin.Metadata
public final class C {
// source: 'kt43217.kt'
public method <init>(): void
public @org.jetbrains.annotations.NotNull method get(): java.lang.Double
public synthetic bridge method get(): java.lang.Object
}
+94
View File
@@ -0,0 +1,94 @@
FILE fqName:<root> fileName:/kt43217.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:b visibility:private modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:b type:<root>.A.b.<no name provided> visibility:private [final]
EXPRESSION_BODY
BLOCK type=<root>.A.b.<no name provided> origin=OBJECT_LITERAL
CLASS CLASS name:<no name provided> modality:FINAL visibility:local superTypes:[<root>.DoubleExpression]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A.b.<no name provided>
CONSTRUCTOR visibility:private <> () returnType:<root>.A.b.<no name provided> [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.DoubleExpression'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:<no name provided> modality:FINAL visibility:local superTypes:[<root>.DoubleExpression]'
FUN name:get visibility:public modality:FINAL <> ($this:<root>.A.b.<no name provided>) returnType:kotlin.Double [operator]
overridden:
public abstract fun get (): T of <root>.ObservableValue [operator] declared in <root>.ObservableValue
$this: VALUE_PARAMETER name:<this> type:<root>.A.b.<no name provided>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun get (): kotlin.Double [operator] declared in <root>.A.b.<no name provided>'
CONST Double type=kotlin.Double value=0.0
FUN FAKE_OVERRIDE name:isEqualTo visibility:public modality:OPEN <> ($this:<root>.DoubleExpression, value:kotlin.Double) returnType:kotlin.Any [fake_override]
overridden:
public open fun isEqualTo (value: kotlin.Double): kotlin.Any declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.DoubleExpression
VALUE_PARAMETER name:value index:0 type:kotlin.Double
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:<this> 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:<this> 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:<this> type:kotlin.Any
CONSTRUCTOR_CALL 'private constructor <init> () [primary] declared in <root>.A.b.<no name provided>' type=<root>.A.b.<no name provided> origin=OBJECT_LITERAL
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-b> visibility:private modality:FINAL <> ($this:<root>.A) returnType:<root>.A.b.<no name provided>
correspondingProperty: PROPERTY name:b visibility:private modality:FINAL [val]
$this: VALUE_PARAMETER name:<this> type:<root>.A
BLOCK_BODY
RETURN type=kotlin.Nothing from='private final fun <get-b> (): <root>.A.b.<no name provided> declared in <root>.A'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:b type:<root>.A.b.<no name provided> visibility:private [final]' type=<root>.A.b.<no name provided> origin=null
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.<get-b>' type=<root>.A 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:<this> 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:<this> 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:<this> type:kotlin.Any
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.DoubleExpression]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.DoubleExpression'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.DoubleExpression]'
FUN name:get visibility:public modality:FINAL <> ($this:<root>.C) returnType:kotlin.Double [operator]
overridden:
public abstract fun get (): T of <root>.ObservableValue [operator] declared in <root>.ObservableValue
$this: VALUE_PARAMETER name:<this> type:<root>.C
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun get (): kotlin.Double [operator] declared in <root>.C'
CONST Double type=kotlin.Double value=0.0
FUN FAKE_OVERRIDE name:isEqualTo visibility:public modality:OPEN <> ($this:<root>.DoubleExpression, value:kotlin.Double) returnType:kotlin.Any [fake_override]
overridden:
public open fun isEqualTo (value: kotlin.Double): kotlin.Any declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.DoubleExpression
VALUE_PARAMETER name:value index:0 type:kotlin.Double
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:<this> 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:<this> 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:<this> type:kotlin.Any
+46
View File
@@ -0,0 +1,46 @@
// FILE: kt43217.kt
class A {
private val b =
object : DoubleExpression() {
override fun get(): Double {
return 0.0
}
}
}
class C : DoubleExpression() {
override fun get() = 0.0
}
// FILE: DoubleExpression.java
import org.jetbrains.annotations.NotNull;
public abstract class DoubleExpression implements ObservableDouble {
@NotNull
@Override
public Object isEqualTo(double value) {
return null;
}
}
// FILE: ObservableValue.java
import org.jetbrains.annotations.NotNull;
public interface ObservableValue<T> {
@NotNull
T get();
@NotNull
default Object isEqualTo(@NotNull T value) {
return null;
}
}
// FILE: ObservableDouble.java
import org.jetbrains.annotations.NotNull;
public interface ObservableDouble extends ObservableValue<Double> {
@NotNull
Object isEqualTo(double value);
}
+118
View File
@@ -0,0 +1,118 @@
FILE fqName:<root> fileName:/kt43217.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:b visibility:private modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:b type:<root>.A.b.<no name provided> visibility:private [final]
EXPRESSION_BODY
BLOCK type=<root>.A.b.<no name provided> origin=OBJECT_LITERAL
CLASS CLASS name:<no name provided> modality:FINAL visibility:local superTypes:[<root>.DoubleExpression]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A.b.<no name provided>
CONSTRUCTOR visibility:public <> () returnType:<root>.A.b.<no name provided> [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.DoubleExpression'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:<no name provided> modality:FINAL visibility:local superTypes:[<root>.DoubleExpression]'
FUN name:get visibility:public modality:OPEN <> ($this:<root>.A.b.<no name provided>) returnType:kotlin.Double
overridden:
public abstract fun get (): @[EnhancedNullability] kotlin.Double [fake_override] declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.A.b.<no name provided>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (): kotlin.Double declared in <root>.A.b.<no name provided>'
CONST Double type=kotlin.Double value=0.0
FUN FAKE_OVERRIDE name:isEqualTo visibility:public modality:OPEN <> ($this:<root>.DoubleExpression, value:kotlin.Double) returnType:@[EnhancedNullability] kotlin.Any [fake_override]
annotations:
NotNull(value = <null>)
Override
overridden:
public open fun isEqualTo (value: kotlin.Double): @[EnhancedNullability] kotlin.Any declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.DoubleExpression
VALUE_PARAMETER name:value index:0 type:kotlin.Double
FUN FAKE_OVERRIDE name:isEqualTo visibility:public modality:OPEN <> ($this:<root>.ObservableValue<@[FlexibleNullability] kotlin.Double?>, value:@[EnhancedNullability] kotlin.Double) returnType:@[EnhancedNullability] kotlin.Any [fake_override]
annotations:
NotNull(value = <null>)
overridden:
public open fun isEqualTo (value: @[EnhancedNullability] kotlin.Double): @[EnhancedNullability] kotlin.Any [fake_override] declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.ObservableValue<@[FlexibleNullability] kotlin.Double?>
VALUE_PARAMETER name:value index:0 type:@[EnhancedNullability] kotlin.Double
annotations:
NotNull(value = <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 [fake_override,operator] declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> 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 <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> 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 <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.A.b.<no name provided>' type=<root>.A.b.<no name provided> origin=OBJECT_LITERAL
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-b> visibility:private modality:FINAL <> ($this:<root>.A) returnType:<root>.A.b.<no name provided>
correspondingProperty: PROPERTY name:b visibility:private modality:FINAL [val]
$this: VALUE_PARAMETER name:<this> type:<root>.A
BLOCK_BODY
RETURN type=kotlin.Nothing from='private final fun <get-b> (): <root>.A.b.<no name provided> declared in <root>.A'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:b type:<root>.A.b.<no name provided> visibility:private [final]' type=<root>.A.b.<no name provided> origin=null
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.<get-b>' type=<root>.A 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:<this> 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:<this> 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:<this> type:kotlin.Any
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.DoubleExpression]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.DoubleExpression'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.DoubleExpression]'
FUN name:get visibility:public modality:OPEN <> ($this:<root>.C) returnType:kotlin.Double
overridden:
public abstract fun get (): @[EnhancedNullability] kotlin.Double [fake_override] declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.C
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (): kotlin.Double declared in <root>.C'
CONST Double type=kotlin.Double value=0.0
FUN FAKE_OVERRIDE name:isEqualTo visibility:public modality:OPEN <> ($this:<root>.DoubleExpression, value:kotlin.Double) returnType:@[EnhancedNullability] kotlin.Any [fake_override]
annotations:
NotNull(value = <null>)
Override
overridden:
public open fun isEqualTo (value: kotlin.Double): @[EnhancedNullability] kotlin.Any declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.DoubleExpression
VALUE_PARAMETER name:value index:0 type:kotlin.Double
FUN FAKE_OVERRIDE name:isEqualTo visibility:public modality:OPEN <> ($this:<root>.ObservableValue<@[FlexibleNullability] kotlin.Double?>, value:@[EnhancedNullability] kotlin.Double) returnType:@[EnhancedNullability] kotlin.Any [fake_override]
annotations:
NotNull(value = <null>)
overridden:
public open fun isEqualTo (value: @[EnhancedNullability] kotlin.Double): @[EnhancedNullability] kotlin.Any [fake_override] declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:<root>.ObservableValue<@[FlexibleNullability] kotlin.Double?>
VALUE_PARAMETER name:value index:0 type:@[EnhancedNullability] kotlin.Double
annotations:
NotNull(value = <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 [fake_override,operator] declared in <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> 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 <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> 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 <root>.DoubleExpression
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
@@ -17369,6 +17369,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/javaInterop/genericSamSmartcast.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/kt43217.kt");
}
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");
@@ -109,6 +109,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
runTest("compiler/testData/codegen/bytecodeListing/kt42879.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/kt43217.kt");
}
@TestMetadata("localFunctionInInitBlock.kt")
public void testLocalFunctionInInitBlock() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/localFunctionInInitBlock.kt");
@@ -17369,6 +17369,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/javaInterop/genericSamSmartcast.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/kt43217.kt");
}
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");
@@ -15969,6 +15969,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/javaInterop/genericSamSmartcast.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/kt43217.kt");
}
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");
@@ -109,6 +109,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
runTest("compiler/testData/codegen/bytecodeListing/kt42879.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/kt43217.kt");
}
@TestMetadata("localFunctionInInitBlock.kt")
public void testLocalFunctionInInitBlock() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/localFunctionInInitBlock.kt");
@@ -195,6 +195,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
runTest("compiler/testData/ir/irText/classes/kt31649.kt");
}
@TestMetadata("kt43217.kt")
public void testKt43217() throws Exception {
runTest("compiler/testData/ir/irText/classes/kt43217.kt");
}
@TestMetadata("lambdaInDataClassDefaultParameter.kt")
public void testLambdaInDataClassDefaultParameter() throws Exception {
runTest("compiler/testData/ir/irText/classes/lambdaInDataClassDefaultParameter.kt");