IDEA-138578 Debugger spuriously jumps to decompiled method signature
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -150,9 +150,12 @@ public class TextBuffer {
|
||||
while ((lineEnd = myStringBuilder.indexOf(myLineSeparator, lineStart)) > 0) {
|
||||
++count;
|
||||
sb.append(myStringBuilder.substring(lineStart, lineEnd));
|
||||
Integer integer = myLineMapping.get(count);
|
||||
if (integer != null) {
|
||||
sb.append("// ").append(integer);
|
||||
Set<Integer> integers = myLineMapping.get(count);
|
||||
if (integers != null) {
|
||||
sb.append("//");
|
||||
for (Integer integer : integers) {
|
||||
sb.append(' ').append(integer);
|
||||
}
|
||||
}
|
||||
sb.append(myLineSeparator);
|
||||
lineStart = lineEnd + length;
|
||||
@@ -302,17 +305,18 @@ public class TextBuffer {
|
||||
return myStringBuilder;
|
||||
}
|
||||
|
||||
private Map<Integer, Integer> myLineMapping = null; // new to original
|
||||
private Map<Integer, Set<Integer>> myLineMapping = null; // new to original
|
||||
public void dumpOriginalLineNumbers(int[] lineMapping) {
|
||||
if (lineMapping.length > 0) {
|
||||
myLineMapping = new HashMap<Integer, Integer>();
|
||||
myLineMapping = new HashMap<Integer, Set<Integer>>();
|
||||
for (int i = 0; i < lineMapping.length; i+=2) {
|
||||
int key = lineMapping[i + 1];
|
||||
int value = lineMapping[i];
|
||||
Integer existing = myLineMapping.get(key);
|
||||
if (existing == null || value < existing) {
|
||||
myLineMapping.put(key, value);
|
||||
Set<Integer> existing = myLineMapping.get(key);
|
||||
if (existing == null) {
|
||||
existing = new TreeSet<Integer>();
|
||||
myLineMapping.put(key, existing);
|
||||
}
|
||||
existing.add(lineMapping[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ public class IfExprent extends Exprent {
|
||||
condition = stack.pop();
|
||||
}
|
||||
else {
|
||||
condition = new FunctionExprent(FUNC_TYPES[ifType], stack, null);
|
||||
condition = new FunctionExprent(FUNC_TYPES[ifType], stack, bytecodeOffsets);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -84,7 +84,7 @@ public class TestClassLambda {
|
||||
System.out.println("hello2" + var1);
|
||||
};// 87
|
||||
System.out.println("hello1" + var1);// 88
|
||||
};// 86
|
||||
};// 86 89
|
||||
}// 90
|
||||
}
|
||||
|
||||
@@ -180,7 +180,9 @@ class 'pkg/TestClassLambda' {
|
||||
|
||||
method 'lambda$testLambda6$4 (IILjava/lang/String;)Z' {
|
||||
2 59
|
||||
5 59
|
||||
9 59
|
||||
d 59
|
||||
15 59
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,39 @@ public class TestClassLoop {
|
||||
System.out.println("4");// 58
|
||||
}
|
||||
}
|
||||
|
||||
public static int testWhileCombined(String var0) {
|
||||
int var1 = var0.length();// 63
|
||||
int var2 = 0;// 64
|
||||
boolean var3 = false;// 65
|
||||
boolean var4 = false;// 66
|
||||
int var5 = 0;// 67
|
||||
int var7 = 0;// 69
|
||||
|
||||
for(boolean var8 = false; var2 < var1; ++var2) {// 70 73 90
|
||||
char var6 = var0.charAt(var2);// 74
|
||||
if(var6 == 48) {// 75
|
||||
++var7;// 76
|
||||
} else {
|
||||
if(var6 != 46) {// 77
|
||||
break;
|
||||
}
|
||||
|
||||
if(var3) {// 78
|
||||
throw new NumberFormatException("multiple points");// 80
|
||||
}
|
||||
|
||||
var5 = var2;// 82
|
||||
if(var4) {// 83
|
||||
var5 = var2 - 1;// 84
|
||||
}
|
||||
|
||||
var3 = true;// 86
|
||||
}
|
||||
}
|
||||
|
||||
return var5;// 92
|
||||
}
|
||||
}
|
||||
|
||||
class 'pkg/TestClassLoop' {
|
||||
@@ -77,6 +110,41 @@ class 'pkg/TestClassLoop' {
|
||||
3a 39
|
||||
3c 39
|
||||
}
|
||||
|
||||
method 'testWhileCombined (Ljava/lang/String;)I' {
|
||||
1 44
|
||||
4 44
|
||||
5 45
|
||||
6 45
|
||||
7 46
|
||||
8 46
|
||||
9 47
|
||||
a 47
|
||||
c 48
|
||||
d 48
|
||||
f 49
|
||||
10 49
|
||||
12 51
|
||||
13 51
|
||||
17 51
|
||||
1c 52
|
||||
1f 52
|
||||
23 53
|
||||
25 53
|
||||
28 54
|
||||
30 56
|
||||
32 56
|
||||
36 60
|
||||
3d 61
|
||||
42 61
|
||||
44 64
|
||||
48 65
|
||||
4b 66
|
||||
4e 69
|
||||
4f 69
|
||||
50 51
|
||||
58 73
|
||||
}
|
||||
}
|
||||
|
||||
Lines mapping:
|
||||
@@ -91,5 +159,25 @@ Lines mapping:
|
||||
53 <-> 34
|
||||
54 <-> 35
|
||||
58 <-> 40
|
||||
63 <-> 45
|
||||
64 <-> 46
|
||||
65 <-> 47
|
||||
66 <-> 48
|
||||
67 <-> 49
|
||||
69 <-> 50
|
||||
70 <-> 52
|
||||
73 <-> 52
|
||||
74 <-> 53
|
||||
75 <-> 54
|
||||
76 <-> 55
|
||||
77 <-> 57
|
||||
78 <-> 61
|
||||
80 <-> 62
|
||||
82 <-> 65
|
||||
83 <-> 66
|
||||
84 <-> 67
|
||||
86 <-> 70
|
||||
90 <-> 52
|
||||
92 <-> 74
|
||||
Not mapped:
|
||||
39
|
||||
|
||||
@@ -79,6 +79,7 @@ class 'pkg/TestClassTypes' {
|
||||
1 22
|
||||
2 22
|
||||
3 22
|
||||
4 22
|
||||
c 22
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public class TestClassVar {
|
||||
|
||||
while(var1 < 10) {// 47
|
||||
int var2;
|
||||
for(var2 = var1; var1 < 10 && var1 == 0; ++var1) {// 49
|
||||
for(var2 = var1; var1 < 10 && var1 == 0; ++var1) {// 49 51
|
||||
;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ class 'pkg/TestClassVar' {
|
||||
0 7
|
||||
1 7
|
||||
3 7
|
||||
5 7
|
||||
8 9
|
||||
b 9
|
||||
1f 11
|
||||
@@ -65,8 +66,11 @@ class 'pkg/TestClassVar' {
|
||||
0 25
|
||||
1 25
|
||||
3 27
|
||||
5 27
|
||||
9 29
|
||||
b 29
|
||||
d 29
|
||||
11 29
|
||||
14 29
|
||||
1c 33
|
||||
1f 34
|
||||
|
||||
@@ -36,7 +36,7 @@ public class TestTryCatchFinally {
|
||||
System.out.println("Finally");// 55
|
||||
}
|
||||
|
||||
return -1;// 56
|
||||
return -1;// 56 57
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,4 +58,37 @@ public class TestClassLoop {
|
||||
System.out.println("4");
|
||||
}
|
||||
}
|
||||
|
||||
public static int testWhileCombined(String in) {
|
||||
int len = in.length();
|
||||
int i = 0;
|
||||
boolean decSeen = false;
|
||||
boolean signSeen = false;
|
||||
int decPt = 0;
|
||||
char c;
|
||||
int nLeadZero = 0;
|
||||
int nTrailZero= 0;
|
||||
|
||||
skipLeadingZerosLoop:
|
||||
while (i < len) {
|
||||
c = in.charAt(i);
|
||||
if (c == '0') {
|
||||
nLeadZero++;
|
||||
} else if (c == '.') {
|
||||
if (decSeen) {
|
||||
// already saw one ., this is the 2nd.
|
||||
throw new NumberFormatException("multiple points");
|
||||
}
|
||||
decPt = i;
|
||||
if (signSeen) {
|
||||
decPt -= 1;
|
||||
}
|
||||
decSeen = true;
|
||||
} else {
|
||||
break skipLeadingZerosLoop;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return decPt;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user