Primitive support for LocalVariables for function parameters
This commit is contained in:
committed by
Mikhael Bogdanov
parent
1a56af9bb0
commit
65c79ecfe9
+7
-4
@@ -42,8 +42,8 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
|
||||
public abstract class AbstractCheckLocalVariablesTableTest extends TestCaseWithTmpdir {
|
||||
private File ktFile;
|
||||
private KotlinCoreEnvironment environment;
|
||||
protected File ktFile;
|
||||
protected KotlinCoreEnvironment environment;
|
||||
|
||||
public AbstractCheckLocalVariablesTableTest() {
|
||||
}
|
||||
@@ -82,6 +82,10 @@ public abstract class AbstractCheckLocalVariablesTableTest extends TestCaseWithT
|
||||
ClassReader cr = new ClassReader(outputFile.asByteArray());
|
||||
List<LocalVariable> actualLocalVariables = readLocalVariable(cr, methodName);
|
||||
|
||||
doCompare(text, actualLocalVariables);
|
||||
}
|
||||
|
||||
protected void doCompare(String text, List<LocalVariable> actualLocalVariables) {
|
||||
KotlinTestUtils.assertEqualsToFile(ktFile, text.substring(0, text.indexOf("// VARIABLE : ")) + getActualVariablesAsString(actualLocalVariables));
|
||||
}
|
||||
|
||||
@@ -93,8 +97,7 @@ public abstract class AbstractCheckLocalVariablesTableTest extends TestCaseWithT
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
private static class LocalVariable {
|
||||
protected static class LocalVariable {
|
||||
private final String name;
|
||||
private final String type;
|
||||
private final int index;
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.codegen.ir
|
||||
|
||||
import com.intellij.openapi.util.Comparing
|
||||
import org.jetbrains.kotlin.codegen.AbstractCheckLocalVariablesTableTest
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.junit.ComparisonFailure
|
||||
import java.nio.charset.Charset
|
||||
|
||||
abstract class AbstractIrCheckLocalVariablesTableTest : AbstractCheckLocalVariablesTableTest() {
|
||||
@Throws(Exception::class)
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
assert(environment != null)
|
||||
environment.configuration.put(JVMConfigurationKeys.IR, true)
|
||||
}
|
||||
|
||||
override fun doCompare(text: String?, actualLocalVariables: MutableList<LocalVariable>) {
|
||||
val actual = getActualVariablesAsList(actualLocalVariables)
|
||||
val expected = getExpectedVariablesAsList()
|
||||
if (!Comparing.equal(expected, actual)) {
|
||||
throw ComparisonFailure(
|
||||
"Variables differ from expected",
|
||||
expected.joinToString("\n"),
|
||||
actual.joinToString("\n")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getActualVariablesAsList(list: List<LocalVariable>): List<String> {
|
||||
return list.map { it.toString() }
|
||||
.map { line -> line.replaceFirst("INDEX=\\d+".toRegex(), "INDEX=*") } // Ignore index
|
||||
.sorted()
|
||||
}
|
||||
|
||||
private fun getExpectedVariablesAsList(): List<String> {
|
||||
return ktFile.readLines(Charset.forName("utf-8"))
|
||||
.filter { line -> line.startsWith("// VARIABLE ") }
|
||||
.filter { !it.contains("NAME=\$i\$") }
|
||||
.map { line -> line.replaceFirst("INDEX=\\d+".toRegex(), "INDEX=*") } // Ignore index
|
||||
.sorted()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user