Fix navigation to file from "breakpoint reached at" info

This commit is contained in:
Natalia Ukhorskaya
2015-05-28 16:12:50 +03:00
parent 746b16fce3
commit 31db945110
3 changed files with 21 additions and 4 deletions
@@ -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) {
@@ -0,0 +1,3 @@
fun main(args: Array<String>) {
println("hello")
}
@@ -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<VirtualFile, String> className) {
doTest("\tat ", fileName, lineNumber, className);
}
private void doTest(@NotNull String linePrefix, @NotNull String fileName, int lineNumber, @NotNull Function1<VirtualFile, String> 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<VirtualFile, String>() {
@Override
public String invoke(VirtualFile file) {
return getPackageClassName(FqName.ROOT);
}
});
}
public void testSimple() {
doTest("simple.kt", 2, new Function1<VirtualFile, String>() {
@Override