Skip to content

Commit 57ea34d

Browse files
committed
Unique external classes/functions by fqname
Previously we used the IrDeclaration itself, but in Kotlin 1.7 this can be ambiguous because we can get more than one copy of a class in different modules.
1 parent 8c57308 commit 57ea34d

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,30 @@ import com.semmle.extractor.java.OdasaOutput
66
import com.semmle.util.data.StringDigestor
77
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88
import org.jetbrains.kotlin.ir.declarations.*
9+
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
910
import org.jetbrains.kotlin.ir.util.isFileClass
1011
import org.jetbrains.kotlin.ir.util.packageFqName
1112
import org.jetbrains.kotlin.ir.util.parentClassOrNull
13+
import org.jetbrains.kotlin.name.FqName
1214
import java.io.File
1315
import java.util.ArrayList
1416
import java.util.HashSet
1517
import java.util.zip.GZIPOutputStream
1618

1719
class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: String, val sourceFilePath: String, val primitiveTypeMapping: PrimitiveTypeMapping, val pluginContext: IrPluginContext, val globalExtensionState: KotlinExtractorGlobalState, val diagnosticTrapWriter: TrapWriter) {
1820

19-
val externalDeclsDone = HashSet<IrDeclaration>()
21+
val externalDeclsDone = HashSet<Pair<FqName, String>>()
2022
val externalDeclWorkList = ArrayList<Pair<IrDeclaration, String>>()
2123

2224
val propertySignature = ";property"
2325
val fieldSignature = ";field"
2426

25-
fun extractLater(d: IrDeclaration, signature: String): Boolean {
27+
fun extractLater(d: IrDeclarationWithName, signature: String): Boolean {
2628
if (d !is IrClass && !isExternalFileClassMember(d)) {
2729
logger.errorElement("External declaration is neither a class, nor a top-level declaration", d)
2830
return false
2931
}
30-
val ret = externalDeclsDone.add(d)
32+
val ret = externalDeclsDone.add(Pair(d.fqNameWhenAvailable!!, signature))
3133
if (ret) externalDeclWorkList.add(Pair(d, signature))
3234
return ret
3335
}

0 commit comments

Comments
 (0)