From 83a1f687a12255b5496496a1dbd7b9e07be644d1 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 23 May 2022 12:05:52 +0200 Subject: [PATCH 1/4] Kotlin: Add 1.5.0 specific files --- .../utils/versions/v_1_5_0/Descriptors.kt | 17 +++++++++++++++ .../utils/versions/v_1_5_0/FileEntry.kt | 5 +++++ .../utils/versions/v_1_5_0/Functions.kt | 8 +++++++ .../kotlin/utils/versions/v_1_5_0/Psi2Ir.kt | 21 +++++++++++++++++++ .../kotlin/utils/versions/v_1_5_0/Types.kt | 7 +++++++ 5 files changed, 58 insertions(+) create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Descriptors.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/FileEntry.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Functions.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Psi2Ir.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Types.kt diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Descriptors.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Descriptors.kt new file mode 100644 index 00000000000..d2a3de0b2c4 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Descriptors.kt @@ -0,0 +1,17 @@ +package com.github.codeql.utils.versions + +import com.github.codeql.KotlinUsesExtractor +import com.github.codeql.Severity +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator +import org.jetbrains.kotlin.ir.util.SymbolTable + +@OptIn(ObsoleteDescriptorBasedAPI::class) +fun KotlinUsesExtractor.getIrStubFromDescriptor(generateStub: (DeclarationStubGenerator) -> TIrStub) : TIrStub? = + (pluginContext.symbolTable as? SymbolTable) ?.let { + val stubGenerator = DeclarationStubGenerator(pluginContext.moduleDescriptor, it, pluginContext.languageVersionSettings) + generateStub(stubGenerator) + } ?: run { + logger.error("Plugin context has no symbol table, couldn't get IR stub") + null + } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/FileEntry.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/FileEntry.kt new file mode 100644 index 00000000000..cdefc93f18f --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/FileEntry.kt @@ -0,0 +1,5 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.ir.SourceManager + +typealias FileEntry = SourceManager.FileEntry \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Functions.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Functions.kt new file mode 100644 index 00000000000..2fd45e905d9 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Functions.kt @@ -0,0 +1,8 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.ir.declarations.IrClass + +fun functionN(pluginContext: IrPluginContext): (Int) -> IrClass { + return { i -> pluginContext.irBuiltIns.functionFactory.functionN(i) } +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Psi2Ir.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Psi2Ir.kt new file mode 100644 index 00000000000..16ee288d05a --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Psi2Ir.kt @@ -0,0 +1,21 @@ +package com.github.codeql.utils.versions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi2ir.PsiSourceManager + +class Psi2Ir : Psi2IrFacade { + companion object { + val psiManager = PsiSourceManager() + } + + override fun getKtFile(irFile: IrFile): KtFile? { + return psiManager.getKtFile(irFile) + } + + override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? { + return psiManager.findPsiElement(irElement, irFile) + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Types.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Types.kt new file mode 100644 index 00000000000..15a64232e37 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/Types.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.backend.jvm.codegen.isRawType +import org.jetbrains.kotlin.ir.types.IrSimpleType + + +fun IrSimpleType.isRawType() = this.isRawType() \ No newline at end of file From 9df9d3ad03eeb38cf0b6e339d37bc08b11d47cf6 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 23 May 2022 12:06:29 +0200 Subject: [PATCH 2/4] Kotlin: Add 1.5.10 specific files --- .../utils/versions/v_1_5_10/Descriptors.kt | 17 +++++++++++++++ .../utils/versions/v_1_5_10/FileEntry.kt | 5 +++++ .../utils/versions/v_1_5_10/Functions.kt | 8 +++++++ .../kotlin/utils/versions/v_1_5_10/Psi2Ir.kt | 21 +++++++++++++++++++ .../kotlin/utils/versions/v_1_5_10/Types.kt | 7 +++++++ 5 files changed, 58 insertions(+) create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Descriptors.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/FileEntry.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Functions.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Psi2Ir.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Types.kt diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Descriptors.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Descriptors.kt new file mode 100644 index 00000000000..d2a3de0b2c4 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Descriptors.kt @@ -0,0 +1,17 @@ +package com.github.codeql.utils.versions + +import com.github.codeql.KotlinUsesExtractor +import com.github.codeql.Severity +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator +import org.jetbrains.kotlin.ir.util.SymbolTable + +@OptIn(ObsoleteDescriptorBasedAPI::class) +fun KotlinUsesExtractor.getIrStubFromDescriptor(generateStub: (DeclarationStubGenerator) -> TIrStub) : TIrStub? = + (pluginContext.symbolTable as? SymbolTable) ?.let { + val stubGenerator = DeclarationStubGenerator(pluginContext.moduleDescriptor, it, pluginContext.languageVersionSettings) + generateStub(stubGenerator) + } ?: run { + logger.error("Plugin context has no symbol table, couldn't get IR stub") + null + } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/FileEntry.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/FileEntry.kt new file mode 100644 index 00000000000..cdefc93f18f --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/FileEntry.kt @@ -0,0 +1,5 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.ir.SourceManager + +typealias FileEntry = SourceManager.FileEntry \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Functions.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Functions.kt new file mode 100644 index 00000000000..2fd45e905d9 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Functions.kt @@ -0,0 +1,8 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.ir.declarations.IrClass + +fun functionN(pluginContext: IrPluginContext): (Int) -> IrClass { + return { i -> pluginContext.irBuiltIns.functionFactory.functionN(i) } +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Psi2Ir.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Psi2Ir.kt new file mode 100644 index 00000000000..16ee288d05a --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Psi2Ir.kt @@ -0,0 +1,21 @@ +package com.github.codeql.utils.versions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi2ir.PsiSourceManager + +class Psi2Ir : Psi2IrFacade { + companion object { + val psiManager = PsiSourceManager() + } + + override fun getKtFile(irFile: IrFile): KtFile? { + return psiManager.getKtFile(irFile) + } + + override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? { + return psiManager.findPsiElement(irElement, irFile) + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Types.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Types.kt new file mode 100644 index 00000000000..15a64232e37 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_10/Types.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.backend.jvm.codegen.isRawType +import org.jetbrains.kotlin.ir.types.IrSimpleType + + +fun IrSimpleType.isRawType() = this.isRawType() \ No newline at end of file From 0dfbe7adfb71776832f8db358769eb361fc87507 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 23 May 2022 12:06:38 +0200 Subject: [PATCH 3/4] Kotlin: Add 1.5.21 specific files --- .../utils/versions/v_1_5_21/Descriptors.kt | 18 ++++++++++++++++++ .../utils/versions/v_1_5_21/FileEntry.kt | 5 +++++ .../utils/versions/v_1_5_21/Functions.kt | 8 ++++++++ .../kotlin/utils/versions/v_1_5_21/Psi2Ir.kt | 18 ++++++++++++++++++ .../kotlin/utils/versions/v_1_5_21/Types.kt | 7 +++++++ 5 files changed, 56 insertions(+) create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Descriptors.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/FileEntry.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Functions.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Psi2Ir.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Types.kt diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Descriptors.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Descriptors.kt new file mode 100644 index 00000000000..dac7205218e --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Descriptors.kt @@ -0,0 +1,18 @@ +package com.github.codeql.utils.versions + +import com.github.codeql.KotlinUsesExtractor +import com.github.codeql.Severity +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator +import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl + +@OptIn(ObsoleteDescriptorBasedAPI::class) +fun KotlinUsesExtractor.getIrStubFromDescriptor(generateStub: (DeclarationStubGenerator) -> TIrStub) : TIrStub? = + (pluginContext.symbolTable as? SymbolTable) ?.let { + val stubGenerator = DeclarationStubGeneratorImpl(pluginContext.moduleDescriptor, it, pluginContext.languageVersionSettings) + generateStub(stubGenerator) + } ?: run { + logger.error("Plugin context has no symbol table, couldn't get IR stub") + null + } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/FileEntry.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/FileEntry.kt new file mode 100644 index 00000000000..e09b6baa52e --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/FileEntry.kt @@ -0,0 +1,5 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.ir.IrFileEntry + +typealias FileEntry = IrFileEntry \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Functions.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Functions.kt new file mode 100644 index 00000000000..2fd45e905d9 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Functions.kt @@ -0,0 +1,8 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.ir.declarations.IrClass + +fun functionN(pluginContext: IrPluginContext): (Int) -> IrClass { + return { i -> pluginContext.irBuiltIns.functionFactory.functionN(i) } +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Psi2Ir.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Psi2Ir.kt new file mode 100644 index 00000000000..256a8b3bb63 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Psi2Ir.kt @@ -0,0 +1,18 @@ +package com.github.codeql.utils.versions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.backend.common.psi.PsiSourceManager +import org.jetbrains.kotlin.backend.jvm.ir.getKtFile +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.psi.KtFile + +class Psi2Ir: Psi2IrFacade { + override fun getKtFile(irFile: IrFile): KtFile? { + return irFile.getKtFile() + } + + override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? { + return PsiSourceManager.findPsiElement(irElement, irFile) + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Types.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Types.kt new file mode 100644 index 00000000000..15a64232e37 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_21/Types.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.backend.jvm.codegen.isRawType +import org.jetbrains.kotlin.ir.types.IrSimpleType + + +fun IrSimpleType.isRawType() = this.isRawType() \ No newline at end of file From ccc6d2501affb9d868da48841b0b3573bd98746b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 23 May 2022 12:07:21 +0200 Subject: [PATCH 4/4] Kotlin: adjust build scripts to include versions 1.5.0, 1.5.10, and 1.5.21 --- java/kotlin-extractor/build.gradle | 7 ++++++- java/kotlin-extractor/kotlin_plugin_versions.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/build.gradle b/java/kotlin-extractor/build.gradle index 96fb8453b94..dc5ea536c32 100644 --- a/java/kotlin-extractor/build.gradle +++ b/java/kotlin-extractor/build.gradle @@ -30,8 +30,13 @@ sourceSets { // change the excludes for building with other versions: excludes = [ "utils/versions/v_1_4_32/*.kt", + "utils/versions/v_1_5_0/*.kt", + "utils/versions/v_1_5_10/*.kt", + "utils/versions/v_1_5_21/*.kt", "utils/versions/v_1_5_31/*.kt", - "utils/versions/v_1_6_10/*.kt"] + "utils/versions/v_1_6_10/*.kt", + // "utils/versions/v_1_6_20/*.kt", + ] } } } diff --git a/java/kotlin-extractor/kotlin_plugin_versions.py b/java/kotlin-extractor/kotlin_plugin_versions.py index 5c947c56c2e..54066c5a2ea 100755 --- a/java/kotlin-extractor/kotlin_plugin_versions.py +++ b/java/kotlin-extractor/kotlin_plugin_versions.py @@ -19,7 +19,7 @@ def version_string_to_tuple(version): m = re.match(r'([0-9]+)\.([0-9]+)\.([0-9]+)', version) return tuple([int(m.group(i)) for i in range(1, 4)]) -many_versions = [ '1.4.32', '1.5.31', '1.6.10', '1.6.20' ] +many_versions = [ '1.4.32', '1.5.0', '1.5.10', '1.5.21', '1.5.31', '1.6.10', '1.6.20' ] many_versions_tuples = [version_string_to_tuple(v) for v in many_versions]