From 31db945110acd5f6dc73400d7e85e052f4f5dcae Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 28 May 2015 16:12:50 +0300 Subject: [PATCH] Fix navigation to file from "breakpoint reached at" info --- .../idea/filters/JetExceptionFilter.java | 3 ++- .../breakpointReachedAt.kt | 3 +++ .../idea/filters/JetExceptionFilterTest.java | 19 ++++++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 idea/testData/filters/exceptionFilter/breakpointReachedAt/breakpointReachedAt.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/filters/JetExceptionFilter.java b/idea/src/org/jetbrains/kotlin/idea/filters/JetExceptionFilter.java index 5e3701d6ffe..c220424fbdb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/filters/JetExceptionFilter.java +++ b/idea/src/org/jetbrains/kotlin/idea/filters/JetExceptionFilter.java @@ -88,7 +88,8 @@ public class JetExceptionFilter implements Filter { } // Matches strings like "\tat test.TestPackage$foo$f$1.invoke(a.kt:3)\n" - private static final Pattern STACK_TRACE_ELEMENT_PATTERN = Pattern.compile("^\\s*at\\s+(.+)\\.(.+)\\((.+):(\\d+)\\)\\s*$"); + // or "\tBreakpoint reached at test.TestPackage$foo$f$1.invoke(a.kt:3)\n" + private static final Pattern STACK_TRACE_ELEMENT_PATTERN = Pattern.compile("^[\\w|\\s]*at\\s+(.+)\\.(.+)\\((.+):(\\d+)\\)\\s*$"); @Nullable private static StackTraceElement parseStackTraceLine(@NotNull String line) { diff --git a/idea/testData/filters/exceptionFilter/breakpointReachedAt/breakpointReachedAt.kt b/idea/testData/filters/exceptionFilter/breakpointReachedAt/breakpointReachedAt.kt new file mode 100644 index 00000000000..03a7ab446dc --- /dev/null +++ b/idea/testData/filters/exceptionFilter/breakpointReachedAt/breakpointReachedAt.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + println("hello") +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.java b/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.java index d84f5dccf26..42bc59b9e8a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.java @@ -75,7 +75,7 @@ public class JetExceptionFilterTest extends MultiFileTestCase { } @NotNull - private static String createStackTraceElementLine(@NotNull String fileName, @NotNull String className, int lineNumber) { + private static String createStackTraceElementLine(@NotNull String prefix, @NotNull String fileName, @NotNull String className, int lineNumber) { // Method name doesn't matter String methodName = "foo"; @@ -83,10 +83,14 @@ public class JetExceptionFilterTest extends MultiFileTestCase { String fileLastName = new File(fileName).getName(); StackTraceElement element = new StackTraceElement(className, methodName, fileLastName, lineNumber); - return "\tat " + element + "\n"; + return prefix + element + "\n"; } private void doTest(@NotNull String fileName, int lineNumber, @NotNull Function1 className) { + doTest("\tat ", fileName, lineNumber, className); + } + + private void doTest(@NotNull String linePrefix, @NotNull String fileName, int lineNumber, @NotNull Function1 className) { if (rootDir == null) { configure(); } @@ -97,7 +101,7 @@ public class JetExceptionFilterTest extends MultiFileTestCase { VirtualFile expectedFile = VfsUtilCore.findRelativeFile(fileName, rootDir); assertNotNull(expectedFile); - String line = createStackTraceElementLine(fileName, className.invoke(expectedFile), lineNumber); + String line = createStackTraceElementLine(linePrefix, fileName, className.invoke(expectedFile), lineNumber); Filter.Result result = filter.applyFilter(line, 0); assertNotNull(result); @@ -115,6 +119,15 @@ public class JetExceptionFilterTest extends MultiFileTestCase { assertEquals(expectedOffset, descriptor.getOffset()); } + public void testBreakpointReachedAt() { + doTest("Breakpoint reached at ", "breakpointReachedAt.kt", 2, new Function1() { + @Override + public String invoke(VirtualFile file) { + return getPackageClassName(FqName.ROOT); + } + }); + } + public void testSimple() { doTest("simple.kt", 2, new Function1() { @Override