diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index c347668abcc..5d14517f5aa 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -46857,6 +46857,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/toArray/kt3177-toTypedArray.kt"); } + @Test + @TestMetadata("kt44152.kt") + public void testKt44152() throws Exception { + runTest("compiler/testData/codegen/box/toArray/kt44152.kt"); + } + @Test @TestMetadata("returnToTypedArray.kt") public void testReturnToTypedArray() throws Exception { diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt index 63e0fe1c99f..6818e36bad8 100644 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/KtSourceElement.kt @@ -221,7 +221,7 @@ class KtOffsetsOnlySourceElement( // TODO: consider renaming to something like AstBasedSourceElement sealed class KtSourceElement : AbstractKtSourceElement() { - abstract val elementType: IElementType + abstract val elementType: IElementType? abstract val kind: KtSourceElementKind abstract val lighterASTNode: LighterASTNode abstract val treeStructure: FlyweightCapableTreeStructure @@ -233,11 +233,11 @@ sealed class KtSourceElement : AbstractKtSourceElement() { abstract override fun equals(other: Any?): Boolean } -// NB: in certain situations, psi.node could be null +// NB: in certain situations, psi.node could be null (see e.g. KT-44152) // Potentially exceptions can be provoked by elementType / lighterASTNode sealed class KtPsiSourceElement(val psi: PsiElement) : KtSourceElement() { - override val elementType: IElementType - get() = psi.node.elementType + override val elementType: IElementType? + get() = psi.node?.elementType override val startOffset: Int get() = psi.textRange.startOffset diff --git a/compiler/testData/codegen/box/toArray/kt44152.kt b/compiler/testData/codegen/box/toArray/kt44152.kt new file mode 100644 index 00000000000..72375b53dfd --- /dev/null +++ b/compiler/testData/codegen/box/toArray/kt44152.kt @@ -0,0 +1,17 @@ +// SKIP_JDK6 +// TARGET_BACKEND: JVM_IR +// FULL_JDK +// WITH_STDLIB +// USE_PSI_CLASS_FILES_READING +// Based on incorrectToArrayDetection.kt + +import java.lang.reflect.Modifier + +abstract class A : Collection { + protected fun foo(x: Array): Array = x +} + +fun box(): String { + val method = A::class.java.declaredMethods.single { it.name == "foo" } + return if (Modifier.isProtected(method.modifiers)) "OK" else "Fail: $method" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index ce482556508..db05a8adce4 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -46857,6 +46857,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/toArray/kt3177-toTypedArray.kt"); } + @Test + @TestMetadata("kt44152.kt") + public void testKt44152() throws Exception { + runTest("compiler/testData/codegen/box/toArray/kt44152.kt"); + } + @Test @TestMetadata("returnToTypedArray.kt") public void testReturnToTypedArray() throws Exception {