Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0c6e209

Browse files
tamasvajkigfoo
authored andcommitted
Kotlin: extract type parameters
1 parent db5afe8 commit 0c6e209

4 files changed

Lines changed: 41 additions & 0 deletions

File tree

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
302302
return tw.getLabelFor(getTypeParameterLabel(param))
303303
}
304304

305+
private fun extractTypeParameter(tp: IrTypeParameter, optParentid: Optional<Label<out DbTypeorcallable>>) {
306+
val id = useTypeParameter(tp)
307+
308+
if (!optParentid.isPresent) {
309+
logger.warnElement(Severity.ErrorSevere, "Couldn't find expected parent of type parameter.", tp)
310+
return
311+
}
312+
313+
tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, optParentid.get())
314+
val locId = tw.getLocation(tp)
315+
tw.writeHasLocation(id, locId)
316+
317+
// todo: add type bounds
318+
}
319+
305320
private fun getClassLabel(c: IrClass): String {
306321
val pkg = c.packageFqName?.asString() ?: ""
307322
val cls = c.name.asString()
@@ -365,6 +380,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
365380
}
366381
}
367382
}
383+
384+
c.typeParameters.map { extractTypeParameter(it, Optional.of(id)) }
385+
368386
c.declarations.map { extractDeclaration(it, Optional.of(id)) }
369387

370388
extractObjectInitializerFunction(c, id)
@@ -552,6 +570,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
552570
val extendedType = useType(extReceiver.type)
553571
tw.writeKtExtensionFunctions(id, extendedType)
554572
}
573+
574+
f.typeParameters.map { extractTypeParameter(it, Optional.of(id)) }
575+
555576
currentFunction = null
556577
}
557578

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package foo.bar
2+
3+
fun <S> Int.f(s: S): S {
4+
return s
5+
}
6+
7+
class C1<T>(val t: T) {
8+
fun f1(t: T) {}
9+
fun <U> f2(u: U) {}
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
genericType
2+
| generics.kt:7:10:7:10 | T | generics.kt:7:1:10:1 | C1 |
3+
genericFunction
4+
| generics.kt:3:6:3:6 | S | generics.kt:3:1:5:1 | f |
5+
| generics.kt:9:10:9:10 | U | generics.kt:9:5:9:23 | f2 |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import java
2+
3+
query predicate genericType(TypeVariable tv, RefType rt) { tv.getGenericType() = rt }
4+
5+
query predicate genericFunction(TypeVariable tv, GenericCallable c) { tv.getGenericCallable() = c }

0 commit comments

Comments
 (0)