Skip to content

Commit 301fa11

Browse files
committed
Only extract parameter and method type-accesses once
Previously we extracted them whenever something was non-external, but this led to re-extraction when an instance of a generic type defined in source was extracted multiple times.
1 parent 8d970a3 commit 301fa11

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: Stri
9393
ftw.writeHasLocation(ftw.fileId, ftw.getWholeFileLocation())
9494
ftw.writeCupackage(ftw.fileId, pkgId)
9595

96-
fileExtractor.extractClassSource(irDecl, extractDeclarations = !irDecl.isFileClass, extractStaticInitializer = false, extractPrivateMembers = false)
96+
fileExtractor.extractClassSource(irDecl, extractDeclarations = !irDecl.isFileClass, extractStaticInitializer = false, extractPrivateMembers = false, extractFunctionBodies = false)
9797
} else {
98-
fileExtractor.extractDeclaration(irDecl, extractPrivateMembers = false)
98+
fileExtractor.extractDeclaration(irDecl, extractPrivateMembers = false, extractFunctionBodies = false)
9999
}
100100
}
101101

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ open class KotlinFileExtractor(
7474
}
7575
}
7676

77-
file.declarations.map { extractDeclaration(it, extractPrivateMembers = true) }
77+
file.declarations.map { extractDeclaration(it, extractPrivateMembers = true, extractFunctionBodies = true) }
7878
extractStaticInitializer(file, null)
7979
CommentExtractor(this, file, tw.fileId).extract()
8080
}
@@ -98,7 +98,7 @@ open class KotlinFileExtractor(
9898
else -> true
9999
}
100100

