From 1ed9ea44a996937b0ca9a1bd7e10dd8316e9f7fc Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 2 Jun 2015 13:11:02 +0300 Subject: [PATCH] Line numbers for traits --- .../codegen/ImplementationBodyCodegen.java | 9 +++- .../testData/debugger/tinyApp/outs/traits.out | 45 +++++++++++++++++ .../tinyApp/src/stepping/stepInto/traits.kt | 50 +++++++++++++++++++ .../debugger/KotlinSteppingTestGenerated.java | 6 +++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 idea/testData/debugger/tinyApp/outs/traits.out create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepInto/traits.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index ee9a77443db..b5f9374fac4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -1406,7 +1406,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } } - private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull FunctionDescriptor inheritedFun) { + private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull final FunctionDescriptor inheritedFun) { functionCodegen.generateMethod( DelegationToTraitImpl(descriptorToDeclaration(traitFun), traitFun), inheritedFun, @@ -1415,6 +1415,13 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { public void doGenerateBody(@NotNull ExpressionCodegen codegen, @NotNull JvmMethodSignature signature) { DeclarationDescriptor containingDeclaration = traitFun.getContainingDeclaration(); if (!DescriptorUtils.isTrait(containingDeclaration)) return; + + DeclarationDescriptor declarationInheritedFun = inheritedFun.getContainingDeclaration(); + PsiElement classForInheritedFun = descriptorToDeclaration(declarationInheritedFun); + if (classForInheritedFun instanceof JetDeclaration) { + codegen.markLineNumber((JetElement) classForInheritedFun, false); + } + ClassDescriptor containingTrait = (ClassDescriptor) containingDeclaration; Type traitImplType = typeMapper.mapTraitImpl(containingTrait); diff --git a/idea/testData/debugger/tinyApp/outs/traits.out b/idea/testData/debugger/tinyApp/outs/traits.out new file mode 100644 index 00000000000..5113725ac27 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/traits.out @@ -0,0 +1,45 @@ +LineBreakpoint created at traits.kt:5 +!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! traits.TraitsPackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +traits.kt:5 +traits.kt:6 +traits.kt:41 +traits.kt:27 +traits.kt:41 +traits.kt:6 +traits.kt:7 +traits.kt:41 +traits.kt:31 +traits.kt:41 +traits.kt:7 +traits.kt:8 +traits.kt:43 +traits.kt:8 +traits.kt:9 +traits.kt:47 +traits.kt:9 +traits.kt:11 +traits.kt:19 +traits.kt:11 +traits.kt:27 +traits.kt:11 +traits.kt:19 +traits.kt:20 +traits.kt:11 +traits.kt:31 +traits.kt:11 +traits.kt:20 +traits.kt:21 +traits.kt:13 +traits.kt:34 +traits.kt:13 +traits.kt:21 +traits.kt:22 +traits.kt:17 +traits.kt:38 +traits.kt:17 +traits.kt:22 +traits.kt:23 +Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' + +Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepInto/traits.kt b/idea/testData/debugger/tinyApp/src/stepping/stepInto/traits.kt new file mode 100644 index 00000000000..16ee342a8c9 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepInto/traits.kt @@ -0,0 +1,50 @@ +package traits + +fun main(args: Array) { + //Breakpoint! + val impl = MyInterfaceImpl() + impl.inInterface() + impl.propInInterface + impl.inInterfaceOverride() + impl.propInInterfaceOverride + + val o = object: MyInterface { + override fun inInterfaceOverride(): Int { + return super.inInterfaceOverride() + } + + override val propInInterfaceOverride: Int + get() = super.propInInterfaceOverride + } + o.inInterface() + o.propInInterface + o.inInterfaceOverride() + o.propInInterfaceOverride +} + +interface MyInterface { + fun inInterface(): Int { + return 1 + } + + val propInInterface: Int + get() = 1 + + fun inInterfaceOverride(): Int { + return 1 + } + + val propInInterfaceOverride: Int + get() = 1 +} + +class MyInterfaceImpl: MyInterface { + override fun inInterfaceOverride(): Int { + return 1 + } + + override val propInInterfaceOverride: Int + get() = 1 +} + +// STEP_INTO: 38 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java index cc91f839772..7935eb31a24 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -265,6 +265,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doStepIntoTest(fileName); } + @TestMetadata("traits.kt") + public void testTraits() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepInto/traits.kt"); + doStepIntoTest(fileName); + } + @TestMetadata("whenExpr.kt") public void testWhenExpr() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepInto/whenExpr.kt");