[FIR2IR] Don't generate fake overrides for another package privates
This commit is contained in:
+10
-6
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.fir.backend.generators
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.backend.collectCallableNamesFromSupertypes
|
import org.jetbrains.kotlin.fir.backend.collectCallableNamesFromSupertypes
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.allowsToHaveFakeOverride
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.isStatic
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
|
import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||||
@@ -22,6 +19,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
internal class FakeOverrideGenerator(
|
internal class FakeOverrideGenerator(
|
||||||
@@ -57,6 +55,12 @@ internal class FakeOverrideGenerator(
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun FirCallableMemberDeclaration<*>.allowsToHaveFakeOverrideIn(klass: FirClass<*>): Boolean {
|
||||||
|
if (!allowsToHaveFakeOverride) return false
|
||||||
|
if (this.visibility != JavaVisibilities.PACKAGE_VISIBILITY) return true
|
||||||
|
return this.symbol.callableId.packageName == klass.symbol.classId.packageFqName
|
||||||
|
}
|
||||||
|
|
||||||
fun IrClass.addFakeOverrides(klass: FirClass<*>, processedCallableNames: MutableList<Name>) {
|
fun IrClass.addFakeOverrides(klass: FirClass<*>, processedCallableNames: MutableList<Name>) {
|
||||||
if (fakeOverrideMode == FakeOverrideMode.NONE) return
|
if (fakeOverrideMode == FakeOverrideMode.NONE) return
|
||||||
val superTypesCallableNames = klass.collectCallableNamesFromSupertypes(session)
|
val superTypesCallableNames = klass.collectCallableNamesFromSupertypes(session)
|
||||||
@@ -85,7 +89,7 @@ internal class FakeOverrideGenerator(
|
|||||||
declarations += irFunction.withFunction {
|
declarations += irFunction.withFunction {
|
||||||
overriddenSymbols = listOf(overriddenSymbol)
|
overriddenSymbols = listOf(overriddenSymbol)
|
||||||
}
|
}
|
||||||
} else if (fakeOverrideMode != FakeOverrideMode.SUBSTITUTION && originalFunction.allowsToHaveFakeOverride) {
|
} else if (fakeOverrideMode != FakeOverrideMode.SUBSTITUTION && originalFunction.allowsToHaveFakeOverrideIn(klass)) {
|
||||||
// Trivial fake override case
|
// Trivial fake override case
|
||||||
val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverrideFunction(
|
val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverrideFunction(
|
||||||
session, originalFunction, functionSymbol
|
session, originalFunction, functionSymbol
|
||||||
@@ -115,7 +119,7 @@ internal class FakeOverrideGenerator(
|
|||||||
declarations += irProperty.withProperty {
|
declarations += irProperty.withProperty {
|
||||||
setOverriddenSymbolsForAccessors(originalProperty, firOverriddenSymbol = baseSymbol)
|
setOverriddenSymbolsForAccessors(originalProperty, firOverriddenSymbol = baseSymbol)
|
||||||
}
|
}
|
||||||
} else if (fakeOverrideMode != FakeOverrideMode.SUBSTITUTION && originalProperty.allowsToHaveFakeOverride) {
|
} else if (fakeOverrideMode != FakeOverrideMode.SUBSTITUTION && originalProperty.allowsToHaveFakeOverrideIn(klass)) {
|
||||||
// Trivial fake override case
|
// Trivial fake override case
|
||||||
val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverrideProperty(
|
val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverrideProperty(
|
||||||
session, originalProperty, propertySymbol, derivedClassId = klass.symbol.classId
|
session, originalProperty, propertySymbol, derivedClassId = klass.symbol.classId
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ FILE fqName:<root> fileName:/fakeOverridesForJavaStaticMembers.kt
|
|||||||
FUN FAKE_OVERRIDE name:protectedStaticMethod visibility:protected/*protected static*/ modality:OPEN <> () returnType:kotlin.Unit [fake_override]
|
FUN FAKE_OVERRIDE name:protectedStaticMethod visibility:protected/*protected static*/ modality:OPEN <> () returnType:kotlin.Unit [fake_override]
|
||||||
overridden:
|
overridden:
|
||||||
protected/*protected static*/ open fun protectedStaticMethod (): kotlin.Unit declared in a.Base
|
protected/*protected static*/ open fun protectedStaticMethod (): kotlin.Unit declared in a.Base
|
||||||
FUN FAKE_OVERRIDE name:packagePrivateStaticMethod visibility:public/*package*/ modality:OPEN <> () returnType:kotlin.Unit [fake_override]
|
|
||||||
overridden:
|
|
||||||
public/*package*/ open fun packagePrivateStaticMethod (): kotlin.Unit declared in a.Base
|
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
||||||
overridden:
|
overridden:
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
||||||
|
|||||||
Reference in New Issue
Block a user