Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ae86fcb

Browse files
tamasvajkigfoo
authored andcommitted
Split main extractor file
1 parent 2dfe50c commit ae86fcb

7 files changed

Lines changed: 2316 additions & 2273 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.github.codeql
2+
3+
import com.semmle.extractor.java.OdasaOutput
4+
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
5+
import org.jetbrains.kotlin.ir.declarations.IrClass
6+
import java.io.File
7+
import java.util.ArrayList
8+
import java.util.HashSet
9+
import java.util.zip.GZIPOutputStream
10+
11+
class ExternalClassExtractor(val logger: FileLogger, val sourceFilePath: String, val pluginContext: IrPluginContext) {
12+
13+
val externalClassesDone = HashSet<IrClass>()
14+
val externalClassWorkList = ArrayList<IrClass>()
15+
16+
fun extractLater(c: IrClass): Boolean {
17+
val ret = externalClassesDone.add(c)
18+
if(ret) externalClassWorkList.add(c)
19+
return ret
20+
}
21+
22+
fun extractExternalClasses() {
23+
val output = OdasaOutput(false, logger)
24+
output.setCurrentSourceFile(File(sourceFilePath))
25+
do {
26+
val nextBatch = ArrayList(externalClassWorkList)
27+
externalClassWorkList.clear()
28+
nextBatch.forEach { irClass ->
29+
output.getTrapLockerForClassFile(irClass).useAC { locker ->
30+
locker.getTrapFileManager().useAC { manager ->
31+
if(manager == null) {
32+
logger.info("Skipping extracting class ${irClass.name}")
33+
} else {
34+
GZIPOutputStream(manager.getFile().outputStream()).bufferedWriter().use { trapFileBW ->
35+
val tw =
36+
ClassFileTrapWriter(TrapLabelManager(), trapFileBW, getIrClassBinaryPath(irClass))
37+
val fileExtractor = KotlinFileExtractor(logger, tw, manager, this, pluginContext)
38+
fileExtractor.extractClassSource(irClass)
39+
}
40+
}
41+
}
42+
}
43+
}
44+
} while (externalClassWorkList.isNotEmpty())
45+
output.writeTrapSet()
46+
}
47+
48+
}

0 commit comments

Comments
 (0)