diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtPropertyAccessor.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtPropertyAccessor.java index 1d1cf2470f7..6895d58c045 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtPropertyAccessor.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtPropertyAccessor.java @@ -181,4 +181,9 @@ public class KtPropertyAccessor extends KtDeclarationStub 0) { + return constructors[0]; + } + } + + return null; + } } if (declaration == null) { diff --git a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/LineBreakpointExpressionVisitor.kt b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/LineBreakpointExpressionVisitor.kt index 6b96cf92c1b..ad73d8398c9 100644 --- a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/LineBreakpointExpressionVisitor.kt +++ b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/LineBreakpointExpressionVisitor.kt @@ -171,10 +171,10 @@ class LineBreakpointExpressionVisitor private constructor( return Lines.EMPTY } - val startOffset = this.startOffset + val startOffset = maxOf(this.startOffset, this.textOffset) val endOffset = this.endOffset - if (startOffset < 0 || endOffset < 0) { + if (startOffset < 0 || endOffset < 0 || startOffset > endOffset) { return Lines.EMPTY } diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.kt b/idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.kt new file mode 100644 index 00000000000..2f19c00b100 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.kt @@ -0,0 +1,105 @@ +package functionBreakpoints + +//FunctionBreakpoint! +class A + +//FunctionBreakpoint! +class B() + +//FunctionBreakpoint! +class C {} + +//FunctionBreakpoint! +class D(val a: Int) + +//FunctionBreakpoint! +class E( + val a: Int +) + +class F( + //Breakpoint! + val a: Int +) + +class G { + //FunctionBreakpoint! + constructor(a: Int) {} + + //FunctionBreakpoint! + constructor(a: String) {} +} + +//FunctionBreakpoint! +class H(val a: String) { + //FunctionBreakpoint! + constructor(a: Int) : this("f") +} + +//FunctionBreakpoint! +class K { + //FunctionBreakpoint! + fun a() {} + + //FunctionBreakpoint! + fun b() { + } + + //FunctionBreakpoint! + fun c(a: Int) { + b() + } +} + +//FunctionBreakpoint! +fun topLevel1() {} + +//FunctionBreakpoint! +fun topLevel2( + a: Int +) {} + +//FunctionBreakpoint! +fun topLevel3(a: Int = foo()) {} + +//FunctionBreakpoint! +fun foo() = 3 + +class L { + val a: Int + //FunctionBreakpoint! + get() = 1 + + var b: Int + //FunctionBreakpoint! + get() = 1 + //FunctionBreakpoint! + set(v) { topLevel2(v) } +} + +fun main() { + A() + B() + C() + D(0) + E(0) + F(0) + G(0) + G("") + H(0) + H("") + + val k = K() + k.a() + k.b() + k.c(0) + + topLevel1() + topLevel2(0) + topLevel3() + + val l = L() + l.a + l.b + l.b = 2 +} \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.out b/idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.out new file mode 100644 index 00000000000..c42c4cac20d --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.out @@ -0,0 +1,49 @@ +FunctionBreakpoint created at functionBreakpoints.kt:4 +FunctionBreakpoint created at functionBreakpoints.kt:7 +FunctionBreakpoint created at functionBreakpoints.kt:10 +FunctionBreakpoint created at functionBreakpoints.kt:13 +FunctionBreakpoint created at functionBreakpoints.kt:16 +FunctionBreakpoint created at functionBreakpoints.kt:27 +FunctionBreakpoint created at functionBreakpoints.kt:30 +FunctionBreakpoint created at functionBreakpoints.kt:34 +FunctionBreakpoint created at functionBreakpoints.kt:36 +FunctionBreakpoint created at functionBreakpoints.kt:40 +FunctionBreakpoint created at functionBreakpoints.kt:42 +FunctionBreakpoint created at functionBreakpoints.kt:45 +FunctionBreakpoint created at functionBreakpoints.kt:49 +FunctionBreakpoint created at functionBreakpoints.kt:55 +FunctionBreakpoint created at functionBreakpoints.kt:58 +FunctionBreakpoint created at functionBreakpoints.kt:63 +FunctionBreakpoint created at functionBreakpoints.kt:66 +FunctionBreakpoint created at functionBreakpoints.kt:71 +FunctionBreakpoint created at functionBreakpoints.kt:75 +FunctionBreakpoint created at functionBreakpoints.kt:77 +Run Java +Connected to the target VM +functionBreakpoints.kt:4 +resuming functionBreakpoints.kt:7 +resuming functionBreakpoints.kt:10 +resuming functionBreakpoints.kt:13 +resuming functionBreakpoints.kt:16 +resuming functionBreakpoints.kt:27 +resuming functionBreakpoints.kt:30 +resuming functionBreakpoints.kt:36 +resuming functionBreakpoints.kt:34 +resuming functionBreakpoints.kt:34 +resuming functionBreakpoints.kt:40 +resuming functionBreakpoints.kt:42 +resuming functionBreakpoints.kt:46 +resuming functionBreakpoints.kt:50 +resuming functionBreakpoints.kt:46 +resuming functionBreakpoints.kt:51 +resuming functionBreakpoints.kt:55 +resuming functionBreakpoints.kt:60 +resuming functionBreakpoints.kt:66 +resuming functionBreakpoints.kt:63 +resuming functionBreakpoints.kt:71 +resuming functionBreakpoints.kt:75 +resuming functionBreakpoints.kt:77 +resuming functionBreakpoints.kt:60 +Disconnected from the target VM + +Process finished with exit code 0 diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractBreakpointPositionTestGenerated.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractBreakpointPositionTestGenerated.kt new file mode 100644 index 00000000000..ac34dff2a88 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractBreakpointPositionTestGenerated.kt @@ -0,0 +1,7 @@ +/* + * 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 + diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java index 3bf2b5c9800..de0c556a109 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -1067,6 +1067,11 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { runTest("idea/testData/debugger/tinyApp/src/stepping/custom/funLiteral.kt"); } + @TestMetadata("functionBreakpoints.kt") + public void testFunctionBreakpoints() throws Exception { + runTest("idea/testData/debugger/tinyApp/src/stepping/custom/functionBreakpoints.kt"); + } + @TestMetadata("functionCallStoredToVariable.kt") public void testFunctionCallStoredToVariable() throws Exception { runTest("idea/testData/debugger/tinyApp/src/stepping/custom/functionCallStoredToVariable.kt");