FIR2IR: drop redundant visibility check in fake override generator

This commit is contained in:
Mikhail Glukhikh
2022-10-31 13:57:39 +01:00
committed by Space Team
parent cb39221f85
commit 7205a90d9d
7 changed files with 162 additions and 9 deletions
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.isComposite
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
import org.jetbrains.kotlin.name.Name
class FakeOverrideGenerator(
@@ -49,12 +48,6 @@ class FakeOverrideGenerator(
return conversionScope.withProperty(this, firProperty = null, f)
}
private fun FirCallableDeclaration.allowsToHaveFakeOverrideIn(klass: FirClass): Boolean {
if (!allowsToHaveFakeOverride) return false
if (this.visibility != JavaDescriptorVisibilities.PACKAGE_VISIBILITY) return true
return this.symbol.callableId.packageName == klass.symbol.classId.packageFqName
}
private fun IrType.containsErrorType(): Boolean {
return when (this) {
is IrErrorType -> true
@@ -218,7 +211,7 @@ class FakeOverrideGenerator(
// We have already a FIR declaration for such fake override
originalDeclaration to computeBaseSymbols(originalSymbol, computeDirectOverridden, scope, classLookupTag)
}
originalDeclaration.allowsToHaveFakeOverrideIn(klass) -> {
originalDeclaration.allowsToHaveFakeOverride -> {
// Trivial fake override case
// We've got no relevant declaration in FIR world for such a fake override in current class, thus we're creating it here
val fakeOverrideSymbol = createFakeOverrideSymbol(originalDeclaration, baseSymbol)
@@ -272,7 +265,7 @@ class FakeOverrideGenerator(
scope, classLookupTag
)
}
originalDeclaration.allowsToHaveFakeOverrideIn(klass) -> {
originalDeclaration.allowsToHaveFakeOverride -> {
// Trivial fake override case
// We've got no relevant declaration in FIR world for such a fake override in current class, thus we're creating it here
val fakeOverrideSymbol = createFakeOverrideSymbol(originalDeclaration, baseSymbol)
@@ -154,6 +154,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt");
}
@Test
@TestMetadata("fakeOverridesForJavaNonStaticMembers.kt")
public void testFakeOverridesForJavaNonStaticMembers() throws Exception {
runTest("compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt");
}
@Test
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
public void testFakeOverridesForJavaStaticMembers() throws Exception {
@@ -154,6 +154,12 @@ public class LightTreeFir2IrTextTestGenerated extends AbstractLightTreeFir2IrTex
runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt");
}
@Test
@TestMetadata("fakeOverridesForJavaNonStaticMembers.kt")
public void testFakeOverridesForJavaNonStaticMembers() throws Exception {
runTest("compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt");
}
@Test
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
public void testFakeOverridesForJavaStaticMembers() throws Exception {
@@ -0,0 +1,60 @@
FILE fqName:a fileName:/fakeOverridesForJavaNonStaticMembers.kt
CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:a.Test
CONSTRUCTOR visibility:public <> () returnType:a.Test [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in a.Base'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base]'
FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
public open fun publicMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FUN FAKE_OVERRIDE name:packagePrivateMethod visibility:public/*package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
public/*package*/ open fun packagePrivateMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
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 a.Base
$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 a.Base
$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 a.Base
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FILE fqName:<root> fileName:/fakeOverridesForJavaNonStaticMembers2.kt
CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2
CONSTRUCTOR visibility:public <> () returnType:<root>.Test2 [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in a.Base'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base]'
FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
public open fun publicMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
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 a.Base
$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 a.Base
$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 a.Base
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
@@ -0,0 +1,60 @@
FILE fqName:a fileName:/fakeOverridesForJavaNonStaticMembers.kt
CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:a.Test
CONSTRUCTOR visibility:public <> () returnType:a.Test [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in a.Base'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test modality:FINAL visibility:public superTypes:[a.Base]'
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 a.Base
$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 a.Base
$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 a.Base
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
public open fun publicMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FUN FAKE_OVERRIDE name:packagePrivateMethod visibility:public/*package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
public/*package*/ open fun packagePrivateMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FILE fqName:<root> fileName:/fakeOverridesForJavaNonStaticMembers2.kt
CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2
CONSTRUCTOR visibility:public <> () returnType:<root>.Test2 [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in a.Base'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Test2 modality:FINAL visibility:public superTypes:[a.Base]'
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 a.Base
$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 a.Base
$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 a.Base
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:publicMethod visibility:public modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
public open fun publicMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
FUN FAKE_OVERRIDE name:protectedMethod visibility:protected/*protected and package*/ modality:OPEN <> ($this:a.Base) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ open fun protectedMethod (): kotlin.Unit declared in a.Base
$this: VALUE_PARAMETER name:<this> type:a.Base
@@ -0,0 +1,22 @@
// TARGET_BACKEND: JVM
// SKIP_KT_DUMP
// FILE: fakeOverridesForJavaNonStaticMembers.kt
package a
class Test : Base()
// FILE: fakeOverridesForJavaNonStaticMembers2.kt
import a.Base
class Test2 : Base()
// FILE: a/Base.java
package a
public class Base {
public void publicMethod() {}
protected void protectedMethod() {}
void packagePrivateMethod() {}
private void privateMethod() {}
}
@@ -154,6 +154,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest {
runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt");
}
@Test
@TestMetadata("fakeOverridesForJavaNonStaticMembers.kt")
public void testFakeOverridesForJavaNonStaticMembers() throws Exception {
runTest("compiler/testData/ir/irText/classes/fakeOverridesForJavaNonStaticMembers.kt");
}
@Test
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
public void testFakeOverridesForJavaStaticMembers() throws Exception {