// !LANGUAGE: +StrictJavaNullabilityAssertions // TARGET_BACKEND: JVM // IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // JVM_TARGET: 1.8 // FILE: box.kt import kotlin.test.* fun box(): String { val actualIndices = mutableListOf() val actualValues = mutableListOf() for ((index, i) in J.iteratorOfNotNull().withIndex()) { actualIndices += index actualValues += i } assertEquals(listOf(0, 1), actualIndices) assertEquals(listOf(42, -42), actualValues) return "OK" } // FILE: J.java import java.util.*; import org.jetbrains.annotations.*; public class J { public static Iterator<@NotNull Integer> iteratorOfNotNull() { List list = new ArrayList<>(); list.add(42); list.add(-42); return list.iterator(); } } // FILE: NotNull.java package org.jetbrains.annotations; import java.lang.annotation.*; // org.jetbrains.annotations used in the compiler is version 13, whose @NotNull does not support the TYPE_USE target (version 15 does). // We're using our own @org.jetbrains.annotations.NotNull for testing purposes. @Documented @Retention(RetentionPolicy.CLASS) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE}) public @interface NotNull { }