[IR] Introduce new IdSignatures
FileSignature, CompositeSignature, LocalSignature They are needed to make possible reference any non-local declaration via signature, including private signature, type parameters and so on. - Support those new signatures in proto and klibs - Rename `isPublic` -> `isPubliclyVisible` due to changed semantic - Fix FIR - clean up code
This commit is contained in:
committed by
TeamCityServer
parent
7139785036
commit
6cdac22a23
+15
-17
@@ -5,28 +5,35 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.jvm.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.mangle.SpecialDeclarationType
|
||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaForKotlinOverridePropertyDescriptor
|
||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeAsSequence
|
||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.contains
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||
|
||||
class JvmIdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMangler) : IdSignatureDescriptor(mangler) {
|
||||
|
||||
private class JvmDescriptorBasedSignatureBuilder(mangler: KotlinMangler.DescriptorMangler) : DescriptorBasedSignatureBuilder(mangler) {
|
||||
private inner class JvmDescriptorBasedSignatureBuilder(mangler: KotlinMangler.DescriptorMangler, type: SpecialDeclarationType) : DescriptorBasedSignatureBuilder(mangler, type) {
|
||||
override fun platformSpecificFunction(descriptor: FunctionDescriptor) {
|
||||
keepTrackOfOverridesForPossiblyClashingFakeOverride(descriptor)
|
||||
}
|
||||
|
||||
override fun isKotlinPackage(descriptor: PackageFragmentDescriptor): Boolean {
|
||||
return descriptor !is LazyJavaPackageFragment
|
||||
}
|
||||
|
||||
override fun platformSpecificProperty(descriptor: PropertyDescriptor) {
|
||||
// See KT-31646
|
||||
setSpecialJavaProperty(descriptor is JavaForKotlinOverridePropertyDescriptor)
|
||||
setSyntheticJavaProperty(descriptor is SyntheticJavaPropertyDescriptor)
|
||||
keepTrackOfOverridesForPossiblyClashingFakeOverride(descriptor)
|
||||
}
|
||||
|
||||
@@ -38,6 +45,10 @@ class JvmIdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMang
|
||||
keepTrackOfOverridesForPossiblyClashingFakeOverride(descriptor)
|
||||
}
|
||||
|
||||
override fun platformSpecificModule(descriptor: ModuleDescriptor) {
|
||||
|
||||
}
|
||||
|
||||
private fun keepTrackOfOverridesForPossiblyClashingFakeOverride(descriptor: CallableMemberDescriptor) {
|
||||
if (descriptor.kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) return
|
||||
val containingClass = descriptor.containingDeclaration as? ClassDescriptor ?: return
|
||||
@@ -95,19 +106,6 @@ class JvmIdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMang
|
||||
}
|
||||
}
|
||||
|
||||
override fun createSignatureBuilder(): DescriptorBasedSignatureBuilder = JvmDescriptorBasedSignatureBuilder(mangler)
|
||||
|
||||
/* In multi-threaded environment, we cannot afford to cache a signature builder, as in IdSignatureBuilder. */
|
||||
|
||||
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
|
||||
return if (mangler.run { descriptor.isExported() }) {
|
||||
createSignatureBuilder().buildSignature(descriptor)
|
||||
} else null
|
||||
}
|
||||
|
||||
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
|
||||
return if (mangler.run { descriptor.isExportEnumEntry() }) {
|
||||
createSignatureBuilder().buildSignature(descriptor)
|
||||
} else null
|
||||
}
|
||||
override fun createSignatureBuilder(type: SpecialDeclarationType): DescriptorBasedSignatureBuilder =
|
||||
JvmDescriptorBasedSignatureBuilder(mangler, type)
|
||||
}
|
||||
-1
@@ -155,7 +155,6 @@ class JvmIrLinker(
|
||||
}
|
||||
|
||||
override fun declareIrSymbol(symbol: IrSymbol) {
|
||||
assert(symbol.isPublicApi || symbol.descriptor.isJavaDescriptor())
|
||||
if (symbol is IrFieldSymbol) {
|
||||
declareJavaFieldStub(symbol)
|
||||
} else {
|
||||
|
||||
+3
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.ir.IrExportCheck
|
||||
import org.jetbrains.kotlin.backend.common.serialization.mangle.ir.IrMangleComputer
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
@@ -87,6 +88,8 @@ abstract class AbstractJvmDescriptorMangler(private val mainDetector: MainFuncti
|
||||
// For more details see JvmPlatformOverloadsSpecificityComparator.kt
|
||||
return if (isJavaField) MangleConstant.JAVA_FIELD_SUFFIX else null
|
||||
}
|
||||
|
||||
override fun visitModuleDeclaration(descriptor: ModuleDescriptor, data: Nothing?) {} // SKIP in case of synthetic properties
|
||||
}
|
||||
|
||||
override fun getExportChecker(): KotlinExportChecker<DeclarationDescriptor> = exportChecker
|
||||
|
||||
Reference in New Issue
Block a user