Skip to content

Commit 8ebdaf1

Browse files
committed
Kotlin: Fix parent class lookup from field initializers
1 parent de133e8 commit 8ebdaf1

File tree

2 files changed

+9
-13
lines changed

2 files changed

+9
-13
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
88
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
99
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
1010
import org.jetbrains.kotlin.ir.declarations.IrClass
11+
import org.jetbrains.kotlin.ir.declarations.IrField
1112
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
1213
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
1314
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
@@ -219,12 +220,18 @@ fun isUnspecialised(paramsContainer: IrTypeParametersContainer, args: List<IrTyp
219220
} ?: false
220221
}
221222
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
222-
val parent = paramsContainer.parent as? IrTypeParametersContainer
223+
224+
val fieldParent = paramsContainer.parent as? IrField
225+
val parent = if (fieldParent != null)
226+
fieldParent.parent as? IrTypeParametersContainer
227+
else
228+
paramsContainer.parent as? IrTypeParametersContainer
229+
223230
val parentUnspecialised = when {
224231
remainingArgs.isEmpty() -> true
225232
parent == null -> false
226233
parent !is IrClass -> false
227-
else -> isUnspecialised(paramsContainer.parentAsClass, remainingArgs)
234+
else -> isUnspecialised(parent as IrClass, remainingArgs)
228235
}
229236
return unspecialisedHere && parentUnspecialised
230237
}
Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +0,0 @@
1-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a call (<no name>) at generic_anonymous.kt:7:15:7:15\n ...while extracting a expression (<no name>) at generic_anonymous.kt:7:15:7:15\n ...while extracting a call (<no name>) at generic_anonymous.kt:7:17:7:22\n ...while extracting a expression (<no name>) at generic_anonymous.kt:7:17:7:22\n ...while extracting a expression (<no name>) at generic_anonymous.kt:7:23:7:22\n ...while extracting a statement (<no name>) at generic_anonymous.kt:7:23:7:22\n ...while extracting a block body (<no name>) at generic_anonymous.kt:7:15:7:22\n ...while extracting a body (<no name>) at generic_anonymous.kt:7:15:7:22\n ...while extracting a function (get) at generic_anonymous.kt:7:3:7:22\n ...while extracting a declaration (get) at generic_anonymous.kt:7:3:7:22\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
2-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a statement (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a block body (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a body (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a function (<get-x>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
3-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
4-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a expression (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a expression (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a expression (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a statement (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a block body (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a body (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a function (<get-member>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a property (member) at generic_anonymous.kt:4:7:4:20\n ...while extracting a declaration (member) at generic_anonymous.kt:4:7:4:20\n ...while extracting a class source (<no name provided>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a statement (<no name provided>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
5-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a field (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
6-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a field (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
7-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a function (<get-x>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
8-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a function (<get-x>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
9-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
10-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
11-
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a static initializer extraction (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |

0 commit comments

Comments
 (0)