KE2: Pull type extraction out as separate from class extraction

This commit is contained in:
Ian Lynagh
2024-10-07 18:29:50 +01:00
parent b46be1b71a
commit cc09d6da5f
2 changed files with 32 additions and 29 deletions

View File

@@ -1,14 +1,11 @@
package com.github.codeql
import com.github.codeql.*
import com.github.codeql.KotlinUsesExtractor.ClassLabelResults
import com.github.codeql.KotlinUsesExtractor.TypeContext
import com.github.codeql.utils.isInterfaceLike
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.types.KaClassType
import org.jetbrains.kotlin.analysis.api.types.KaType
context(KaSession)
@OptIn(KaExperimentalApi::class)
@@ -211,7 +208,8 @@ fun KotlinUsesExtractor.useClassSource(c: KaClassSymbol): Label<out DbClassorint
// `typeArgs` can be null to describe a raw generic type.
// For non-generic types it will be zero-length list.
private fun KotlinUsesExtractor.addClassLabel(
// TODO: Should this be private?
fun KotlinUsesExtractor.addClassLabel(
c: KaClassType, // TODO cBeforeReplacement: IrClass,
/*
OLD: KE1
@@ -349,28 +347,3 @@ private fun KotlinUsesExtractor.getUnquotedClassLabel(
*/
)
}
private fun KotlinUsesExtractor.useClassType(
c: KaClassType
): TypeResults {
val javaResult = addClassLabel(c)
val kotlinResult = TypeResult(fakeKotlinType() /* , "TODO", "TODO" */)
return TypeResults(javaResult, kotlinResult)
}
fun KotlinUsesExtractor.useType(t: KaType, context: TypeContext = TypeContext.OTHER): TypeResults {
when (t) {
is KaClassType -> return useClassType(t)
else -> TODO()
}
/*
OLD: KE1
when (t) {
is IrSimpleType -> return useSimpleType(t, context)
else -> {
logger.error("Unrecognised IrType: " + t.javaClass)
return extractErrorType()
}
}
*/
}

View File

@@ -0,0 +1,30 @@
package com.github.codeql
import com.github.codeql.KotlinUsesExtractor.TypeContext
import org.jetbrains.kotlin.analysis.api.types.KaClassType
import org.jetbrains.kotlin.analysis.api.types.KaType
private fun KotlinUsesExtractor.useClassType(
c: KaClassType
): TypeResults {
val javaResult = addClassLabel(c)
val kotlinResult = TypeResult(fakeKotlinType() /* , "TODO", "TODO" */)
return TypeResults(javaResult, kotlinResult)
}
fun KotlinUsesExtractor.useType(t: KaType, context: TypeContext = TypeContext.OTHER): TypeResults {
when (t) {
is KaClassType -> return useClassType(t)
else -> TODO()
}
/*
OLD: KE1
when (t) {
is IrSimpleType -> return useSimpleType(t, context)
else -> {
logger.error("Unrecognised IrType: " + t.javaClass)
return extractErrorType()
}
}
*/
}