mirror of
https://github.com/github/codeql.git
synced 2025-12-22 19:56:32 +01:00
Kotlin: Change handling of version variants in build script
This commit is contained in:
@@ -27,16 +27,12 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
|||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
main {
|
||||||
kotlin {
|
kotlin {
|
||||||
// change the excludes for building with other versions:
|
// change the excludes for building with other versions.
|
||||||
|
// Currently 1.7.0 is configured:
|
||||||
excludes = [
|
excludes = [
|
||||||
"utils/versions/v_1_4_32/*.kt",
|
"utils/versions/v_1_4_32/*.kt",
|
||||||
"utils/versions/v_1_5_0/*.kt",
|
"utils/versions/v_1_5_21/Descriptors.kt",
|
||||||
"utils/versions/v_1_5_10/*.kt",
|
"utils/versions/v_1_6_10/Descriptors.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_20/*.kt",
|
|
||||||
// "utils/versions/v_1_7_0/*.kt",
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import os
|
|||||||
import os.path
|
import os.path
|
||||||
import sys
|
import sys
|
||||||
import shlex
|
import shlex
|
||||||
|
import distutils
|
||||||
|
from distutils import dir_util
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
@@ -37,10 +39,11 @@ def is_windows():
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
# kotlinc might be kotlinc.bat or kotlinc.cmd on Windows, so we use `which` to find out what it is
|
# kotlinc might be kotlinc.bat or kotlinc.cmd on Windows, so we use `which` to find out what it is
|
||||||
kotlinc = shutil.which('kotlinc')
|
kotlinc = shutil.which('kotlinc')
|
||||||
if kotlinc is None:
|
if kotlinc is None:
|
||||||
print("Cannot build the Kotlin extractor: no kotlinc found on your PATH", file = sys.stderr)
|
print("Cannot build the Kotlin extractor: no kotlinc found on your PATH", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
javac = 'javac'
|
javac = 'javac'
|
||||||
@@ -166,7 +169,7 @@ def transform_to_embeddable(srcs):
|
|||||||
f.write(content)
|
f.write(content)
|
||||||
|
|
||||||
|
|
||||||
def compile(jars, java_jars, dependency_folder, transform_to_embeddable, output, build_dir, version):
|
def compile(jars, java_jars, dependency_folder, transform_to_embeddable, output, build_dir, current_version):
|
||||||
classpath = patterns_to_classpath(dependency_folder, jars)
|
classpath = patterns_to_classpath(dependency_folder, jars)
|
||||||
java_classpath = patterns_to_classpath(dependency_folder, java_jars)
|
java_classpath = patterns_to_classpath(dependency_folder, java_jars)
|
||||||
|
|
||||||
@@ -176,9 +179,29 @@ def compile(jars, java_jars, dependency_folder, transform_to_embeddable, output,
|
|||||||
shutil.rmtree(tmp_src_dir)
|
shutil.rmtree(tmp_src_dir)
|
||||||
shutil.copytree('src', tmp_src_dir)
|
shutil.copytree('src', tmp_src_dir)
|
||||||
|
|
||||||
for v in kotlin_plugin_versions.many_versions:
|
include_version_folder = tmp_src_dir + '/main/kotlin/utils/versions/to_include'
|
||||||
if v != version:
|
os.makedirs(include_version_folder)
|
||||||
d = tmp_src_dir + '/main/kotlin/utils/versions/v_' + v.replace('.', '_')
|
|
||||||
|
parsed_current_version = kotlin_plugin_versions.version_string_to_tuple(
|
||||||
|
current_version)
|
||||||
|
|
||||||
|
for version in kotlin_plugin_versions.many_versions:
|
||||||
|
parsed_version = kotlin_plugin_versions.version_string_to_tuple(
|
||||||
|
version)
|
||||||
|
if parsed_version[0] < parsed_current_version[0] or \
|
||||||
|
(parsed_version[0] == parsed_current_version[0] and parsed_version[1] < parsed_current_version[1]) or \
|
||||||
|
(parsed_version[0] == parsed_current_version[0] and parsed_version[1] == parsed_current_version[1] and parsed_version[2] <= parsed_current_version[2]):
|
||||||
|
d = tmp_src_dir + '/main/kotlin/utils/versions/v_' + \
|
||||||
|
version.replace('.', '_')
|
||||||
|
if os.path.exists(d):
|
||||||
|
# copy and overwrite files from the version folder to the include folder
|
||||||
|
distutils.dir_util.copy_tree(d, include_version_folder)
|
||||||
|
|
||||||
|
# remove all version folders:
|
||||||
|
for version in kotlin_plugin_versions.many_versions:
|
||||||
|
d = tmp_src_dir + '/main/kotlin/utils/versions/v_' + \
|
||||||
|
version.replace('.', '_')
|
||||||
|
if os.path.exists(d):
|
||||||
shutil.rmtree(d)
|
shutil.rmtree(d)
|
||||||
|
|
||||||
srcs = find_sources(tmp_src_dir)
|
srcs = find_sources(tmp_src_dir)
|
||||||
@@ -209,6 +232,7 @@ def compile_standalone(version):
|
|||||||
'build_standalone_' + version,
|
'build_standalone_' + version,
|
||||||
version)
|
version)
|
||||||
|
|
||||||
|
|
||||||
if args.single_version:
|
if args.single_version:
|
||||||
compile_standalone(args.single_version)
|
compile_standalone(args.single_version)
|
||||||
elif args.many:
|
elif args.many:
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ def version_string_to_tuple(version):
|
|||||||
m = re.match(r'([0-9]+)\.([0-9]+)\.([0-9]+)(.*)', version)
|
m = re.match(r'([0-9]+)\.([0-9]+)\.([0-9]+)(.*)', version)
|
||||||
return tuple([int(m.group(i)) for i in range(1, 4)] + [m.group(4)])
|
return tuple([int(m.group(i)) for i in range(1, 4)] + [m.group(4)])
|
||||||
|
|
||||||
|
# Version numbers in the list need to be in semantically increasing order
|
||||||
many_versions = [ '1.4.32', '1.5.0', '1.5.10', '1.5.21', '1.5.31', '1.6.10', '1.6.20', '1.7.0' ]
|
many_versions = [ '1.4.32', '1.5.0', '1.5.10', '1.5.21', '1.5.31', '1.6.10', '1.6.20', '1.7.0' ]
|
||||||
|
|
||||||
many_versions_tuples = [version_string_to_tuple(v) for v in many_versions]
|
many_versions_tuples = [version_string_to_tuple(v) for v in many_versions]
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
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 <TIrStub> 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
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.SourceManager
|
|
||||||
|
|
||||||
typealias FileEntry = SourceManager.FileEntry
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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) }
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
fun isUnderscoreParameter(vp: IrValueParameter) =
|
|
||||||
try {
|
|
||||||
DescriptorToSourceUtils.getSourceFromDescriptor(vp.descriptor)
|
|
||||||
?.safeAs<KtParameter>()?.isSingleUnderscore == true
|
|
||||||
} catch(e: NotImplementedError) {
|
|
||||||
// Some kinds of descriptor throw in `getSourceFromDescriptor` as that method is not normally expected to
|
|
||||||
// be applied to synthetic functions.
|
|
||||||
false
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import com.github.codeql.FileLogger
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
|
|
||||||
class Psi2Ir(private val logger: FileLogger) : Psi2IrFacade {
|
|
||||||
override fun getKtFile(irFile: IrFile): KtFile? {
|
|
||||||
logger.warn("Comment extraction is not supported for Kotlin < 1.5.20")
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? {
|
|
||||||
logger.error("Attempted comment extraction for Kotlin < 1.5.20")
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
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()
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
|
|
||||||
|
|
||||||
fun IrType.codeQlWithHasQuestionMark(b : Boolean): IrType {
|
|
||||||
return this.withHasQuestionMark(b)
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
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 <TIrStub> 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
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.SourceManager
|
|
||||||
|
|
||||||
typealias FileEntry = SourceManager.FileEntry
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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) }
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
fun isUnderscoreParameter(vp: IrValueParameter) =
|
|
||||||
try {
|
|
||||||
DescriptorToSourceUtils.getSourceFromDescriptor(vp.descriptor)
|
|
||||||
?.safeAs<KtParameter>()?.isSingleUnderscore == true
|
|
||||||
} catch(e: NotImplementedError) {
|
|
||||||
// Some kinds of descriptor throw in `getSourceFromDescriptor` as that method is not normally expected to
|
|
||||||
// be applied to synthetic functions.
|
|
||||||
false
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import com.github.codeql.FileLogger
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
|
|
||||||
class Psi2Ir(private val logger: FileLogger) : Psi2IrFacade {
|
|
||||||
override fun getKtFile(irFile: IrFile): KtFile? {
|
|
||||||
logger.warn("Comment extraction is not supported for Kotlin < 1.5.20")
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? {
|
|
||||||
logger.error("Attempted comment extraction for Kotlin < 1.5.20")
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
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()
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
|
|
||||||
|
|
||||||
fun IrType.codeQlWithHasQuestionMark(b : Boolean): IrType {
|
|
||||||
return this.withHasQuestionMark(b)
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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) }
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
fun isUnderscoreParameter(vp: IrValueParameter) =
|
|
||||||
try {
|
|
||||||
DescriptorToSourceUtils.getSourceFromDescriptor(vp.descriptor)
|
|
||||||
?.safeAs<KtParameter>()?.isSingleUnderscore == true
|
|
||||||
} catch(e: NotImplementedError) {
|
|
||||||
// Some kinds of descriptor throw in `getSourceFromDescriptor` as that method is not normally expected to
|
|
||||||
// be applied to synthetic functions.
|
|
||||||
false
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
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()
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
|
|
||||||
|
|
||||||
fun IrType.codeQlWithHasQuestionMark(b : Boolean): IrType {
|
|
||||||
return this.withHasQuestionMark(b)
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
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 <TIrStub> 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
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
|
||||||
|
|
||||||
typealias FileEntry = IrFileEntry
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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) }
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
fun isUnderscoreParameter(vp: IrValueParameter) =
|
|
||||||
try {
|
|
||||||
DescriptorToSourceUtils.getSourceFromDescriptor(vp.descriptor)
|
|
||||||
?.safeAs<KtParameter>()?.isSingleUnderscore == true
|
|
||||||
} catch(e: NotImplementedError) {
|
|
||||||
// Some kinds of descriptor throw in `getSourceFromDescriptor` as that method is not normally expected to
|
|
||||||
// be applied to synthetic functions.
|
|
||||||
false
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import com.github.codeql.FileLogger
|
|
||||||
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(private val logger: FileLogger): Psi2IrFacade {
|
|
||||||
override fun getKtFile(irFile: IrFile): KtFile? {
|
|
||||||
return irFile.getKtFile()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? {
|
|
||||||
return PsiSourceManager.findPsiElement(irElement, irFile)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
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()
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
|
|
||||||
|
|
||||||
fun IrType.codeQlWithHasQuestionMark(b : Boolean): IrType {
|
|
||||||
return this.withHasQuestionMark(b)
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
|
||||||
|
|
||||||
typealias FileEntry = IrFileEntry
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
fun isUnderscoreParameter(vp: IrValueParameter) =
|
|
||||||
try {
|
|
||||||
DescriptorToSourceUtils.getSourceFromDescriptor(vp.descriptor)
|
|
||||||
?.safeAs<KtParameter>()?.isSingleUnderscore == true
|
|
||||||
} catch(e: NotImplementedError) {
|
|
||||||
// Some kinds of descriptor throw in `getSourceFromDescriptor` as that method is not normally expected to
|
|
||||||
// be applied to synthetic functions.
|
|
||||||
false
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import com.github.codeql.FileLogger
|
|
||||||
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(private val logger: FileLogger): Psi2IrFacade {
|
|
||||||
override fun getKtFile(irFile: IrFile): KtFile? {
|
|
||||||
return irFile.getKtFile()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? {
|
|
||||||
return PsiSourceManager.findPsiElement(irElement, irFile)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
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()
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
|
|
||||||
|
|
||||||
fun IrType.codeQlWithHasQuestionMark(b : Boolean): IrType {
|
|
||||||
return this.withHasQuestionMark(b)
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
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 <TIrStub> KotlinUsesExtractor.getIrStubFromDescriptor(generateStub: (DeclarationStubGenerator) -> TIrStub) : TIrStub? =
|
|
||||||
(pluginContext.symbolTable as? SymbolTable) ?.let {
|
|
||||||
val stubGenerator = DeclarationStubGeneratorImpl(pluginContext.moduleDescriptor, it, pluginContext.irBuiltIns)
|
|
||||||
generateStub(stubGenerator)
|
|
||||||
} ?: run {
|
|
||||||
logger.error("Plugin context has no symbol table, couldn't get IR stub")
|
|
||||||
null
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
|
||||||
|
|
||||||
typealias FileEntry = IrFileEntry
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
|
||||||
|
|
||||||
fun functionN(pluginContext: IrPluginContext) = pluginContext.irBuiltIns::functionN
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import com.github.codeql.FileLogger
|
|
||||||
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(private val logger: FileLogger): Psi2IrFacade {
|
|
||||||
override fun getKtFile(irFile: IrFile): KtFile? {
|
|
||||||
return irFile.getKtFile()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? {
|
|
||||||
return PsiSourceManager.findPsiElement(irElement, irFile)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.withHasQuestionMark
|
|
||||||
|
|
||||||
fun IrType.codeQlWithHasQuestionMark(b : Boolean): IrType {
|
|
||||||
return this.withHasQuestionMark(b)
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
|
||||||
|
|
||||||
typealias FileEntry = IrFileEntry
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
|
||||||
|
|
||||||
fun functionN(pluginContext: IrPluginContext) = pluginContext.irBuiltIns::functionN
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
|
||||||
|
|
||||||
fun isUnderscoreParameter(vp: IrValueParameter) = vp.origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import com.github.codeql.FileLogger
|
|
||||||
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(private val logger: FileLogger): Psi2IrFacade {
|
|
||||||
override fun getKtFile(irFile: IrFile): KtFile? {
|
|
||||||
return irFile.getKtFile()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? {
|
|
||||||
return PsiSourceManager.findPsiElement(irElement, irFile)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package com.github.codeql.utils.versions
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.isRawType
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
|
||||||
|
|
||||||
|
|
||||||
fun IrSimpleType.isRawType() = this.isRawType()
|
|
||||||
Reference in New Issue
Block a user