From 082544e88c598c1354cf48bebb0d210cf583e8f4 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 5 Oct 2022 15:25:45 +0200 Subject: [PATCH] Kotlin: Extract `lateinit` modifier --- .../src/main/kotlin/KotlinFileExtractor.kt | 7 +++++++ java/ql/lib/semmle/code/java/Modifier.qll | 7 +++++-- .../test/kotlin/library-tests/modifiers/modifiers.expected | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index b7aff59b599..049e6d28e48 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -1141,6 +1141,10 @@ open class KotlinFileExtractor( } extractVisibility(p, id, p.visibility) + + if (p.isLateinit) { + addModifiers(id, "lateinit") + } } } } @@ -1291,6 +1295,9 @@ open class KotlinFileExtractor( if (!v.isVar) { addModifiers(varId, "final") } + if (v.isLateinit) { + addModifiers(varId, "lateinit") + } } } diff --git a/java/ql/lib/semmle/code/java/Modifier.qll b/java/ql/lib/semmle/code/java/Modifier.qll index 64c0cd6ec9d..7dbd4d90726 100644 --- a/java/ql/lib/semmle/code/java/Modifier.qll +++ b/java/ql/lib/semmle/code/java/Modifier.qll @@ -67,10 +67,10 @@ abstract class Modifiable extends Element { /** Holds if this element has an `inline` modifier. */ predicate isInline() { this.hasModifier("inline") } - /** Holds if this element has an `noinline` modifier. */ + /** Holds if this element has a `noinline` modifier. */ predicate isNoinline() { this.hasModifier("noinline") } - /** Holds if this element has an `crossinline` modifier. */ + /** Holds if this element has a `crossinline` modifier. */ predicate isCrossinline() { this.hasModifier("crossinline") } /** Holds if this element has a `suspend` modifier. */ @@ -93,4 +93,7 @@ abstract class Modifiable extends Element { /** Holds if this element has a `strictfp` modifier. */ predicate isStrictfp() { this.hasModifier("strictfp") } + + /** Holds if this element has a `lateinit` modifier. */ + predicate isLateinit() { this.hasModifier("lateinit") } } diff --git a/java/ql/test/kotlin/library-tests/modifiers/modifiers.expected b/java/ql/test/kotlin/library-tests/modifiers/modifiers.expected index 96f54eaadad..572423554e9 100644 --- a/java/ql/test/kotlin/library-tests/modifiers/modifiers.expected +++ b/java/ql/test/kotlin/library-tests/modifiers/modifiers.expected @@ -49,7 +49,9 @@ | modifiers.kt:30:1:36:1 | LateInit | Class | public | | modifiers.kt:30:8:36:1 | LateInit | Constructor | public | | modifiers.kt:31:5:31:40 | test0 | Field | private | +| modifiers.kt:31:5:31:40 | test0 | Property | lateinit | | modifiers.kt:31:5:31:40 | test0 | Property | private | | modifiers.kt:31:22:31:40 | getTest0$private | Method | private | | modifiers.kt:31:22:31:40 | setTest0$private | Method | private | | modifiers.kt:33:5:35:5 | fn | Method | public | +| modifiers.kt:34:9:34:36 | LateInit test1 | LocalVariableDecl | lateinit |