From 5c76b43fa87e07d621096f01a46c4db0dba64bb0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 8 Oct 2024 13:14:11 +0100 Subject: [PATCH] KE2: Don't call buildClassType; once we get into symbol land, stay there --- .../src/main/kotlin/entities/Class.kt | 25 +++++++++++++------ .../src/main/kotlin/entities/Types.kt | 3 ++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor2/src/main/kotlin/entities/Class.kt b/java/kotlin-extractor2/src/main/kotlin/entities/Class.kt index 59849aa7da5..effd19d1d73 100644 --- a/java/kotlin-extractor2/src/main/kotlin/entities/Class.kt +++ b/java/kotlin-extractor2/src/main/kotlin/entities/Class.kt @@ -189,7 +189,7 @@ fun KotlinFileExtractor.extractClassSource( // For non-generic types it will be zero-length list. */ private fun KotlinUsesExtractor.getClassLabel( - c: KaClassType, + c: KaClassSymbol, /* OLD: KE1 argsIncludingOuterClasses: List? @@ -202,7 +202,7 @@ private fun KotlinUsesExtractor.getClassLabel( context(KaSession) fun KotlinUsesExtractor.useClassSource(c: KaClassSymbol): Label { // For source classes, the label doesn't include any type arguments - val id = addClassLabel(buildClassType(c) as KaClassType) + val id = addClassLabel(c) return id } @@ -210,7 +210,7 @@ fun KotlinUsesExtractor.useClassSource(c: KaClassSymbol): Label?, @@ -241,8 +241,13 @@ OLD: KE1 extractClassLaterIfExternal(replacedClass) */ // TODO: This shouldn't be done here, but keeping it simple for now - val pkgId = extractPackage(c.classId.packageFqName.asString()) - tw.writeClasses_or_interfaces(it, c.classId.relativeClassName.asString(), pkgId, it) + val classId = c.classId + if (classId == null) { + TODO() // this is a local class + } else { + val pkgId = extractPackage(classId.packageFqName.asString()) + tw.writeClasses_or_interfaces(it, classId.relativeClassName.asString(), pkgId, it) + } } /* @@ -294,14 +299,18 @@ OLD: KE1 */ */ private fun KotlinUsesExtractor.getUnquotedClassLabel( - c: KaClassType, + c: KaClassSymbol, /* OLD: KE1 argsIncludingOuterClasses: List? */ ): ClassLabelResults { - val pkg = c.classId.packageFqName.asString() - val cls = c.classId.relativeClassName.asString() + val classId = c.classId + if (classId == null) { + TODO() // This is a local class + } + val pkg = classId.packageFqName.asString() + val cls = classId.relativeClassName.asString() val label = /* OLD: KE1 diff --git a/java/kotlin-extractor2/src/main/kotlin/entities/Types.kt b/java/kotlin-extractor2/src/main/kotlin/entities/Types.kt index 5d7ba3f02cd..4d8b21398b1 100644 --- a/java/kotlin-extractor2/src/main/kotlin/entities/Types.kt +++ b/java/kotlin-extractor2/src/main/kotlin/entities/Types.kt @@ -1,12 +1,13 @@ package com.github.codeql +import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol 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 = TypeResult(addClassLabel(c) /* , TODO, TODO */) + val javaResult = TypeResult(addClassLabel(c.symbol as KaClassSymbol) /* , TODO, TODO */) val kotlinResult = TypeResult(fakeKotlinType() /* , "TODO", "TODO" */) return TypeResults(javaResult, kotlinResult) }