JVM IR: lookup symbols by name in ProgressionHandlers in known classes only
Alternatively, we could improve the lookup utilities and their usages to always find the exact override of a symbol from Collection/Iterable/CharSequence/etc, but since we need to load the original symbol anyway in cases when the loop subject's type is a type parameter, we might as well simplify everything and always reference the original symbol. Also improve exception message and removed unused declarations in IrBackendUtils.kt.
This commit is contained in:
@@ -73,6 +73,7 @@ open class BuiltinSymbolsBase(protected val builtIns: KotlinBuiltIns, private va
|
|||||||
val iterator = getClass(Name.identifier("Iterator"), "kotlin", "collections")
|
val iterator = getClass(Name.identifier("Iterator"), "kotlin", "collections")
|
||||||
|
|
||||||
val charSequence = getClass(Name.identifier("CharSequence"), "kotlin")
|
val charSequence = getClass(Name.identifier("CharSequence"), "kotlin")
|
||||||
|
val string = getClass(Name.identifier("String"), "kotlin")
|
||||||
|
|
||||||
val primitiveIteratorsByType = PrimitiveType.values().associate { type ->
|
val primitiveIteratorsByType = PrimitiveType.values().associate { type ->
|
||||||
val iteratorClass = getClass(Name.identifier(type.typeName.asString() + "Iterator"), "kotlin", "collections")
|
val iteratorClass = getClass(Name.identifier(type.typeName.asString() + "Iterator"), "kotlin", "collections")
|
||||||
|
|||||||
+1
@@ -272,6 +272,7 @@ internal abstract class HeaderInfoBuilder(context: CommonBackendContext, private
|
|||||||
|
|
||||||
private val progressionHandlers = listOf(
|
private val progressionHandlers = listOf(
|
||||||
CollectionIndicesHandler(context),
|
CollectionIndicesHandler(context),
|
||||||
|
ArrayIndicesHandler(context),
|
||||||
CharSequenceIndicesHandler(context),
|
CharSequenceIndicesHandler(context),
|
||||||
UntilHandler(context, progressionElementTypes),
|
UntilHandler(context, progressionElementTypes),
|
||||||
DownToHandler(context, progressionElementTypes),
|
DownToHandler(context, progressionElementTypes),
|
||||||
|
|||||||
+28
-29
@@ -512,16 +512,25 @@ internal abstract class IndicesHandler(protected val context: CommonBackendConte
|
|||||||
internal class CollectionIndicesHandler(context: CommonBackendContext) : IndicesHandler(context) {
|
internal class CollectionIndicesHandler(context: CommonBackendContext) : IndicesHandler(context) {
|
||||||
|
|
||||||
override val matcher = SimpleCalleeMatcher {
|
override val matcher = SimpleCalleeMatcher {
|
||||||
extensionReceiver { it != null && it.type.run { isArray() || isPrimitiveArray() || isCollection() } }
|
extensionReceiver { it?.type?.isCollection() == true }
|
||||||
fqName { it == FqName("kotlin.collections.<get-indices>") }
|
fqName { it == FqName("kotlin.collections.<get-indices>") }
|
||||||
parameterCount { it == 0 }
|
parameterCount { it == 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
// The lowering operates on subtypes of Collection. Therefore, the IrType could be
|
override val IrType.sizePropertyGetter: IrSimpleFunction
|
||||||
// a type parameter bounded by Collection. When that is the case, we cannot get
|
get() = context.ir.symbols.collection.getPropertyGetter("size")!!.owner
|
||||||
// the class from the type and instead uses the Collection getter.
|
}
|
||||||
override val IrType.sizePropertyGetter
|
|
||||||
get() = getClass()?.getPropertyGetter("size")?.owner ?: context.ir.symbols.collection.getPropertyGetter("size")!!.owner
|
internal class ArrayIndicesHandler(context: CommonBackendContext) : IndicesHandler(context) {
|
||||||
|
|
||||||
|
override val matcher = SimpleCalleeMatcher {
|
||||||
|
extensionReceiver { it != null && it.type.run { isArray() || isPrimitiveArray() } }
|
||||||
|
fqName { it == FqName("kotlin.collections.<get-indices>") }
|
||||||
|
parameterCount { it == 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
override val IrType.sizePropertyGetter: IrSimpleFunction
|
||||||
|
get() = getClass()!!.getPropertyGetter("size")!!.owner
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class CharSequenceIndicesHandler(context: CommonBackendContext) : IndicesHandler(context) {
|
internal class CharSequenceIndicesHandler(context: CommonBackendContext) : IndicesHandler(context) {
|
||||||
@@ -532,11 +541,8 @@ internal class CharSequenceIndicesHandler(context: CommonBackendContext) : Indic
|
|||||||
parameterCount { it == 0 }
|
parameterCount { it == 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
// The lowering operates on subtypes of CharSequence. Therefore, the IrType could be
|
override val IrType.sizePropertyGetter: IrSimpleFunction
|
||||||
// a type parameter bounded by CharSequence. When that is the case, we cannot get
|
get() = context.ir.symbols.charSequence.getPropertyGetter("length")!!.owner
|
||||||
// the class from the type and instead uses the CharSequence getter.
|
|
||||||
override val IrType.sizePropertyGetter
|
|
||||||
get() = getClass()?.getPropertyGetter("length")?.owner ?: context.ir.symbols.charSequence.getPropertyGetter("length")!!.owner
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builds a [HeaderInfo] for calls to reverse an iterable. */
|
/** Builds a [HeaderInfo] for calls to reverse an iterable. */
|
||||||
@@ -673,18 +679,11 @@ internal open class CharSequenceIterationHandler(context: CommonBackendContext,
|
|||||||
parameterCount { it == 0 }
|
parameterCount { it == 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
// The lowering operates on subtypes of CharSequence. Therefore, the IrType could be
|
override val IrType.sizePropertyGetter: IrSimpleFunction
|
||||||
// a type parameter bounded by CharSequence. When that is the case, we cannot get
|
get() = context.ir.symbols.charSequence.getPropertyGetter("length")!!.owner
|
||||||
// the class from the type and instead uses the CharSequence getter and function.
|
|
||||||
override val IrType.sizePropertyGetter
|
|
||||||
get() = getClass()?.getPropertyGetter("length")?.owner ?: context.ir.symbols.charSequence.getPropertyGetter("length")!!.owner
|
|
||||||
|
|
||||||
override val IrType.getFunction
|
override val IrType.getFunction: IrSimpleFunction
|
||||||
get() = getClass()?.functions?.single {
|
get() = context.ir.symbols.charSequence.getSimpleFunction(OperatorNameConventions.GET.asString())!!.owner
|
||||||
it.name == OperatorNameConventions.GET &&
|
|
||||||
it.valueParameters.size == 1 &&
|
|
||||||
it.valueParameters[0].type.isInt()
|
|
||||||
} ?: context.ir.symbols.charSequence.getSimpleFunction(OperatorNameConventions.GET.asString())!!.owner
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -694,6 +693,12 @@ internal open class CharSequenceIterationHandler(context: CommonBackendContext,
|
|||||||
*/
|
*/
|
||||||
internal class StringIterationHandler(context: CommonBackendContext) : CharSequenceIterationHandler(context, canCacheLast = true) {
|
internal class StringIterationHandler(context: CommonBackendContext) : CharSequenceIterationHandler(context, canCacheLast = true) {
|
||||||
override fun matchIterable(expression: IrExpression) = expression.type.isString()
|
override fun matchIterable(expression: IrExpression) = expression.type.isString()
|
||||||
|
|
||||||
|
override val IrType.sizePropertyGetter: IrSimpleFunction
|
||||||
|
get() = context.ir.symbols.string.getPropertyGetter("length")!!.owner
|
||||||
|
|
||||||
|
override val IrType.getFunction: IrSimpleFunction
|
||||||
|
get() = context.ir.symbols.string.getSimpleFunction(OperatorNameConventions.GET.asString())!!.owner
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builds a [HeaderInfo] for calls to `withIndex()`. */
|
/** Builds a [HeaderInfo] for calls to `withIndex()`. */
|
||||||
@@ -740,13 +745,7 @@ internal open class DefaultIterableHandler(private val context: CommonBackendCon
|
|||||||
|
|
||||||
override fun build(expression: IrExpression, scopeOwner: IrSymbol): HeaderInfo? =
|
override fun build(expression: IrExpression, scopeOwner: IrSymbol): HeaderInfo? =
|
||||||
with(context.createIrBuilder(scopeOwner, expression.startOffset, expression.endOffset)) {
|
with(context.createIrBuilder(scopeOwner, expression.startOffset, expression.endOffset)) {
|
||||||
// The lowering operates on subtypes of Iterable. Therefore, the IrType could be
|
val iteratorFun = iterableClassSymbol.getSimpleFunction(OperatorNameConventions.ITERATOR.asString())!!.owner
|
||||||
// a type parameter bounded by Iterable. When that is the case, we cannot get
|
|
||||||
// the class from the type and instead uses the Iterable.iterator() function.
|
|
||||||
val iteratorFun = expression.type.getClass()?.functions?.single {
|
|
||||||
it.name == OperatorNameConventions.ITERATOR &&
|
|
||||||
it.valueParameters.isEmpty()
|
|
||||||
} ?: iterableClassSymbol.getSimpleFunction(OperatorNameConventions.ITERATOR.asString())!!.owner
|
|
||||||
IterableHeaderInfo(
|
IterableHeaderInfo(
|
||||||
scope.createTmpVariable(irCall(iteratorFun).apply { dispatchReceiver = expression }, nameHint = "iterator")
|
scope.createTmpVariable(irCall(iteratorFun).apply { dispatchReceiver = expression }, nameHint = "iterator")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,18 +16,24 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.util
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.atMostOne
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
|
||||||
fun IrClass.getPropertyDeclaration(name: String) =
|
private fun IrClass.getPropertyDeclaration(name: String): IrProperty? {
|
||||||
declarations.filterIsInstance<IrProperty>().atMostOne { it.name.asString() == name }
|
val properties = declarations.filterIsInstance<IrProperty>().filter { it.name.asString() == name }
|
||||||
|
if (properties.size > 1) {
|
||||||
|
error(
|
||||||
|
"More than one property with name $name in class $fqNameWhenAvailable:\n" +
|
||||||
|
properties.joinToString("\n", transform = IrProperty::render)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return properties.firstOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
fun IrClass.getSimpleFunction(name: String): IrSimpleFunctionSymbol? =
|
private fun IrClass.getSimpleFunction(name: String): IrSimpleFunctionSymbol? =
|
||||||
findDeclaration<IrSimpleFunction> { it.name.asString() == name }?.symbol
|
findDeclaration<IrSimpleFunction> { it.name.asString() == name }?.symbol
|
||||||
|
|
||||||
fun IrClass.getPropertyGetter(name: String): IrSimpleFunctionSymbol? =
|
fun IrClass.getPropertyGetter(name: String): IrSimpleFunctionSymbol? =
|
||||||
@@ -38,11 +44,6 @@ fun IrClass.getPropertySetter(name: String): IrSimpleFunctionSymbol? =
|
|||||||
getPropertyDeclaration(name)?.setter?.symbol
|
getPropertyDeclaration(name)?.setter?.symbol
|
||||||
?: getSimpleFunction("<set-$name>").also { assert(it?.owner?.correspondingPropertySymbol?.owner?.name?.asString() == name) }
|
?: getSimpleFunction("<set-$name>").also { assert(it?.owner?.correspondingPropertySymbol?.owner?.name?.asString() == name) }
|
||||||
|
|
||||||
fun IrClass.getPropertyField(name: String): IrFieldSymbol? =
|
|
||||||
getPropertyDeclaration(name)?.backingField?.symbol
|
|
||||||
|
|
||||||
fun IrClassSymbol.getPropertyDeclaration(name: String) = owner.getPropertyDeclaration(name)
|
|
||||||
fun IrClassSymbol.getSimpleFunction(name: String): IrSimpleFunctionSymbol? = owner.getSimpleFunction(name)
|
fun IrClassSymbol.getSimpleFunction(name: String): IrSimpleFunctionSymbol? = owner.getSimpleFunction(name)
|
||||||
fun IrClassSymbol.getPropertyGetter(name: String): IrSimpleFunctionSymbol? = owner.getPropertyGetter(name)
|
fun IrClassSymbol.getPropertyGetter(name: String): IrSimpleFunctionSymbol? = owner.getPropertyGetter(name)
|
||||||
fun IrClassSymbol.getPropertySetter(name: String): IrSimpleFunctionSymbol? = owner.getPropertySetter(name)
|
fun IrClassSymbol.getPropertySetter(name: String): IrSimpleFunctionSymbol? = owner.getPropertySetter(name)
|
||||||
fun IrClassSymbol.getPropertyField(name: String): IrFieldSymbol? = owner.getPropertyField(name)
|
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// KJS_WITH_FULL_RUNTIME
|
||||||
|
|
||||||
|
class C : CharSequence {
|
||||||
|
// Unused declarations, which are here only to confuse the backend who might lookup symbols by name
|
||||||
|
private val List<String>.length: Int
|
||||||
|
get() = size
|
||||||
|
private operator fun List<String>.get(i: Int) =
|
||||||
|
this.get(i)
|
||||||
|
|
||||||
|
override val length: Int
|
||||||
|
get() = 2
|
||||||
|
|
||||||
|
override fun get(index: Int): Char =
|
||||||
|
if (index == 0) 'O' else 'K'
|
||||||
|
|
||||||
|
override fun subSequence(startIndex: Int, endIndex: Int): CharSequence =
|
||||||
|
throw AssertionError()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
var result = ""
|
||||||
|
val c = C()
|
||||||
|
for (i in c.indices) {
|
||||||
|
if (i == 0) {
|
||||||
|
result += c[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ((i, x) in c.withIndex()) {
|
||||||
|
if (i == 1) {
|
||||||
|
result += x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// KJS_WITH_FULL_RUNTIME
|
||||||
|
|
||||||
|
class C : Iterable<String> {
|
||||||
|
// Unused declaration, which is here only to confuse the backend who might lookup symbols by name
|
||||||
|
private fun List<Int>.iterator(): Double = size.toDouble()
|
||||||
|
|
||||||
|
override fun iterator(): Iterator<String> = listOf("OK").iterator()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val c = C()
|
||||||
|
for ((i, x) in c.withIndex()) {
|
||||||
|
if (i == 0) {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Fail"
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// KJS_WITH_FULL_RUNTIME
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val a = ArrayList<String>()
|
||||||
|
a.add("OK")
|
||||||
|
for (i in a.indices) {
|
||||||
|
return a[i]
|
||||||
|
}
|
||||||
|
return "Fail"
|
||||||
|
}
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val a = ArrayList<String>()
|
||||||
|
a.add("OK")
|
||||||
|
for (i in a.indices) {
|
||||||
|
return a[i]
|
||||||
|
}
|
||||||
|
return "Fail"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 iterator
|
||||||
+15
@@ -19531,6 +19531,16 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomCharSequence.kt")
|
||||||
|
public void testForInCustomCharSequence() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomCharSequence.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomIterable.kt")
|
||||||
|
public void testForInCustomIterable() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomIterable.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
||||||
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
||||||
@@ -20265,6 +20275,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
@@ -1928,6 +1928,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/forLoop/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/forLoop/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeText/forLoop/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeText/forLoop/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/bytecodeText/forLoop/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
+15
@@ -19531,6 +19531,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomCharSequence.kt")
|
||||||
|
public void testForInCustomCharSequence() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomCharSequence.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomIterable.kt")
|
||||||
|
public void testForInCustomIterable() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomIterable.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
||||||
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
||||||
@@ -20265,6 +20275,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
+15
@@ -18015,6 +18015,16 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomCharSequence.kt")
|
||||||
|
public void testForInCustomCharSequence() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomCharSequence.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomIterable.kt")
|
||||||
|
public void testForInCustomIterable() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomIterable.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
||||||
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
||||||
@@ -18749,6 +18759,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
+15
@@ -18015,6 +18015,16 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomCharSequence.kt")
|
||||||
|
public void testForInCustomCharSequence() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomCharSequence.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomIterable.kt")
|
||||||
|
public void testForInCustomIterable() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomIterable.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
||||||
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
||||||
@@ -18749,6 +18759,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
+5
@@ -1883,6 +1883,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/forLoop/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/forLoop/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeText/forLoop/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeText/forLoop/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/bytecodeText/forLoop/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
Generated
+15
@@ -15196,6 +15196,16 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomCharSequence.kt")
|
||||||
|
public void testForInCustomCharSequence() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomCharSequence.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomIterable.kt")
|
||||||
|
public void testForInCustomIterable() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomIterable.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
||||||
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
||||||
@@ -15925,6 +15935,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
+15
@@ -16376,6 +16376,16 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInCharSequenceWithMultipleGetFunctions.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomCharSequence.kt")
|
||||||
|
public void testForInCustomCharSequence() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomCharSequence.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInCustomIterable.kt")
|
||||||
|
public void testForInCustomIterable() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInCustomIterable.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
@TestMetadata("forInRangeLiteralWithMixedTypeBounds.kt")
|
||||||
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
public void testForInRangeLiteralWithMixedTypeBounds() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInRangeLiteralWithMixedTypeBounds.kt");
|
||||||
@@ -17105,6 +17115,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInIndices"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("forInArrayListIndices.kt")
|
||||||
|
public void testForInArrayListIndices() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("forInCharSequenceIndices.kt")
|
@TestMetadata("forInCharSequenceIndices.kt")
|
||||||
public void testForInCharSequenceIndices() throws Exception {
|
public void testForInCharSequenceIndices() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
runTest("compiler/testData/codegen/box/ranges/forInIndices/forInCharSequenceIndices.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user