Skip to content

Commit d6bdc8c

Browse files
authored
Merge pull request #10178 from igfoo/igfoo/AnyDbType
Kotlin: Add AnyDbType
2 parents 1f83c58 + 5be8e45 commit d6bdc8c

File tree

4 files changed

+14
-15
lines changed

4 files changed

+14
-15
lines changed

java/kotlin-extractor/generate_dbscheme.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,12 @@ def genTable(kt, relname, columns, enum = None, kind = None, num = None, typ = N
171171
for num, typ in mapping:
172172
genTable(kt, relname, columns, enum, kind, num, typ)
173173

174+
kt.write('sealed interface AnyDbType\n')
174175
for typ in sorted(supertypes):
175-
kt.write('sealed interface Db' + upperFirst(typ))
176+
kt.write('sealed interface Db' + upperFirst(typ) + ': AnyDbType')
176177
# Sorting makes the output deterministic.
177178
names = sorted(supertypes[typ])
178-
if names:
179-
kt.write(': ')
180-
kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names)))
179+
kt.write(''.join(map(lambda name: ', Db' + upperFirst(name), names)))
181180
kt.write('\n')
182181
for alias in sorted(type_aliases):
183182
kt.write('typealias Db' + upperFirst(alias) + ' = Db' + upperFirst(type_aliases[alias]) + '\n')

java/kotlin-extractor/src/main/kotlin/Label.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import java.io.StringWriter
66
/**
77
* This represents a label (`#...`) in a TRAP file.
88
*/
9-
interface Label<T> {
10-
fun <U> cast(): Label<U> {
9+
interface Label<T: AnyDbType> {
10+
fun <U: AnyDbType> cast(): Label<U> {
1111
@Suppress("UNCHECKED_CAST")
1212
return this as Label<U>
1313
}
@@ -17,7 +17,7 @@ interface Label<T> {
1717
* The label `#i`, e.g. `#123`. Most labels we generate are of this
1818
* form.
1919
*/
20-
class IntLabel<T>(val i: Int): Label<T> {
20+
class IntLabel<T: AnyDbType>(val i: Int): Label<T> {
2121
override fun toString(): String = "#$i"
2222
}
2323

@@ -26,6 +26,6 @@ class IntLabel<T>(val i: Int): Label<T> {
2626
* shared between different components (e.g. when both the interceptor
2727
* and the extractor need to refer to the same label).
2828
*/
29-
class StringLabel<T>(val name: String): Label<T> {
29+
class StringLabel<T: AnyDbType>(val name: String): Label<T> {
3030
override fun toString(): String = "#$name"
3131
}

java/kotlin-extractor/src/main/kotlin/TrapWriter.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class TrapLabelManager {
2626
private var nextInt: Int = 100
2727

2828
/** Returns a fresh label. */
29-
fun <T> getFreshLabel(): Label<T> {
29+
fun <T: AnyDbType> getFreshLabel(): Label<T> {
3030
return IntLabel(nextInt++)
3131
}
3232

@@ -64,7 +64,7 @@ open class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelMa
6464
* `getLabelFor` instead, which allows non-existent labels to be
6565
* initialised.
6666
*/
67-
fun <T> getExistingLabelFor(key: String): Label<T>? {
67+
fun <T: AnyDbType> getExistingLabelFor(key: String): Label<T>? {
6868
return lm.labelMapping.get(key)?.cast<T>()
6969
}
7070
/**
@@ -73,7 +73,7 @@ open class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelMa
7373
* is run on it, and it is returned.
7474
*/
7575
@JvmOverloads // Needed so Java can call a method with an optional argument
76-
fun <T> getLabelFor(key: String, initialise: (Label<T>) -> Unit = {}): Label<T> {
76+
fun <T: AnyDbType> getLabelFor(key: String, initialise: (Label<T>) -> Unit = {}): Label<T> {
7777
val maybeLabel: Label<T>? = getExistingLabelFor(key)
7878
if(maybeLabel == null) {
7979
val label: Label<T> = lm.getFreshLabel()
@@ -89,7 +89,7 @@ open class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelMa
8989
/**
9090
* Returns a label for a fresh ID (i.e. a new label bound to `*`).
9191
*/
92-
fun <T> getFreshIdLabel(): Label<T> {
92+
fun <T: AnyDbType> getFreshIdLabel(): Label<T> {
9393
val label: Label<T> = lm.getFreshLabel()
9494
writeTrap("$label = *\n")
9595
return label

java/kotlin-extractor/src/main/kotlin/utils/TypeResults.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ package com.github.codeql
1212
* `shortName` is a Java primitive name (e.g. "int"), a class short name with Java-style type arguments ("InnerClass<E>" or
1313
* "OuterClass<ConcreteArgument>" or "OtherClass<? extends Bound>") or an array ("componentShortName[]").
1414
*/
15-
data class TypeResultGeneric<SignatureType,out LabelType>(val id: Label<out LabelType>, val signature: SignatureType, val shortName: String) {
16-
fun <U> cast(): TypeResult<U> {
15+
data class TypeResultGeneric<SignatureType,out LabelType: AnyDbType>(val id: Label<out LabelType>, val signature: SignatureType, val shortName: String) {
16+
fun <U: AnyDbType> cast(): TypeResult<U> {
1717
@Suppress("UNCHECKED_CAST")
1818
return this as TypeResult<U>
1919
}
@@ -25,6 +25,6 @@ typealias TypeResultWithoutSignature<T> = TypeResultGeneric<Unit,T>
2525
typealias TypeResults = TypeResultsGeneric<String>
2626
typealias TypeResultsWithoutSignatures = TypeResultsGeneric<Unit>
2727

28-
fun <T> TypeResult<T>.forgetSignature(): TypeResultWithoutSignature<T> {
28+
fun <T: AnyDbType> TypeResult<T>.forgetSignature(): TypeResultWithoutSignature<T> {
2929
return TypeResultWithoutSignature(this.id, Unit, this.shortName)
3030
}

0 commit comments

Comments
 (0)