101-
fun extractDeclaration(declaration: IrDeclaration, extractPrivateMembers: Boolean) {
101+
fun extractDeclaration(declaration: IrDeclaration, extractPrivateMembers: Boolean, extractFunctionBodies: Boolean) {
102102
with("declaration", declaration) {
103103
if (!shouldExtractDecl(declaration, extractPrivateMembers))
104104
return
@@ -107,13 +107,13 @@ open class KotlinFileExtractor(
107107
if (isExternalDeclaration(declaration)) {
108108
extractExternalClassLater(declaration)
109109
} else {
110-
extractClassSource(declaration, extractDeclarations = true, extractStaticInitializer = true, extractPrivateMembers = extractPrivateMembers)
110+
extractClassSource(declaration, extractDeclarations = true, extractStaticInitializer = true, extractPrivateMembers = extractPrivateMembers, extractFunctionBodies = extractFunctionBodies)
111111
}
112112
}
113113
is IrFunction -> {
114114
val parentId = useDeclarationParent(declaration.parent, false)?.cast<DbReftype>()
115115
if (parentId != null) {
116-
extractFunction(declaration, parentId, true, null, listOf())
116+
extractFunction(declaration, parentId, extractFunctionBodies, null, listOf())
117117
}
118118
Unit
119119
}
@@ -130,7 +130,7 @@ open class KotlinFileExtractor(
130130
is IrEnumEntry -> {
131131
val parentId = useDeclarationParent(declaration.parent, false)?.cast<DbReftype>()
132132
if (parentId != null) {
133-
extractEnumEntry(declaration, parentId)
133+
extractEnumEntry(declaration, parentId, extractFunctionBodies)
134134
}
135135
Unit
136136
}
@@ -360,7 +360,7 @@ open class KotlinFileExtractor(
360360
}
361361

362362
private fun extractLocalTypeDeclStmt(c: IrClass, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
363-
val id = extractClassSource(c, extractDeclarations = true, extractStaticInitializer = true, extractPrivateMembers = true).cast<DbClass>()
363+
val id = extractClassSource(c, extractDeclarations = true, extractStaticInitializer = true, extractPrivateMembers = true, extractFunctionBodies = true).cast<DbClass>()
364364
extractLocalTypeDeclStmt(id, c, callable, parent, idx)
365365
}
366366

@@ -372,7 +372,7 @@ open class KotlinFileExtractor(
372372
tw.writeHasLocation(stmtId, locId)
373373
}
374374

375-
fun extractClassSource(c: IrClass, extractDeclarations: Boolean, extractStaticInitializer: Boolean, extractPrivateMembers: Boolean): Label<out DbClassorinterface> {
375+
fun extractClassSource(c: IrClass, extractDeclarations: Boolean, extractStaticInitializer: Boolean, extractPrivateMembers: Boolean, extractFunctionBodies: Boolean): Label<out DbClassorinterface> {
376376
with("class source", c) {
377377
DeclarationStackAdjuster(c).use {
378378

@@ -410,7 +410,7 @@ open class KotlinFileExtractor(
410410

411411
c.typeParameters.mapIndexed { idx, param -> extractTypeParameter(param, idx) }
412412
if (extractDeclarations) {
413-
c.declarations.map { extractDeclaration(it, extractPrivateMembers) }
413+
c.declarations.map { extractDeclaration(it, extractPrivateMembers = extractPrivateMembers, extractFunctionBodies = extractFunctionBodies) }
414414
if (extractStaticInitializer)
415415
extractStaticInitializer(c, id)
416416
}
@@ -515,11 +515,11 @@ open class KotlinFileExtractor(
515515
return FieldResult(instanceId, instanceName)
516516
}
517517

518-
private fun extractValueParameter(vp: IrValueParameter, parent: Label<out DbCallable>, idx: Int, typeSubstitution: TypeSubstitution?, parentSourceDeclaration: Label<out DbCallable>, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?): TypeResults {
518+
private fun extractValueParameter(vp: IrValueParameter, parent: Label<out DbCallable>, idx: Int, typeSubstitution: TypeSubstitution?, parentSourceDeclaration: Label<out DbCallable>, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?, extractTypeAccess: Boolean): TypeResults {
519519
with("value parameter", vp) {
520520
val location = getLocation(vp, classTypeArgsIncludingOuterClasses)
521521
val id = useValueParameter(vp, parent)
522-
if (!isExternalDeclaration(vp)) {
522+
if (extractTypeAccess) {
523523
extractTypeAccessRecursive(vp.type, location, id, -1)
524524
}
525525
return extractValueParameter(id, vp.type, vp.name.asString(), location, parent, idx, typeSubstitution, useValueParameter(vp, parentSourceDeclaration), vp.isVararg)
@@ -706,13 +706,13 @@ open class KotlinFileExtractor(
706706
val extReceiver = f.extensionReceiverParameter
707707
val idxOffset = if (extReceiver != null) 1 else 0
708708
val paramTypes = f.valueParameters.mapIndexed { i, vp ->
709-
extractValueParameter(vp, id, i + idxOffset, typeSubstitution, sourceDeclaration, classTypeArgsIncludingOuterClasses)
709+
extractValueParameter(vp, id, i + idxOffset, typeSubstitution, sourceDeclaration, classTypeArgsIncludingOuterClasses, extractTypeAccess = extractBody)
710710
}
711711
val allParamTypes = if (extReceiver != null) {
712712
val extendedType = useType(extReceiver.type)
713713
tw.writeKtExtensionFunctions(id.cast<DbMethod>(), extendedType.javaResult.id, extendedType.kotlinResult.id)
714714

715-
val t = extractValueParameter(extReceiver, id, 0, null, sourceDeclaration, classTypeArgsIncludingOuterClasses)
715+
val t = extractValueParameter(extReceiver, id, 0, null, sourceDeclaration, classTypeArgsIncludingOuterClasses, extractTypeAccess = extractBody)
716716
listOf(t) + paramTypes
717717
} else {
718718
paramTypes
@@ -741,7 +741,7 @@ open class KotlinFileExtractor(
741741
tw.writeMethods(methodId, shortName.nameInDB, "${shortName.nameInDB}$paramsSignature", returnType.javaResult.id, parentId, sourceDeclaration.cast<DbMethod>())
742742
tw.writeMethodsKotlinType(methodId, returnType.kotlinResult.id)
743743

744-
if (!isExternalDeclaration(f)) {
744+
if (extractBody) {
745745
extractTypeAccessRecursive(f.returnType, locId, id, -1)
746746
}
747747

@@ -874,7 +874,7 @@ open class KotlinFileExtractor(
874874
}
875875
}
876876

877-
fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>) {
877+
fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>, extractTypeAccess: Boolean) {
878878
with("enum entry", ee) {
879879
DeclarationStackAdjuster(ee).use {
880880
val id = useEnumEntry(ee)
@@ -884,7 +884,7 @@ open class KotlinFileExtractor(
884884
val locId = tw.getLocation(ee)
885885
tw.writeHasLocation(id, locId)
886886

887-
if (!isExternalDeclaration(ee)) {
887+
if (extractTypeAccess) {
888888
val fieldDeclarationId = tw.getFreshIdLabel<DbFielddecl>()
889889
tw.writeFielddecls(fieldDeclarationId, parentId)
890890
tw.writeFieldDeclaredIn(id, fieldDeclarationId, 0)

0 commit comments

Comments
 (0)