From 9e5c9efadf397e6f91342b76876b080fa45cae28 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 20 Jan 2021 11:49:39 +0300 Subject: [PATCH] FIR2IR: don't generate IrGetObject for anonymous objects --- .../runners/ir/Fir2IrTextTestGenerated.java | 6 + .../kotlin/fir/backend/Fir2IrVisitor.kt | 3 +- .../firProblems/AnnotationLoader.fir.kt.txt | 90 +++++++++ .../firProblems/AnnotationLoader.fir.txt | 181 ++++++++++++++++++ .../ir/irText/firProblems/AnnotationLoader.kt | 32 ++++ .../firProblems/AnnotationLoader.kt.txt | 88 +++++++++ .../irText/firProblems/AnnotationLoader.txt | 180 +++++++++++++++++ .../test/runners/ir/IrTextTestGenerated.java | 6 + 8 files changed, 585 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.kt.txt create mode 100644 compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.txt create mode 100644 compiler/testData/ir/irText/firProblems/AnnotationLoader.kt create mode 100644 compiler/testData/ir/irText/firProblems/AnnotationLoader.kt.txt create mode 100644 compiler/testData/ir/irText/firProblems/AnnotationLoader.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 3fc97204f64..7271c45b46c 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 @@ -2074,6 +2074,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/firProblems/AnnotationInAnnotation.kt"); } + @Test + @TestMetadata("AnnotationLoader.kt") + public void testAnnotationLoader() throws Exception { + runTest("compiler/testData/ir/irText/firProblems/AnnotationLoader.kt"); + } + @Test @TestMetadata("candidateSymbol.kt") public void testCandidateSymbol() throws Exception { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index d450a6b19ee..8427a0e5a48 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -385,7 +385,8 @@ class Fir2IrVisitor( // Object case val firClass = boundSymbol.fir as FirClass val irClass = classifierStorage.getCachedIrClass(firClass)!! - if (firClass.classKind == ClassKind.OBJECT && !isThisForClassPhysicallyAvailable(irClass)) { + // NB: IR generates anonymous objects as classes, not singleton objects + if (firClass is FirRegularClass && firClass.classKind == ClassKind.OBJECT && !isThisForClassPhysicallyAvailable(irClass)) { return thisReceiverExpression.convertWithOffsets { startOffset, endOffset -> IrGetObjectValueImpl(startOffset, endOffset, irClass.defaultType, irClass.symbol) } diff --git a/compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.kt.txt b/compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.kt.txt new file mode 100644 index 00000000000..d5b69b11743 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.kt.txt @@ -0,0 +1,90 @@ +interface Visitor { + abstract fun visit() + fun visitArray(): Visitor? { + return null + } + + fun visitAnnotation(): Visitor? { + return null + } + +} + +class AnnotationLoader { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + fun loadAnnotation(): Visitor? { + return { // BLOCK + local class : Visitor { + private constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + override fun visit() { + } + + override fun visitArray(): Visitor? { + return { // BLOCK + local class : Visitor { + private constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + override fun visit() { + .foo() + } + + } + + () + } + } + + override fun visitAnnotation(): Visitor? { + val visitor: Visitor = CHECK_NOT_NULL(arg0 = .loadAnnotation()) + return { // BLOCK + local class : Visitor { + private constructor() /* primary */ { + super/*Any*/() + /* () */ + + .#<$$delegate_0> = visitor + } + + override fun visit() { + } + + override fun visitArray(): Visitor? { + return .#<$$delegate_0>.visitArray() + } + + override fun visitAnnotation(): Visitor? { + return .#<$$delegate_0>.visitAnnotation() + } + + local /* final field */ val <$$delegate_0>: Visitor + + } + + () + } + } + + private fun foo() { + } + + } + + () + } + } + +} diff --git a/compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.txt b/compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.txt new file mode 100644 index 00000000000..4a4e4fe278c --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/AnnotationLoader.fir.txt @@ -0,0 +1,181 @@ +FILE fqName: fileName:/AnnotationLoader.kt + CLASS INTERFACE name:Visitor modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Visitor + FUN name:visit visibility:public modality:ABSTRACT <> ($this:.Visitor) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.Visitor + FUN name:visitArray visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? + $this: VALUE_PARAMETER name: type:.Visitor + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitArray (): .Visitor? declared in .Visitor' + CONST Null type=kotlin.Nothing? value=null + FUN name:visitAnnotation visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? + $this: VALUE_PARAMETER name: type:.Visitor + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitAnnotation (): .Visitor? declared in .Visitor' + CONST Null type=kotlin.Nothing? 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 [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:AnnotationLoader modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader + CONSTRUCTOR visibility:public <> () returnType:.AnnotationLoader [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:AnnotationLoader modality:FINAL visibility:public superTypes:[kotlin.Any]' + FUN name:loadAnnotation visibility:public modality:FINAL <> ($this:.AnnotationLoader) returnType:.Visitor? + $this: VALUE_PARAMETER name: type:.AnnotationLoader + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun loadAnnotation (): .Visitor? declared in .AnnotationLoader' + BLOCK type=.AnnotationLoader.loadAnnotation. origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader.loadAnnotation. + CONSTRUCTOR visibility:private <> () returnType:.AnnotationLoader.loadAnnotation. [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor]' + FUN name:visit visibility:public modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation.) returnType:kotlin.Unit + overridden: + public abstract fun visit (): kotlin.Unit declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + BLOCK_BODY + FUN name:visitArray visibility:public modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation.) returnType:.Visitor? + overridden: + public open fun visitArray (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun visitArray (): .Visitor? declared in .AnnotationLoader.loadAnnotation.' + BLOCK type=.AnnotationLoader.loadAnnotation..visitArray. origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader.loadAnnotation..visitArray. + CONSTRUCTOR visibility:private <> () returnType:.AnnotationLoader.loadAnnotation..visitArray. [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor]' + FUN name:visit visibility:public modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation..visitArray.) returnType:kotlin.Unit + overridden: + public abstract fun visit (): kotlin.Unit declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitArray. + BLOCK_BODY + CALL 'private final fun foo (): kotlin.Unit declared in .AnnotationLoader.loadAnnotation.' type=kotlin.Unit origin=null + $this: GET_VAR ': .AnnotationLoader.loadAnnotation. declared in .AnnotationLoader.loadAnnotation..visitArray' type=.AnnotationLoader.loadAnnotation. origin=null + FUN FAKE_OVERRIDE name:visitArray visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? [fake_override] + overridden: + public open fun visitArray (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.Visitor + FUN FAKE_OVERRIDE name:visitAnnotation visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? [fake_override] + overridden: + public open fun visitAnnotation (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.Visitor + 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 + CONSTRUCTOR_CALL 'private constructor () [primary] declared in .AnnotationLoader.loadAnnotation..visitArray.' type=.AnnotationLoader.loadAnnotation..visitArray. origin=OBJECT_LITERAL + FUN name:visitAnnotation visibility:public modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation.) returnType:.Visitor? + overridden: + public open fun visitAnnotation (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + BLOCK_BODY + VAR name:visitor type:.Visitor [val] + CALL 'public final fun CHECK_NOT_NULL (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): T0 of kotlin.internal.ir.CHECK_NOT_NULL declared in kotlin.internal.ir' type=.Visitor origin=EXCLEXCL + : .Visitor + arg0: CALL 'public final fun loadAnnotation (): .Visitor? declared in .AnnotationLoader' type=.Visitor? origin=null + $this: GET_VAR ': .AnnotationLoader declared in .AnnotationLoader.loadAnnotation' type=.AnnotationLoader origin=null + RETURN type=kotlin.Nothing from='public final fun visitAnnotation (): .Visitor? declared in .AnnotationLoader.loadAnnotation.' + BLOCK type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + CONSTRUCTOR visibility:private <> () returnType:.AnnotationLoader.loadAnnotation..visitAnnotation. [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor]' + SET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.Visitor visibility:local [final]' type=kotlin.Unit origin=EQ + receiver: GET_VAR ': .AnnotationLoader.loadAnnotation..visitAnnotation. declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=null + value: GET_VAR 'val visitor: .Visitor [val] declared in .AnnotationLoader.loadAnnotation..visitAnnotation' type=.Visitor origin=null + FUN name:visit visibility:public modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation..visitAnnotation.) returnType:kotlin.Unit + overridden: + public abstract fun visit (): kotlin.Unit declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + BLOCK_BODY + FUN DELEGATED_MEMBER name:visitArray visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation..visitAnnotation.) returnType:.Visitor? + overridden: + public open fun visitArray (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitArray (): .Visitor? declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' + CALL 'public open fun visitArray (): .Visitor? declared in .Visitor' type=.Visitor? origin=null + $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.Visitor visibility:local [final]' type=.Visitor origin=null + receiver: GET_VAR ': .AnnotationLoader.loadAnnotation..visitAnnotation. declared in .AnnotationLoader.loadAnnotation..visitAnnotation..visitArray' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=null + FUN DELEGATED_MEMBER name:visitAnnotation visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation..visitAnnotation.) returnType:.Visitor? + overridden: + public open fun visitAnnotation (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitAnnotation (): .Visitor? declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' + CALL 'public open fun visitAnnotation (): .Visitor? declared in .Visitor' type=.Visitor? origin=null + $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.Visitor visibility:local [final]' type=.Visitor origin=null + receiver: GET_VAR ': .AnnotationLoader.loadAnnotation..visitAnnotation. declared in .AnnotationLoader.loadAnnotation..visitAnnotation..visitAnnotation' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=null + FIELD DELEGATE name:<$$delegate_0> type:.Visitor visibility:local [final] + 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 + CONSTRUCTOR_CALL 'private constructor () [primary] declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=OBJECT_LITERAL + FUN name:foo visibility:private modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation.) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + 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 + CONSTRUCTOR_CALL 'private constructor () [primary] declared in .AnnotationLoader.loadAnnotation.' type=.AnnotationLoader.loadAnnotation. origin=OBJECT_LITERAL + 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/AnnotationLoader.kt b/compiler/testData/ir/irText/firProblems/AnnotationLoader.kt new file mode 100644 index 00000000000..46e7250cdea --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/AnnotationLoader.kt @@ -0,0 +1,32 @@ +interface Visitor { + fun visit() + + fun visitArray(): Visitor? = null + + fun visitAnnotation(): Visitor? = null +} + +class AnnotationLoader { + fun loadAnnotation(): Visitor? { + return object : Visitor { + override fun visit() {} + + override fun visitArray(): Visitor? { + return object : Visitor { + override fun visit() { + foo() + } + } + } + + override fun visitAnnotation(): Visitor? { + val visitor = loadAnnotation()!! + return object : Visitor by visitor { + override fun visit() {} + } + } + + private fun foo() {} + } + } +} diff --git a/compiler/testData/ir/irText/firProblems/AnnotationLoader.kt.txt b/compiler/testData/ir/irText/firProblems/AnnotationLoader.kt.txt new file mode 100644 index 00000000000..4e20960ab55 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/AnnotationLoader.kt.txt @@ -0,0 +1,88 @@ +interface Visitor { + abstract fun visit() + fun visitArray(): Visitor? { + return null + } + + fun visitAnnotation(): Visitor? { + return null + } + +} + +class AnnotationLoader { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + fun loadAnnotation(): Visitor? { + return { // BLOCK + local class : Visitor { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + override fun visit() { + } + + override fun visitArray(): Visitor? { + return { // BLOCK + local class : Visitor { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + override fun visit() { + .foo() + } + + } + + () + } + } + + override fun visitAnnotation(): Visitor? { + val visitor: Visitor = CHECK_NOT_NULL(arg0 = .loadAnnotation()) + return { // BLOCK + local class : Visitor { + constructor() /* primary */ { + super/*Any*/() + /* () */ + + } + + private /* final field */ val $$delegate_0: Visitor = visitor + override fun visitAnnotation(): Visitor? { + return .#$$delegate_0.visitAnnotation() + } + + override fun visitArray(): Visitor? { + return .#$$delegate_0.visitArray() + } + + override fun visit() { + } + + } + + () + } + } + + private fun foo() { + } + + } + + () + } + } + +} diff --git a/compiler/testData/ir/irText/firProblems/AnnotationLoader.txt b/compiler/testData/ir/irText/firProblems/AnnotationLoader.txt new file mode 100644 index 00000000000..ef5d0e7b1a9 --- /dev/null +++ b/compiler/testData/ir/irText/firProblems/AnnotationLoader.txt @@ -0,0 +1,180 @@ +FILE fqName: fileName:/AnnotationLoader.kt + CLASS INTERFACE name:Visitor modality:ABSTRACT visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Visitor + FUN name:visit visibility:public modality:ABSTRACT <> ($this:.Visitor) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.Visitor + FUN name:visitArray visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? + $this: VALUE_PARAMETER name: type:.Visitor + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitArray (): .Visitor? declared in .Visitor' + CONST Null type=kotlin.Nothing? value=null + FUN name:visitAnnotation visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? + $this: VALUE_PARAMETER name: type:.Visitor + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitAnnotation (): .Visitor? declared in .Visitor' + CONST Null type=kotlin.Nothing? 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 [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:AnnotationLoader modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader + CONSTRUCTOR visibility:public <> () returnType:.AnnotationLoader [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:AnnotationLoader modality:FINAL visibility:public superTypes:[kotlin.Any]' + FUN name:loadAnnotation visibility:public modality:FINAL <> ($this:.AnnotationLoader) returnType:.Visitor? + $this: VALUE_PARAMETER name: type:.AnnotationLoader + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun loadAnnotation (): .Visitor? declared in .AnnotationLoader' + BLOCK type=.AnnotationLoader.loadAnnotation. origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader.loadAnnotation. + CONSTRUCTOR visibility:public <> () returnType:.AnnotationLoader.loadAnnotation. [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor]' + FUN name:visit visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation.) returnType:kotlin.Unit + overridden: + public abstract fun visit (): kotlin.Unit declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + BLOCK_BODY + FUN name:visitArray visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation.) returnType:.Visitor? + overridden: + public open fun visitArray (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitArray (): .Visitor? declared in .AnnotationLoader.loadAnnotation.' + BLOCK type=.AnnotationLoader.loadAnnotation..visitArray. origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader.loadAnnotation..visitArray. + CONSTRUCTOR visibility:public <> () returnType:.AnnotationLoader.loadAnnotation..visitArray. [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor]' + FUN name:visit visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation..visitArray.) returnType:kotlin.Unit + overridden: + public abstract fun visit (): kotlin.Unit declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitArray. + BLOCK_BODY + CALL 'private final fun foo (): kotlin.Unit declared in .AnnotationLoader.loadAnnotation.' type=kotlin.Unit origin=null + $this: GET_VAR ': .AnnotationLoader.loadAnnotation. declared in .AnnotationLoader.loadAnnotation..visitArray' type=.AnnotationLoader.loadAnnotation. 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 [fake_override,operator] declared in .Visitor + $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 .Visitor + $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 .Visitor + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:visitAnnotation visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? [fake_override] + overridden: + public open fun visitAnnotation (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.Visitor + FUN FAKE_OVERRIDE name:visitArray visibility:public modality:OPEN <> ($this:.Visitor) returnType:.Visitor? [fake_override] + overridden: + public open fun visitArray (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.Visitor + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .AnnotationLoader.loadAnnotation..visitArray.' type=.AnnotationLoader.loadAnnotation..visitArray. origin=OBJECT_LITERAL + FUN name:visitAnnotation visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation.) returnType:.Visitor? + overridden: + public open fun visitAnnotation (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + BLOCK_BODY + VAR name:visitor type:.Visitor [val] + CALL 'public final fun CHECK_NOT_NULL (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): T0 of kotlin.internal.ir.CHECK_NOT_NULL declared in kotlin.internal.ir' type=.Visitor origin=EXCLEXCL + : .Visitor + arg0: CALL 'public final fun loadAnnotation (): .Visitor? declared in .AnnotationLoader' type=.Visitor? origin=null + $this: GET_VAR ': .AnnotationLoader declared in .AnnotationLoader.loadAnnotation' type=.AnnotationLoader origin=null + RETURN type=kotlin.Nothing from='public open fun visitAnnotation (): .Visitor? declared in .AnnotationLoader.loadAnnotation.' + BLOCK type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=OBJECT_LITERAL + CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + CONSTRUCTOR visibility:public <> () returnType:.AnnotationLoader.loadAnnotation..visitAnnotation. [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name: modality:FINAL visibility:local superTypes:[.Visitor]' + FIELD DELEGATE name:$$delegate_0 type:.Visitor visibility:private [final] + EXPRESSION_BODY + GET_VAR 'val visitor: .Visitor [val] declared in .AnnotationLoader.loadAnnotation..visitAnnotation' type=.Visitor origin=null + FUN DELEGATED_MEMBER name:visitAnnotation visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation..visitAnnotation.) returnType:.Visitor? + overridden: + public open fun visitAnnotation (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitAnnotation (): .Visitor? declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' + CALL 'public open fun visitAnnotation (): .Visitor? declared in .Visitor' type=.Visitor? origin=null + $this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:.Visitor visibility:private [final]' type=.Visitor origin=null + receiver: GET_VAR ': .AnnotationLoader.loadAnnotation..visitAnnotation. declared in .AnnotationLoader.loadAnnotation..visitAnnotation..visitAnnotation' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=null + FUN DELEGATED_MEMBER name:visitArray visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation..visitAnnotation.) returnType:.Visitor? + overridden: + public open fun visitArray (): .Visitor? declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun visitArray (): .Visitor? declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' + CALL 'public open fun visitArray (): .Visitor? declared in .Visitor' type=.Visitor? origin=null + $this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:.Visitor visibility:private [final]' type=.Visitor origin=null + receiver: GET_VAR ': .AnnotationLoader.loadAnnotation..visitAnnotation. declared in .AnnotationLoader.loadAnnotation..visitAnnotation..visitArray' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=null + FUN name:visit visibility:public modality:OPEN <> ($this:.AnnotationLoader.loadAnnotation..visitAnnotation.) returnType:kotlin.Unit + overridden: + public abstract fun visit (): kotlin.Unit declared in .Visitor + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation..visitAnnotation. + 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 [fake_override,operator] declared in .Visitor + $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 .Visitor + $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 .Visitor + $this: VALUE_PARAMETER name: type:kotlin.Any + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .AnnotationLoader.loadAnnotation..visitAnnotation.' type=.AnnotationLoader.loadAnnotation..visitAnnotation. origin=OBJECT_LITERAL + FUN name:foo visibility:private modality:FINAL <> ($this:.AnnotationLoader.loadAnnotation.) returnType:kotlin.Unit + $this: VALUE_PARAMETER name: type:.AnnotationLoader.loadAnnotation. + 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 [fake_override,operator] declared in .Visitor + $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 .Visitor + $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 .Visitor + $this: VALUE_PARAMETER name: type:kotlin.Any + CONSTRUCTOR_CALL 'public constructor () [primary] declared in .AnnotationLoader.loadAnnotation.' type=.AnnotationLoader.loadAnnotation. origin=OBJECT_LITERAL + 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 3f34ba8a394..5d7d7842cbd 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 @@ -2074,6 +2074,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest { runTest("compiler/testData/ir/irText/firProblems/AnnotationInAnnotation.kt"); } + @Test + @TestMetadata("AnnotationLoader.kt") + public void testAnnotationLoader() throws Exception { + runTest("compiler/testData/ir/irText/firProblems/AnnotationLoader.kt"); + } + @Test @TestMetadata("candidateSymbol.kt") public void testCandidateSymbol() throws Exception {