Skip to content

Commit 3dee16c

Browse files
authored
Merge pull request github#14860 from igfoo/igfoo/isFake
Kotlin 2: isFake is currently broken, so assume not fake for now
2 parents 30891ca + 1998e29 commit 3dee16c

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ open class KotlinFileExtractor(
8080
globalExtensionState: KotlinExtractorGlobalState,
8181
): KotlinUsesExtractor(logger, tw, dependencyCollector, externalClassExtractor, primitiveTypeMapping, pluginContext, globalExtensionState) {
8282

83+
val usesK2 = usesK2(pluginContext)
8384
val metaAnnotationSupport = MetaAnnotationSupport(logger, pluginContext, this)
8485

8586
private inline fun <T> with(kind: String, element: IrElement, f: () -> T): T {
@@ -166,22 +167,26 @@ open class KotlinFileExtractor(
166167
else -> false
167168
}
168169

169-
@OptIn(ObsoleteDescriptorBasedAPI::class)
170-
private fun isFake(d: IrDeclarationWithVisibility): Boolean {
171-
val hasFakeVisibility = d.visibility.let { it is DelegatedDescriptorVisibility && it.delegate == Visibilities.InvisibleFake } || d.isFakeOverride
172-
if (hasFakeVisibility && !isJavaBinaryObjectMethodRedeclaration(d))
173-
return true
170+
private fun FunctionDescriptor.tryIsHiddenToOvercomeSignatureClash(d: IrFunction): Boolean {
174171
try {
175-
if ((d as? IrFunction)?.descriptor?.isHiddenToOvercomeSignatureClash == true) {
176-
return true
177-
}
172+
return this.isHiddenToOvercomeSignatureClash
178173
}
179174
catch (e: NotImplementedError) {
180175
// `org.jetbrains.kotlin.ir.descriptors.IrBasedClassConstructorDescriptor.isHiddenToOvercomeSignatureClash` throws the exception
181-
logger.warnElement("Couldn't query if element is fake, deciding it's not.", d, e)
176+
// TODO: We need a replacement for this for Kotlin 2
177+
if (!usesK2) {
178+
logger.warnElement("Couldn't query if element is fake, deciding it's not.", d, e)
179+
}
182180
return false
183181
}
184-
return false
182+
}
183+
184+
@OptIn(ObsoleteDescriptorBasedAPI::class)
185+
private fun isFake(d: IrDeclarationWithVisibility): Boolean {
186+
val hasFakeVisibility = d.visibility.let { it is DelegatedDescriptorVisibility && it.delegate == Visibilities.InvisibleFake } || d.isFakeOverride
187+
if (hasFakeVisibility && !isJavaBinaryObjectMethodRedeclaration(d))
188+
return true
189+
return (d as? IrFunction)?.descriptor?.tryIsHiddenToOvercomeSignatureClash(d) == true
185190
}
186191

187192
private fun shouldExtractDecl(declaration: IrDeclaration, extractPrivateMembers: Boolean) =

0 commit comments

Comments
 (0)