Debugger: Tests refactor
This commit is contained in:
committed by
Vladimir Ilmov
parent
12313fa5aa
commit
1dc44b4000
@@ -56,7 +56,6 @@ import org.jetbrains.kotlin.idea.conversion.copy.AbstractLiteralTextToKotlinCopy
|
|||||||
import org.jetbrains.kotlin.idea.conversion.copy.AbstractTextJavaToKotlinCopyPasteConversionTest
|
import org.jetbrains.kotlin.idea.conversion.copy.AbstractTextJavaToKotlinCopyPasteConversionTest
|
||||||
import org.jetbrains.kotlin.idea.coverage.AbstractKotlinCoverageOutputFilesTest
|
import org.jetbrains.kotlin.idea.coverage.AbstractKotlinCoverageOutputFilesTest
|
||||||
import org.jetbrains.kotlin.idea.debugger.*
|
import org.jetbrains.kotlin.idea.debugger.*
|
||||||
import org.jetbrains.kotlin.idea.debugger.coroutines.AbstractCoroutineDumpTest
|
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.*
|
import org.jetbrains.kotlin.idea.debugger.evaluate.*
|
||||||
import org.jetbrains.kotlin.idea.debugger.test.sequence.exec.AbstractSequenceTraceTestCase
|
import org.jetbrains.kotlin.idea.debugger.test.sequence.exec.AbstractSequenceTraceTestCase
|
||||||
import org.jetbrains.kotlin.idea.debugger.test.*
|
import org.jetbrains.kotlin.idea.debugger.test.*
|
||||||
@@ -227,6 +226,10 @@ fun main(args: Array<String>) {
|
|||||||
model("asyncStackTrace")
|
model("asyncStackTrace")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractCoroutineDumpTest> {
|
||||||
|
model("coroutines")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractSequenceTraceTestCase> {
|
testClass<AbstractSequenceTraceTestCase> {
|
||||||
// TODO: implement mapping logic for terminal operations
|
// TODO: implement mapping logic for terminal operations
|
||||||
model("sequence/streams/sequence", excludeDirs = listOf("terminal"))
|
model("sequence/streams/sequence", excludeDirs = listOf("terminal"))
|
||||||
|
|||||||
+82
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.idea.debugger.test
|
||||||
|
|
||||||
|
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl
|
||||||
|
import com.intellij.execution.configurations.JavaParameters
|
||||||
|
import com.intellij.execution.process.ProcessOutputTypes
|
||||||
|
import com.intellij.jarRepository.JarRepositoryManager
|
||||||
|
import com.intellij.jarRepository.RemoteRepositoryDescription
|
||||||
|
import org.jetbrains.idea.maven.aether.ArtifactKind
|
||||||
|
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor
|
||||||
|
import org.jetbrains.kotlin.idea.debugger.coroutines.CoroutineState
|
||||||
|
import org.jetbrains.kotlin.idea.debugger.coroutines.CoroutinesDebugProbesProxy
|
||||||
|
import org.jetbrains.kotlin.idea.debugger.evaluate.ExecutionContext
|
||||||
|
import org.jetbrains.kotlin.idea.debugger.test.preference.DebuggerPreferences
|
||||||
|
|
||||||
|
abstract class AbstractCoroutineDumpTest : KotlinDescriptorTestCaseWithStepping() {
|
||||||
|
|
||||||
|
|
||||||
|
override fun doMultiFileTest(files: TestFiles, preferences: DebuggerPreferences) {
|
||||||
|
|
||||||
|
doOnBreakpoint {
|
||||||
|
val evalContext = EvaluationContextImpl(this, frameProxy)
|
||||||
|
val execContext = ExecutionContext(evalContext, frameProxy ?: return@doOnBreakpoint)
|
||||||
|
val either = CoroutinesDebugProbesProxy.dumpCoroutines(execContext)
|
||||||
|
try {
|
||||||
|
if (either.isRight)
|
||||||
|
try {
|
||||||
|
val states = either.get()
|
||||||
|
print(stringDump(states), ProcessOutputTypes.SYSTEM)
|
||||||
|
} catch (ignored: Throwable) {
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw AssertionError("Dump failed", either.left)
|
||||||
|
} finally {
|
||||||
|
resume(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
doOnBreakpoint {
|
||||||
|
val evalContext = EvaluationContextImpl(this, frameProxy)
|
||||||
|
val execContext = ExecutionContext(evalContext, frameProxy ?: return@doOnBreakpoint)
|
||||||
|
val either = CoroutinesDebugProbesProxy.dumpCoroutines(execContext)
|
||||||
|
try {
|
||||||
|
if (either.isRight)
|
||||||
|
try {
|
||||||
|
val states = either.get()
|
||||||
|
print(stringDump(states), ProcessOutputTypes.SYSTEM)
|
||||||
|
} catch (ignored: Throwable) {
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw AssertionError("Dump failed", either.left)
|
||||||
|
} finally {
|
||||||
|
resume(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun stringDump(states: List<CoroutineState>) = buildString {
|
||||||
|
states.forEach {
|
||||||
|
appendln("\"${it.name}\", state: ${it.state}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createJavaParameters(mainClass: String?): JavaParameters {
|
||||||
|
val description = JpsMavenRepositoryLibraryDescriptor("org.jetbrains.kotlinx", "kotlinx-coroutines-debug", "1.3.0")
|
||||||
|
val debugJar = JarRepositoryManager.loadDependenciesSync(
|
||||||
|
project, description, setOf(ArtifactKind.ARTIFACT),
|
||||||
|
RemoteRepositoryDescription.DEFAULT_REPOSITORIES, null
|
||||||
|
) ?: throw AssertionError("Debug Dependency is not found")
|
||||||
|
val params = super.createJavaParameters(mainClass)
|
||||||
|
for (jar in debugJar) {
|
||||||
|
params.classPath.add(jar.file.presentableUrl)
|
||||||
|
if (jar.file.name.contains("kotlinx-coroutines-debug"))
|
||||||
|
params.vmParametersList.add("-javaagent:${jar.file.presentableUrl}")
|
||||||
|
}
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
}
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.idea.debugger.test;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TargetBackend;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("idea/jvm-debugger/jvm-debugger-test/testData/coroutines")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public class CoroutineDumpTestGenerated extends AbstractCoroutineDumpTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInCoroutines() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/jvm-debugger/jvm-debugger-test/testData/coroutines"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("noCoroutines.kt")
|
||||||
|
public void testNoCoroutines() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/coroutines/noCoroutines.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("threeCoroutines.kt")
|
||||||
|
public void testThreeCoroutines() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/coroutines/threeCoroutines.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("twoDumps.kt")
|
||||||
|
public void testTwoDumps() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/coroutines/twoDumps.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
+30
@@ -305,6 +305,21 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat
|
|||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt31709.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt31709.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt32691.kt")
|
||||||
|
public void testKt32691() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt32691.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt33093.kt")
|
||||||
|
public void testKt33093() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt33093.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt33181.kt")
|
||||||
|
public void testKt33181() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt33181.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt5554OnlyIntsShouldBeCoerced.kt")
|
@TestMetadata("kt5554OnlyIntsShouldBeCoerced.kt")
|
||||||
public void testKt5554OnlyIntsShouldBeCoerced() throws Exception {
|
public void testKt5554OnlyIntsShouldBeCoerced() throws Exception {
|
||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt5554OnlyIntsShouldBeCoerced.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt5554OnlyIntsShouldBeCoerced.kt");
|
||||||
@@ -834,11 +849,21 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat
|
|||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLambda.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLambda.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("frameLambdaNotAccessible.kt")
|
||||||
|
public void testFrameLambdaNotAccessible() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLambdaNotAccessible.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("frameLambdaNotUsed.kt")
|
@TestMetadata("frameLambdaNotUsed.kt")
|
||||||
public void testFrameLambdaNotUsed() throws Exception {
|
public void testFrameLambdaNotUsed() throws Exception {
|
||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLambdaNotUsed.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLambdaNotUsed.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("frameLambdaVariableFromCorrectFrame.kt")
|
||||||
|
public void testFrameLambdaVariableFromCorrectFrame() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLambdaVariableFromCorrectFrame.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("frameLocalVariable.kt")
|
@TestMetadata("frameLocalVariable.kt")
|
||||||
public void testFrameLocalVariable() throws Exception {
|
public void testFrameLocalVariable() throws Exception {
|
||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLocalVariable.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/frameLocalVariable.kt");
|
||||||
@@ -939,6 +964,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat
|
|||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/nestedInlineFun2.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/nestedInlineFun2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nonCapturedThisInLambda.kt")
|
||||||
|
public void testNonCapturedThisInLambda() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/nonCapturedThisInLambda.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("remapThis.kt")
|
@TestMetadata("remapThis.kt")
|
||||||
public void testRemapThis() throws Exception {
|
public void testRemapThis() throws Exception {
|
||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/remapThis.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/remapThis.kt");
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package noCoroutines
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
//Breakpoint!
|
||||||
|
val s = "nothing to see here, folks"
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
LineBreakpoint created at noCoroutines.kt:5
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
noCoroutines.kt:5
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package threeCoroutines
|
||||||
|
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
|
suspend fun main() {
|
||||||
|
sequence {
|
||||||
|
yield(239)
|
||||||
|
sequence {
|
||||||
|
//Breakpoint!
|
||||||
|
yield(666)
|
||||||
|
}.toList()
|
||||||
|
}.toList()
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
LineBreakpoint created at threeCoroutines.kt:10
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
threeCoroutines.kt:10
|
||||||
|
"coroutine#1", state: RUNNING
|
||||||
|
"coroutine#2", state: RUNNING
|
||||||
|
"coroutine#3", state: RUNNING
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package twoDumps
|
||||||
|
|
||||||
|
suspend fun main() {
|
||||||
|
foo()
|
||||||
|
sequence<Int> {
|
||||||
|
foo()
|
||||||
|
yield(666)
|
||||||
|
}.toList()
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun foo() {
|
||||||
|
val f = 239
|
||||||
|
bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun bar() {
|
||||||
|
var r = 1337
|
||||||
|
//Breakpoint!
|
||||||
|
r += 42
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun SequenceScope<Int>.foo() {
|
||||||
|
val k = 228
|
||||||
|
bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun SequenceScope<Int>.bar() {
|
||||||
|
var r = 1337
|
||||||
|
//Breakpoint!
|
||||||
|
r += 42
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
LineBreakpoint created at twoDumps.kt:19
|
||||||
|
LineBreakpoint created at twoDumps.kt:30
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
twoDumps.kt:19
|
||||||
|
"coroutine#1", state: RUNNING
|
||||||
|
twoDumps.kt:30
|
||||||
|
"coroutine#1", state: RUNNING
|
||||||
|
"coroutine#2", state: RUNNING
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package frameLambdaNotAccessible
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val k = "lorem"
|
||||||
|
bar()()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(): () -> Unit {
|
||||||
|
val k = "ipsum"
|
||||||
|
return {
|
||||||
|
val l = "doloret"
|
||||||
|
//Breakpoint!
|
||||||
|
Unit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRINT_FRAME
|
||||||
|
|
||||||
|
// EXPRESSION: k
|
||||||
|
// RESULT: 'k' is not captured
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
LineBreakpoint created at frameLambdaNotAccessible.kt:13
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
frameLambdaNotAccessible.kt:13
|
||||||
|
Compile bytecode for k
|
||||||
|
frame = invoke:13, FrameLambdaNotAccessibleKt$bar$1 {frameLambdaNotAccessible}
|
||||||
|
this = this = {frameLambdaNotAccessible.FrameLambdaNotAccessibleKt$bar$1@uniqueID}Function0<kotlin.Unit>
|
||||||
|
field = arity: int = 0 (sp = Lambda.!EXT!)
|
||||||
|
local = l: java.lang.String = doloret (sp = frameLambdaNotAccessible.kt, 11)
|
||||||
|
field = value: char[] = {char[7]@uniqueID} (sp = String.!EXT!)
|
||||||
|
element = 0 = 'd' 100
|
||||||
|
element = 1 = 'o' 111
|
||||||
|
element = 2 = 'l' 108
|
||||||
|
element = 3 = 'o' 111
|
||||||
|
element = 4 = 'r' 114
|
||||||
|
element = 5 = 'e' 101
|
||||||
|
element = 6 = 't' 116
|
||||||
|
field = hash: int = 0 (sp = String.!EXT!)
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
package frameLambdaVariableFromCorrectFrame
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val k = "lorem"
|
||||||
|
foo {
|
||||||
|
val j = "ipsum"
|
||||||
|
{
|
||||||
|
val l = 5
|
||||||
|
//Breakpoint!
|
||||||
|
Unit
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo(block: () -> Any?) {
|
||||||
|
val k = "doloret"
|
||||||
|
val j = "sit"
|
||||||
|
block()
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRINT_FRAME
|
||||||
|
|
||||||
|
// EXPRESSION: k
|
||||||
|
// RESULT: "lorem": Ljava/lang/String;
|
||||||
|
|
||||||
|
// EXPRESSION: j
|
||||||
|
// RESULT: "ipsum": Ljava/lang/String;
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
LineBreakpoint created at frameLambdaVariableFromCorrectFrame.kt:10
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
frameLambdaVariableFromCorrectFrame.kt:10
|
||||||
|
Compile bytecode for k
|
||||||
|
Compile bytecode for j
|
||||||
|
frame = invoke:10, FrameLambdaVariableFromCorrectFrameKt$main$1$1 {frameLambdaVariableFromCorrectFrame}
|
||||||
|
this = this = {frameLambdaVariableFromCorrectFrame.FrameLambdaVariableFromCorrectFrameKt$main$1$1@uniqueID}Function0<kotlin.Unit>
|
||||||
|
field = arity: int = 0 (sp = Lambda.!EXT!)
|
||||||
|
local = l: int = 5 (sp = frameLambdaVariableFromCorrectFrame.kt, 8)
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package nonCapturedThisInLambda
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
Foo().bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
val a = "lorem"
|
||||||
|
val b: String
|
||||||
|
get() = "ipsum"
|
||||||
|
fun bar() {
|
||||||
|
{
|
||||||
|
//Breakpoint!
|
||||||
|
Unit
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRINT_FRAME
|
||||||
|
|
||||||
|
// EXPRESSION: a
|
||||||
|
// RESULT: "lorem": Ljava/lang/String;
|
||||||
|
|
||||||
|
// EXPRESSION: b
|
||||||
|
// RESULT: "ipsum": Ljava/lang/String;
|
||||||
|
|
||||||
|
// EXPRESSION: this
|
||||||
|
// RESULT: instance of nonCapturedThisInLambda.Foo(id=ID): LnonCapturedThisInLambda/Foo;
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
LineBreakpoint created at nonCapturedThisInLambda.kt:14
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
nonCapturedThisInLambda.kt:14
|
||||||
|
Compile bytecode for a
|
||||||
|
Compile bytecode for b
|
||||||
|
Compile bytecode for this
|
||||||
|
frame = invoke:14, Foo$bar$1 {nonCapturedThisInLambda}
|
||||||
|
this = this = {nonCapturedThisInLambda.Foo$bar$1@uniqueID}Function0<kotlin.Unit>
|
||||||
|
field = arity: int = 0 (sp = Lambda.!EXT!)
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
package kt32691
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
//Breakpoint!
|
||||||
|
Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
class L<R, O>
|
||||||
|
|
||||||
|
// EXPRESSION: {}.toString()
|
||||||
|
// RESULT: "kotlin.jvm.functions.Function0<kotlin.Unit>": Ljava/lang/String;
|
||||||
|
|
||||||
|
// EXPRESSION: {i: Int -> }.toString()
|
||||||
|
// RESULT: "kotlin.jvm.functions.Function1<java.lang.Integer, kotlin.Unit>": Ljava/lang/String;
|
||||||
|
|
||||||
|
// EXPRESSION: {i: Int, d: Double -> "239" }.toString()
|
||||||
|
// RESULT: "kotlin.jvm.functions.Function2<java.lang.Integer, java.lang.Double, java.lang.String>": Ljava/lang/String;
|
||||||
|
|
||||||
|
// EXPRESSION: {m : L<in String, out Int> -> ""}.toString()
|
||||||
|
// RESULT: "kotlin.jvm.functions.Function1<kt32691.L<in java.lang.String, out java.lang.Integer>, java.lang.String>": Ljava/lang/String;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
LineBreakpoint created at kt32691.kt:5
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
kt32691.kt:5
|
||||||
|
Compile bytecode for {}.toString()
|
||||||
|
Compile bytecode for {i: Int -> }.toString()
|
||||||
|
Compile bytecode for {i: Int, d: Double -> "239" }.toString()
|
||||||
|
Compile bytecode for {m : L<in String, out Int> -> ""}.toString()
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
package kt33093
|
||||||
|
|
||||||
|
typealias foo = Nothing
|
||||||
|
typealias bar = foo
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
//Breakpoint!
|
||||||
|
Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPRESSION: Nothing()
|
||||||
|
// RESULT: Type 'Nothing' can't be instantiated
|
||||||
|
|
||||||
|
// EXPRESSION: foo()
|
||||||
|
// RESULT: Type 'Nothing' can't be instantiated
|
||||||
|
|
||||||
|
// EXPRESSION: bar()
|
||||||
|
// RESULT: Type 'Nothing' can't be instantiated
|
||||||
|
|
||||||
|
// EXPRESSION: { Nothing() }
|
||||||
|
// RESULT: Type 'Nothing' can't be instantiated
|
||||||
|
|
||||||
|
// EXPRESSION: { bar() }
|
||||||
|
// RESULT: Type 'Nothing' can't be instantiated
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
LineBreakpoint created at statements.kt:5
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
statements.kt:5
|
||||||
|
Compile bytecode for val b = 1
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package kt33181
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
Bar().foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
open class Foo {
|
||||||
|
open fun foo(): Int {
|
||||||
|
return 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Bar : Foo() {
|
||||||
|
override fun foo(): Int {
|
||||||
|
//Breakpoint!
|
||||||
|
return 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPRESSION: super.foo()
|
||||||
|
// RESULT: 5: I
|
||||||
|
|
||||||
|
// EXPRESSION: for (i in 1..1) { super.foo()}
|
||||||
|
// RESULT: VOID_VALUE
|
||||||
|
|
||||||
|
// EXPRESSION: { super.foo() }
|
||||||
|
// RESULT: Evaluation of 'super' calls inside lambdas and functions is not supported
|
||||||
|
|
||||||
|
// EXPRESSION: fun() { super.foo() }
|
||||||
|
// RESULT: Evaluation of 'super' calls inside lambdas and functions is not supported
|
||||||
|
|
||||||
|
// EXPRESSION: if(true) { fun named() { super.foo() } } // hack to avoid "Anonymous functions with names are prohibited"
|
||||||
|
// RESULT: Evaluation of 'super' calls inside lambdas and functions is not supported
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
LineBreakpoint created at kt33181.kt:16
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
kt33181.kt:16
|
||||||
|
Compile bytecode for super.foo()
|
||||||
|
Compile bytecode for for (i in 1..1) { super.foo()}
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
Reference in New Issue
Block a user