Skip to content

Commit 2600dcd

Browse files
committed
Fix extracting type accesses relating to proprerty getters/setters and SAM-converted methods
These should be handled the same as regular methods: extract type accesses for parameters and methods only if we're extracting "from source", i.e. at some point we're descended from extractFileContents.
1 parent 301fa11 commit 2600dcd

File tree

2 files changed

+13
-93
lines changed

2 files changed

+13
-93
lines changed

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ open class KotlinFileExtractor(
113113
is IrFunction -> {
114114
val parentId = useDeclarationParent(declaration.parent, false)?.cast<DbReftype>()
115115
if (parentId != null) {
116-
extractFunction(declaration, parentId, extractFunctionBodies, null, listOf())
116+
extractFunction(declaration, parentId, extractBody = extractFunctionBodies, extractMethodAndParameterTypeAccesses = extractFunctionBodies, null, listOf())
117117
}
118118
Unit
119119
}
@@ -123,7 +123,7 @@ open class KotlinFileExtractor(
123123
is IrProperty -> {
124124
val parentId = useDeclarationParent(declaration.parent, false)?.cast<DbReftype>()
125125
if (parentId != null) {
126-
extractProperty(declaration, parentId, true, null, listOf())
126+
extractProperty(declaration, parentId, extractBackingField = true, extractFunctionBodies = extractFunctionBodies, null, listOf())
127127
}
128128
Unit
129129
}
@@ -350,8 +350,8 @@ open class KotlinFileExtractor(
350350
c.declarations.map {
351351
if (shouldExtractDecl(it, false)) {
352352
when(it) {
353-
is IrFunction -> extractFunction(it, id, false, typeParamSubstitution, argsIncludingOuterClasses)
354-
is IrProperty -> extractProperty(it, id, false, typeParamSubstitution, argsIncludingOuterClasses)
353+
is IrFunction -> extractFunction(it, id, extractBody = false, extractMethodAndParameterTypeAccesses = false, typeParamSubstitution, argsIncludingOuterClasses)
354+
is IrProperty -> extractProperty(it, id, extractBackingField = false, extractFunctionBodies = false, typeParamSubstitution, argsIncludingOuterClasses)
355355
else -> {}
356356
}
357357
}
@@ -680,7 +680,7 @@ open class KotlinFileExtractor(
680680
}
681681
}
682682

683-
fun extractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?, idOverride: Label<DbMethod>? = null): Label<out DbCallable>? {
683+
fun extractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean, extractMethodAndParameterTypeAccesses: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?, idOverride: Label<DbMethod>? = null): Label<out DbCallable>? {
684684
if (isFake(f)) return null
685685

686686
with("function", f) {
@@ -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, extractTypeAccess = extractBody)
709+
extractValueParameter(vp, id, i + idxOffset, typeSubstitution, sourceDeclaration, classTypeArgsIncludingOuterClasses, extractTypeAccess = extractMethodAndParameterTypeAccesses)
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, extractTypeAccess = extractBody)
715+
val t = extractValueParameter(extReceiver, id, 0, null, sourceDeclaration, classTypeArgsIncludingOuterClasses, extractTypeAccess = extractMethodAndParameterTypeAccesses)
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 (extractBody) {
744+
if (extractMethodAndParameterTypeAccesses) {
745745
extractTypeAccessRecursive(f.returnType, locId, id, -1)
746746
}
747747

@@ -808,7 +808,7 @@ open class KotlinFileExtractor(
808808
return id
809809
}
810810

811-
fun extractProperty(p: IrProperty, parentId: Label<out DbReftype>, extractBackingField: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) {
811+
fun extractProperty(p: IrProperty, parentId: Label<out DbReftype>, extractBackingField: Boolean, extractFunctionBodies: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) {
812812
with("property", p) {
813813
if (isFake(p)) return
814814

@@ -824,7 +824,7 @@ open class KotlinFileExtractor(
824824
val setter = p.setter
825825

826826
if (getter != null) {
827-
val getterId = extractFunction(getter, parentId, extractBackingField, typeSubstitution, classTypeArgsIncludingOuterClasses)?.cast<DbMethod>()
827+
val getterId = extractFunction(getter, parentId, extractBody = extractFunctionBodies, extractMethodAndParameterTypeAccesses = extractFunctionBodies, typeSubstitution, classTypeArgsIncludingOuterClasses)?.cast<DbMethod>()
828828
if (getterId != null) {
829829
tw.writeKtPropertyGetters(id, getterId)
830830
}
@@ -838,7 +838,7 @@ open class KotlinFileExtractor(
838838
if (!p.isVar) {
839839
logger.errorElement("!isVar property with a setter", p)
840840
}
841-
val setterId = extractFunction(setter, parentId, extractBackingField, typeSubstitution, classTypeArgsIncludingOuterClasses)?.cast<DbMethod>()
841+
val setterId = extractFunction(setter, parentId, extractBody = extractFunctionBodies, extractMethodAndParameterTypeAccesses = extractFunctionBodies, typeSubstitution, classTypeArgsIncludingOuterClasses)?.cast<DbMethod>()
842842
if (setterId != null) {
843843
tw.writeKtPropertySetters(id, setterId)
844844
}
@@ -4015,7 +4015,7 @@ open class KotlinFileExtractor(
40154015
helper.extractParameterToFieldAssignmentInConstructor("<fn>", functionType, fieldId, 0, 1)
40164016

40174017
// add implementation function
4018-
extractFunction(samMember, classId, false, null, null, ids.function)
4018+
extractFunction(samMember, classId, extractBody = false, extractMethodAndParameterTypeAccesses = true, null, null, ids.function)
40194019

40204020
//body
40214021
val blockId = tw.getFreshIdLabel<DbBlock>()
@@ -4191,7 +4191,7 @@ open class KotlinFileExtractor(
41914191
val id = extractGeneratedClass(ids, superTypes, tw.getLocation(localFunction), localFunction)
41924192

41934193
// Extract local function as a member
4194-
extractFunction(localFunction, id, true, null, listOf())
4194+
extractFunction(localFunction, id, extractBody = true, extractMethodAndParameterTypeAccesses = true, null, listOf())
41954195

41964196
return id
41974197
}

java/ql/test/kotlin/library-tests/exprs/exprs.expected

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,86 +1717,6 @@
17171717
| exprs.kt:268:3:268:9 | updated | exprs.kt:261:1:270:1 | inPlaceOperators | VarAccess |
17181718
| exprs.kt:268:3:268:14 | ...%=... | exprs.kt:261:1:270:1 | inPlaceOperators | AssignRemExpr |
17191719
| exprs.kt:268:14:268:14 | 1 | exprs.kt:261:1:270:1 | inPlaceOperators | IntegerLiteral |
1720-
| file:///!unknown-binary-location/SomePredicate.class:0:0:0:0 | T | file://:0:0:0:0 | <none> | TypeAccess |
1721-
| file:///!unknown-binary-location/SomePredicate.class:0:0:0:0 | boolean | file://:0:0:0:0 | <none> | TypeAccess |
1722-
| file:///!unknown-binary-location/kotlin/Function0.class:0:0:0:0 | R | file://:0:0:0:0 | <none> | TypeAccess |
1723-
| file:///!unknown-binary-location/kotlin/Function1.class:0:0:0:0 | P1 | file://:0:0:0:0 | <none> | TypeAccess |
1724-
| file:///!unknown-binary-location/kotlin/Function1.class:0:0:0:0 | R | file://:0:0:0:0 | <none> | TypeAccess |
1725-
| file:///!unknown-binary-location/kotlin/Function2.class:0:0:0:0 | P1 | file://:0:0:0:0 | <none> | TypeAccess |
1726-
| file:///!unknown-binary-location/kotlin/Function2.class:0:0:0:0 | P2 | file://:0:0:0:0 | <none> | TypeAccess |
1727-
| file:///!unknown-binary-location/kotlin/Function2.class:0:0:0:0 | R | file://:0:0:0:0 | <none> | TypeAccess |
1728-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P1 | file://:0:0:0:0 | <none> | TypeAccess |
1729-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P2 | file://:0:0:0:0 | <none> | TypeAccess |
1730-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P3 | file://:0:0:0:0 | <none> | TypeAccess |
1731-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P4 | file://:0:0:0:0 | <none> | TypeAccess |
1732-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P5 | file://:0:0:0:0 | <none> | TypeAccess |
1733-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P6 | file://:0:0:0:0 | <none> | TypeAccess |
1734-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P7 | file://:0:0:0:0 | <none> | TypeAccess |
1735-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P8 | file://:0:0:0:0 | <none> | TypeAccess |
1736-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P9 | file://:0:0:0:0 | <none> | TypeAccess |
1737-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P10 | file://:0:0:0:0 | <none> | TypeAccess |
1738-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P11 | file://:0:0:0:0 | <none> | TypeAccess |
1739-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P12 | file://:0:0:0:0 | <none> | TypeAccess |
1740-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P13 | file://:0:0:0:0 | <none> | TypeAccess |
1741-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P14 | file://:0:0:0:0 | <none> | TypeAccess |
1742-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P15 | file://:0:0:0:0 | <none> | TypeAccess |
1743-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P16 | file://:0:0:0:0 | <none> | TypeAccess |
1744-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P17 | file://:0:0:0:0 | <none> | TypeAccess |
1745-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P18 | file://:0:0:0:0 | <none> | TypeAccess |
1746-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P19 | file://:0:0:0:0 | <none> | TypeAccess |
1747-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P20 | file://:0:0:0:0 | <none> | TypeAccess |
1748-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P21 | file://:0:0:0:0 | <none> | TypeAccess |
1749-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | P22 | file://:0:0:0:0 | <none> | TypeAccess |
1750-
| file:///!unknown-binary-location/kotlin/Function22.class:0:0:0:0 | R | file://:0:0:0:0 | <none> | TypeAccess |
1751-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P1 | file://:0:0:0:0 | <none> | TypeAccess |
1752-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P2 | file://:0:0:0:0 | <none> | TypeAccess |
1753-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P3 | file://:0:0:0:0 | <none> | TypeAccess |
1754-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P4 | file://:0:0:0:0 | <none> | TypeAccess |
1755-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P5 | file://:0:0:0:0 | <none> | TypeAccess |
1756-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P6 | file://:0:0:0:0 | <none> | TypeAccess |
1757-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P7 | file://:0:0:0:0 | <none> | TypeAccess |
1758-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P8 | file://:0:0:0:0 | <none> | TypeAccess |
1759-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P9 | file://:0:0:0:0 | <none> | TypeAccess |
1760-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P10 | file://:0:0:0:0 | <none> | TypeAccess |
1761-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P11 | file://:0:0:0:0 | <none> | TypeAccess |
1762-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P12 | file://:0:0:0:0 | <none> | TypeAccess |
1763-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P13 | file://:0:0:0:0 | <none> | TypeAccess |
1764-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P14 | file://:0:0:0:0 | <none> | TypeAccess |
1765-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P15 | file://:0:0:0:0 | <none> | TypeAccess |
1766-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P16 | file://:0:0:0:0 | <none> | TypeAccess |
1767-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P17 | file://:0:0:0:0 | <none> | TypeAccess |
1768-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P18 | file://:0:0:0:0 | <none> | TypeAccess |
1769-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P19 | file://:0:0:0:0 | <none> | TypeAccess |
1770-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P20 | file://:0:0:0:0 | <none> | TypeAccess |
1771-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P21 | file://:0:0:0:0 | <none> | TypeAccess |
1772-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P22 | file://:0:0:0:0 | <none> | TypeAccess |
1773-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | P23 | file://:0:0:0:0 | <none> | TypeAccess |
1774-
| file:///!unknown-binary-location/kotlin/Function23.class:0:0:0:0 | R | file://:0:0:0:0 | <none> | TypeAccess |
1775-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P1 | file://:0:0:0:0 | <none> | TypeAccess |
1776-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P2 | file://:0:0:0:0 | <none> | TypeAccess |
1777-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P3 | file://:0:0:0:0 | <none> | TypeAccess |
1778-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P4 | file://:0:0:0:0 | <none> | TypeAccess |
1779-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P5 | file://:0:0:0:0 | <none> | TypeAccess |
1780-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P6 | file://:0:0:0:0 | <none> | TypeAccess |
1781-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P7 | file://:0:0:0:0 | <none> | TypeAccess |
1782-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P8 | file://:0:0:0:0 | <none> | TypeAccess |
1783-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P9 | file://:0:0:0:0 | <none> | TypeAccess |
1784-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P10 | file://:0:0:0:0 | <none> | TypeAccess |
1785-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P11 | file://:0:0:0:0 | <none> | TypeAccess |
1786-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P12 | file://:0:0:0:0 | <none> | TypeAccess |
1787-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P13 | file://:0:0:0:0 | <none> | TypeAccess |
1788-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P14 | file://:0:0:0:0 | <none> | TypeAccess |
1789-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P15 | file://:0:0:0:0 | <none> | TypeAccess |
1790-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P16 | file://:0:0:0:0 | <none> | TypeAccess |
1791-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P17 | file://:0:0:0:0 | <none> | TypeAccess |
1792-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P18 | file://:0:0:0:0 | <none> | TypeAccess |
1793-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P19 | file://:0:0:0:0 | <none> | TypeAccess |
1794-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P20 | file://:0:0:0:0 | <none> | TypeAccess |
1795-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P21 | file://:0:0:0:0 | <none> | TypeAccess |
1796-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P22 | file://:0:0:0:0 | <none> | TypeAccess |
1797-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P23 | file://:0:0:0:0 | <none> | TypeAccess |
1798-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | P24 | file://:0:0:0:0 | <none> | TypeAccess |
1799-
| file:///!unknown-binary-location/kotlin/Function24.class:0:0:0:0 | R | file://:0:0:0:0 | <none> | TypeAccess |
18001720
| funcExprs.kt:1:1:1:46 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
18011721
| funcExprs.kt:1:26:1:37 | Function0<Integer> | file://:0:0:0:0 | <none> | TypeAccess |
18021722
| funcExprs.kt:1:26:1:37 | Integer | file://:0:0:0:0 | <none> | TypeAccess |

0 commit comments

Comments
 (0)