Skip to content

Commit d4cf877

Browse files
committed
Rework parent lookup in isUnspecialised
1 parent 8ebdaf1 commit d4cf877

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import com.github.codeql.KotlinUsesExtractor
44
import com.github.codeql.getJavaEquivalentClassId
55
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
66
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
7+
import org.jetbrains.kotlin.backend.common.lower.parents
78
import org.jetbrains.kotlin.descriptors.ClassKind
89
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
910
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
1011
import org.jetbrains.kotlin.ir.declarations.IrClass
11-
import org.jetbrains.kotlin.ir.declarations.IrField
1212
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
1313
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
1414
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass
2828
import org.jetbrains.kotlin.name.FqName
2929
import org.jetbrains.kotlin.name.Name
3030
import org.jetbrains.kotlin.types.Variance
31+
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
3132

3233
fun IrType.substituteTypeArguments(params: List<IrTypeParameter>, arguments: List<IrTypeArgument>) =
3334
when(this) {
@@ -221,17 +222,12 @@ fun isUnspecialised(paramsContainer: IrTypeParametersContainer, args: List<IrTyp
221222
}
222223
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
223224

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
225+
val parentClass = paramsContainer.parents.firstIsInstanceOrNull<IrClass>()
229226

230227
val parentUnspecialised = when {
231228
remainingArgs.isEmpty() -> true
232-
parent == null -> false
233-
parent !is IrClass -> false
234-
else -> isUnspecialised(parent as IrClass, remainingArgs)
229+
parentClass == null -> false
230+
else -> isUnspecialised(parentClass, remainingArgs)
235231
}
236232
return unspecialisedHere && parentUnspecialised
237233
}

0 commit comments

Comments
 (0)