Kotlin: Extract method visibility

This commit is contained in:
Ian Lynagh
2021-12-09 15:50:07 +00:00
parent 6616f452d7
commit 348ae357ed
5 changed files with 50 additions and 27 deletions

View File

@@ -8,6 +8,7 @@ import com.semmle.extractor.java.OdasaOutput
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrElement
@@ -93,6 +94,16 @@ open class KotlinFileExtractor(
return id
}
fun extractVisibility(elementForLocation: IrElement, id: Label<out DbModifiable>, v: DescriptorVisibility) {
when (v) {
DescriptorVisibilities.PRIVATE -> addModifiers(id, "private")
DescriptorVisibilities.PROTECTED -> addModifiers(id, "protected")
DescriptorVisibilities.PUBLIC -> addModifiers(id, "public")
DescriptorVisibilities.INTERNAL -> addModifiers(id, "internal")
else -> logger.warnElement(Severity.ErrorSevere, "Unexpected visibility: $v", elementForLocation)
}
}
fun extractClassModifiers(c: IrClass, id: Label<out DbClassorinterface>) {
when (c.modality) {
Modality.FINAL -> addModifiers(id, "final")
@@ -101,13 +112,7 @@ open class KotlinFileExtractor(
Modality.ABSTRACT -> addModifiers(id, "abstract")
else -> logger.warnElement(Severity.ErrorSevere, "Unexpected class modality: ${c.modality}", c)
}
when (c.visibility) {
DescriptorVisibilities.PRIVATE -> addModifiers(id, "private")
DescriptorVisibilities.PROTECTED -> addModifiers(id, "protected")
DescriptorVisibilities.PUBLIC -> addModifiers(id, "public")
DescriptorVisibilities.INTERNAL -> addModifiers(id, "internal")
else -> logger.warnElement(Severity.ErrorSevere, "Unexpected class visibility: ${c.visibility}", c)
}
extractVisibility(c, id, c.visibility)
}
fun extractClassInstance(c: IrClass, typeArgs: List<IrTypeArgument>): Label<out DbClassorinterface> {
@@ -452,6 +457,8 @@ open class KotlinFileExtractor(
extractBody(body, id)
}
extractVisibility(f, id, f.visibility)
currentFunction = null
return id
}