@@ -6,28 +6,30 @@ import com.semmle.extractor.java.OdasaOutput
66import com.semmle.util.data.StringDigestor
77import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
88import org.jetbrains.kotlin.ir.declarations.*
9+ import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
910import org.jetbrains.kotlin.ir.util.isFileClass
1011import org.jetbrains.kotlin.ir.util.packageFqName
1112import org.jetbrains.kotlin.ir.util.parentClassOrNull
13+ import org.jetbrains.kotlin.name.FqName
1214import java.io.File
1315import java.util.ArrayList
1416import java.util.HashSet
1517import java.util.zip.GZIPOutputStream
1618
1719class 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