FIR2IR: drop redundant visibility check in fake override generator
This commit is contained in:
committed by
Space Team
parent
cb39221f85
commit
7205a90d9d
+2
-9
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.ir.types.*
|
|||||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||||
import org.jetbrains.kotlin.ir.util.isComposite
|
import org.jetbrains.kotlin.ir.util.isComposite
|
||||||
import org.jetbrains.kotlin.ir.util.parentAsClass
|
import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||||
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FakeOverrideGenerator(
|
class FakeOverrideGenerator(
|
||||||
@@ -49,12 +48,6 @@ class FakeOverrideGenerator(
|
|||||||
return conversionScope.withProperty(this, firProperty = null, f)
|
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 {
|
private fun IrType.containsErrorType(): Boolean {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is IrErrorType -> true
|
is IrErrorType -> true
|
||||||
@@ -218,7 +211,7 @@ class FakeOverrideGenerator(
|
|||||||
// We have already a FIR declaration for such fake override
|
// We have already a FIR declaration for such fake override
|
||||||
originalDeclaration to computeBaseSymbols(originalSymbol, computeDirectOverridden, scope, classLookupTag)
|
originalDeclaration to computeBaseSymbols(originalSymbol, computeDirectOverridden, scope, classLookupTag)
|
||||||
}
|
}
|
||||||
originalDeclaration.allowsToHaveFakeOverrideIn(klass) -> {
|
originalDeclaration.allowsToHaveFakeOverride -> {
|
||||||
// Trivial fake override case
|
// 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
|
// 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)
|
val fakeOverrideSymbol = createFakeOverrideSymbol(originalDeclaration, baseSymbol)
|
||||||
@@ -272,7 +265,7 @@ class FakeOverrideGenerator(
|
|||||||
scope, classLookupTag
|
scope, classLookupTag
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
originalDeclaration.allowsToHaveFakeOverrideIn(klass) -> {
|
originalDeclaration.allowsToHaveFakeOverride -> {
|
||||||
// Trivial fake override case
|
// 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
|
// 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)
|
val fakeOverrideSymbol = createFakeOverrideSymbol(originalDeclaration, baseSymbol)
|
||||||
|
|||||||
Generated
+6
@@ -154,6 +154,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
|
|||||||
runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt");
|
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
|
@Test
|
||||||
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
|
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
|
||||||
public void testFakeOverridesForJavaStaticMembers() throws Exception {
|
public void testFakeOverridesForJavaStaticMembers() throws Exception {
|
||||||
|
|||||||
+6
@@ -154,6 +154,12 @@ public class LightTreeFir2IrTextTestGenerated extends AbstractLightTreeFir2IrTex
|
|||||||
runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt");
|
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
|
@Test
|
||||||
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
|
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
|
||||||
public void testFakeOverridesForJavaStaticMembers() throws Exception {
|
public void testFakeOverridesForJavaStaticMembers() throws Exception {
|
||||||
|
|||||||
+60
@@ -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
|
||||||
+60
@@ -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() {}
|
||||||
|
}
|
||||||
Generated
+6
@@ -154,6 +154,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest {
|
|||||||
runTest("compiler/testData/ir/irText/classes/enumWithSecondaryCtor.kt");
|
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
|
@Test
|
||||||
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
|
@TestMetadata("fakeOverridesForJavaStaticMembers.kt")
|
||||||
public void testFakeOverridesForJavaStaticMembers() throws Exception {
|
public void testFakeOverridesForJavaStaticMembers() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user