decompiler: map dummy return line to the method closing bracket

master
Egor.Ushakov 10 years ago
parent 07e1d66a53
commit 500f8b12d8
  1. 14
      src/org/jetbrains/java/decompiler/main/ClassWriter.java
  2. 12
      src/org/jetbrains/java/decompiler/main/collectors/BytecodeMappingTracer.java
  3. 16
      src/org/jetbrains/java/decompiler/main/collectors/BytecodeSourceMapper.java
  4. 5
      src/org/jetbrains/java/decompiler/modules/decompiler/DomHelper.java
  5. 7
      src/org/jetbrains/java/decompiler/modules/decompiler/ExitHelper.java
  6. 42
      src/org/jetbrains/java/decompiler/modules/decompiler/stats/DummyExitStatement.java
  7. 10
      src/org/jetbrains/java/decompiler/modules/decompiler/stats/RootStatement.java
  8. 18
      testData/results/InvalidMethodSignature.dec
  9. 4
      testData/results/TestAbstractMethods.dec
  10. 18
      testData/results/TestAmbiguousCall.dec
  11. 18
      testData/results/TestAmbiguousCallWithDebugInfo.dec
  12. 54
      testData/results/TestAnonymousClass.dec
  13. 4
      testData/results/TestClassCast.dec
  14. 6
      testData/results/TestClassFields.dec
  15. 45
      testData/results/TestClassLambda.dec
  16. 5
      testData/results/TestClassLoop.dec
  17. 5
      testData/results/TestClassNestedInitializer.dec
  18. 23
      testData/results/TestClassSimpleBytecodeMapping.dec
  19. 4
      testData/results/TestClassSwitch.dec
  20. 15
      testData/results/TestClassTypes.dec
  21. 10
      testData/results/TestClassVar.dec
  22. 4
      testData/results/TestCodeConstructs.dec
  23. 73
      testData/results/TestConstants.dec
  24. 16
      testData/results/TestDeprecations.dec
  25. 37
      testData/results/TestEnum.dec
  26. 14
      testData/results/TestInnerClassConstructor.dec
  27. 34
      testData/results/TestInnerLocal.dec
  28. 34
      testData/results/TestInnerLocalPkg.dec
  29. 16
      testData/results/TestInnerSignature.dec
  30. 16
      testData/results/TestLocalClass.dec
  31. 84
      testData/results/TestMethodParameters.dec
  32. 6
      testData/results/TestSynchronizedMapping.dec
  33. 10
      testData/results/TestThrowException.dec
  34. 12
      testData/results/TestTryCatchFinally.dec

@ -534,8 +534,8 @@ public class ClassWriter {
indent += 1; indent += 1;
} }
if (!methodWrapper.decompiledWithErrors) {
RootStatement root = classWrapper.getMethodWrapper(mt.getName(), mt.getDescriptor()).root; RootStatement root = classWrapper.getMethodWrapper(mt.getName(), mt.getDescriptor()).root;
if (!methodWrapper.decompiledWithErrors) {
if (root != null) { // check for existence if (root != null) { // check for existence
try { try {
buffer.append(root.toJava(indent, tracer)); buffer.append(root.toJava(indent, tracer));
@ -553,12 +553,13 @@ public class ClassWriter {
buffer.appendLineSeparator(); buffer.appendLineSeparator();
} }
if (root != null) {
tracer.addMapping(root.getDummyExit().bytecode);
}
if (!codeOnly) { if (!codeOnly) {
indent -= 1; indent -= 1;
buffer.appendIndent(indent).append('}').appendLineSeparator();
buffer.appendIndent(indent);
buffer.append('}');
buffer.appendLineSeparator();
} }
} }
finally { finally {
@ -869,6 +870,9 @@ public class ClassWriter {
tracer.incrementCurrentSourceLine(); tracer.incrementCurrentSourceLine();
} }
if (root != null) {
tracer.addMapping(root.getDummyExit().bytecode);
}
buffer.appendIndent(indent).append('}').appendLineSeparator(); buffer.appendIndent(indent).append('}').appendLineSeparator();
tracer.incrementCurrentSourceLine(); tracer.incrementCurrentSourceLine();
} }

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -89,6 +89,12 @@ public class BytecodeMappingTracer {
this.lineNumberTable = lineNumberTable; this.lineNumberTable = lineNumberTable;
} }
private final Set<Integer> unmappedLines = new HashSet<Integer>();
public Set<Integer> getUnmappedLines() {
return unmappedLines;
}
public Map<Integer, Integer> getOriginalLinesMapping() { public Map<Integer, Integer> getOriginalLinesMapping() {
if (lineNumberTable == null) { if (lineNumberTable == null) {
return Collections.emptyMap(); return Collections.emptyMap();
@ -103,11 +109,15 @@ public class BytecodeMappingTracer {
if (newLine != null) { if (newLine != null) {
res.put(originalLine, newLine); res.put(originalLine, newLine);
} }
else {
unmappedLines.add(originalLine);
}
} }
for (Entry<Integer, Integer> entry : mapping.entrySet()) { for (Entry<Integer, Integer> entry : mapping.entrySet()) {
int originalLine = lineNumberTable.findLineNumber(entry.getKey()); int originalLine = lineNumberTable.findLineNumber(entry.getKey());
if (originalLine > -1) { if (originalLine > -1) {
res.put(originalLine, entry.getValue()); res.put(originalLine, entry.getValue());
unmappedLines.remove(originalLine);
} }
} }
return res; return res;

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -30,6 +30,7 @@ public class BytecodeSourceMapper {
// original line to decompiled line // original line to decompiled line
private final Map<Integer, Integer> linesMapping = new HashMap<Integer, Integer>(); private final Map<Integer, Integer> linesMapping = new HashMap<Integer, Integer>();
private final Set<Integer> unmappedLines = new TreeSet<Integer>();
public void addMapping(String className, String methodName, int bytecodeOffset, int sourceLine) { public void addMapping(String className, String methodName, int bytecodeOffset, int sourceLine) {
Map<String, Map<Integer, Integer>> class_mapping = mapping.get(className); Map<String, Map<Integer, Integer>> class_mapping = mapping.get(className);
@ -53,6 +54,7 @@ public class BytecodeSourceMapper {
addMapping(className, methodName, entry.getKey(), entry.getValue()); addMapping(className, methodName, entry.getKey(), entry.getValue());
} }
linesMapping.putAll(tracer.getOriginalLinesMapping()); linesMapping.putAll(tracer.getOriginalLinesMapping());
unmappedLines.addAll(tracer.getUnmappedLines());
} }
public void dumpMapping(TextBuffer buffer, boolean offsetsToHex) { public void dumpMapping(TextBuffer buffer, boolean offsetsToHex) {
@ -97,7 +99,16 @@ public class BytecodeSourceMapper {
buffer.append("Lines mapping:").appendLineSeparator(); buffer.append("Lines mapping:").appendLineSeparator();
Map<Integer, Integer> sorted = new TreeMap<Integer, Integer>(linesMapping); Map<Integer, Integer> sorted = new TreeMap<Integer, Integer>(linesMapping);
for (Entry<Integer, Integer> entry : sorted.entrySet()) { for (Entry<Integer, Integer> entry : sorted.entrySet()) {
buffer.append(entry.getKey()).append(" <-> ").append(entry.getValue()+ offset_total + 1).appendLineSeparator(); buffer.append(entry.getKey()).append(" <-> ").append(entry.getValue() + offset_total + 1).appendLineSeparator();
}
if (!unmappedLines.isEmpty()) {
buffer.append("Not mapped:").appendLineSeparator();
for (Integer line : unmappedLines) {
if (!linesMapping.containsKey(line)) {
buffer.append(line).appendLineSeparator();
}
}
} }
} }
@ -121,6 +132,7 @@ public class BytecodeSourceMapper {
int i = 0; int i = 0;
for (Entry<Integer, Integer> entry : linesMapping.entrySet()) { for (Entry<Integer, Integer> entry : linesMapping.entrySet()) {
res[i] = entry.getKey(); res[i] = entry.getKey();
unmappedLines.remove(entry.getKey());
res[i + 1] = entry.getValue() + offset_total + 1; // make it 1 based res[i + 1] = entry.getValue() + offset_total + 1; // make it 1 based
i += 2; i += 2;
} }

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -46,8 +46,7 @@ public class DomHelper {
// head statement // head statement
Statement firstst = stats.getWithKey(firstblock.id); Statement firstst = stats.getWithKey(firstblock.id);
// dummy exit statement // dummy exit statement
Statement dummyexit = new Statement(); DummyExitStatement dummyexit = new DummyExitStatement();
dummyexit.type = Statement.TYPE_DUMMYEXIT;
Statement general; Statement general;
if (stats.size() > 1 || firstblock.isSuccessor(firstblock)) { // multiple basic blocks or an infinite loop of one block if (stats.size() > 1 || firstblock.isSuccessor(firstblock)) { // multiple basic blocks or an infinite loop of one block

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -247,7 +247,9 @@ public class ExitHelper {
boolean res = false; boolean res = false;
for (StatEdge edge : root.getDummyExit().getAllPredecessorEdges()) { DummyExitStatement dummyExit = root.getDummyExit();
for (StatEdge edge : dummyExit.getAllPredecessorEdges()) {
if (!edge.explicit) { if (!edge.explicit) {
Statement source = edge.getSource(); Statement source = edge.getSource();
List<Exprent> lstExpr = source.getExprents(); List<Exprent> lstExpr = source.getExprents();
@ -257,6 +259,7 @@ public class ExitHelper {
ExitExprent ex = (ExitExprent)expr; ExitExprent ex = (ExitExprent)expr;
if (ex.getExitType() == ExitExprent.EXIT_RETURN && ex.getValue() == null) { if (ex.getExitType() == ExitExprent.EXIT_RETURN && ex.getValue() == null) {
// remove redundant return // remove redundant return
dummyExit.addBytecodeOffsets(ex.bytecode);
lstExpr.remove(lstExpr.size() - 1); lstExpr.remove(lstExpr.size() - 1);
res = true; res = true;
} }

@ -0,0 +1,42 @@
/*
* 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.java.decompiler.modules.decompiler.stats;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* @author egor
*/
public class DummyExitStatement extends Statement {
public Set<Integer> bytecode = null; // offsets of bytecode instructions mapped to dummy exit
public DummyExitStatement() {
type = Statement.TYPE_DUMMYEXIT;
}
public void addBytecodeOffsets(Collection<Integer> bytecodeOffsets) {
if (bytecodeOffsets != null && !bytecodeOffsets.isEmpty()) {
if (bytecode == null) {
bytecode = new HashSet<Integer>(bytecodeOffsets);
}
else {
bytecode.addAll(bytecodeOffsets);
}
}
}
}

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -22,9 +22,9 @@ import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor;
public class RootStatement extends Statement { public class RootStatement extends Statement {
private Statement dummyExit; private DummyExitStatement dummyExit;
public RootStatement(Statement head, Statement dummyExit) { public RootStatement(Statement head, DummyExitStatement dummyExit) {
type = Statement.TYPE_ROOT; type = Statement.TYPE_ROOT;
@ -39,11 +39,11 @@ public class RootStatement extends Statement {
return ExprProcessor.listToJava(varDefinitions, indent, tracer).append(first.toJava(indent, tracer)); return ExprProcessor.listToJava(varDefinitions, indent, tracer).append(first.toJava(indent, tracer));
} }
public Statement getDummyExit() { public DummyExitStatement getDummyExit() {
return dummyExit; return dummyExit;
} }
public void setDummyExit(Statement dummyExit) { public void setDummyExit(DummyExitStatement dummyExit) {
this.dummyExit = dummyExit; this.dummyExit = dummyExit;
} }
} }

@ -13,22 +13,23 @@ class i implements bg {
i(b var1, j var2) { i(b var1, j var2) {
this.b = var1; this.b = var1;
this.a = var2;// 1 this.a = var2;
} }// 1
public void a(c var1, k var2, boolean var3) { public void a(c var1, k var2, boolean var3) {
File var4 = this.a.b().a(var1);// 2 File var4 = this.a.b().a(var1);// 2
b.a(this.b).add(var4);// 3 b.a(this.b).add(var4);// 3
} }// 4
public void a(a.a.a.a.c.b var1) { public void a(a.a.a.a.c.b var1) {
} }// 0
} }
class 'a/a/a/a/e/f/i' { class 'a/a/a/a/e/f/i' {
method '<init> (La/a/a/a/e/f/b;La/a/a/a/c/j;)V' { method '<init> (La/a/a/a/e/f/b;La/a/a/a/c/j;)V' {
2 14 2 14
7 15 7 15
e 16
} }
method 'a (La/a/a/a/c/c;La/a/a/a/a/k;Z)V' { method 'a (La/a/a/a/c/c;La/a/a/a/a/k;Z)V' {
@ -39,10 +40,17 @@ class 'a/a/a/a/e/f/i' {
12 20 12 20
15 20 15 20
1a 20 1a 20
20 21
}
method 'a (La/a/a/a/c/b;)V' {
0 24
} }
} }
Lines mapping: Lines mapping:
1 <-> 16 0 <-> 25
1 <-> 17
2 <-> 20 2 <-> 20
3 <-> 21 3 <-> 21
4 <-> 22

@ -11,7 +11,7 @@ public abstract class TestAbstractMethods {
public void test2(String var1) { public void test2(String var1) {
System.out.println(var1);// 17 System.out.println(var1);// 17
} }// 18
} }
class 'pkg/TestAbstractMethods' { class 'pkg/TestAbstractMethods' {
@ -22,9 +22,11 @@ class 'pkg/TestAbstractMethods' {
method 'test2 (Ljava/lang/String;)V' { method 'test2 (Ljava/lang/String;)V' {
0 12 0 12
4 12 4 12
7 13
} }
} }
Lines mapping: Lines mapping:
11 <-> 7 11 <-> 7
17 <-> 13 17 <-> 13
18 <-> 14

@ -2,10 +2,10 @@ package pkg;
class TestAmbiguousCall { class TestAmbiguousCall {
void m1(RuntimeException var1, String var2) { void m1(RuntimeException var1, String var2) {
} }// 4
void m1(IllegalArgumentException var1, String var2) { void m1(IllegalArgumentException var1, String var2) {
} }// 5
void test() { void test() {
IllegalArgumentException var1 = new IllegalArgumentException();// 8 IllegalArgumentException var1 = new IllegalArgumentException();// 8
@ -14,10 +14,18 @@ class TestAmbiguousCall {
IllegalArgumentException var2 = new IllegalArgumentException();// 12 IllegalArgumentException var2 = new IllegalArgumentException();// 12
this.m1((RuntimeException)var2, "RE");// 13 this.m1((RuntimeException)var2, "RE");// 13
this.m1((IllegalArgumentException)var2, "IAE");// 14 this.m1((IllegalArgumentException)var2, "IAE");// 14
} }// 15
} }
class 'pkg/TestAmbiguousCall' { class 'pkg/TestAmbiguousCall' {
method 'm1 (Ljava/lang/RuntimeException;Ljava/lang/String;)V' {
0 4
}
method 'm1 (Ljava/lang/IllegalArgumentException;Ljava/lang/String;)V' {
0 7
}
method 'test ()V' { method 'test ()V' {
7 10 7 10
a 11 a 11
@ -30,13 +38,17 @@ class 'pkg/TestAmbiguousCall' {
27 15 27 15
2a 15 2a 15
2c 15 2c 15
2f 16
} }
} }
Lines mapping: Lines mapping:
4 <-> 5
5 <-> 8
8 <-> 11 8 <-> 11
9 <-> 12 9 <-> 12
10 <-> 13 10 <-> 13
12 <-> 14 12 <-> 14
13 <-> 15 13 <-> 15
14 <-> 16 14 <-> 16
15 <-> 17

@ -2,10 +2,10 @@ package pkg;
class TestAmbiguousCall { class TestAmbiguousCall {
void m1(RuntimeException e, String s) { void m1(RuntimeException e, String s) {
} }// 4
void m1(IllegalArgumentException e, String s) { void m1(IllegalArgumentException e, String s) {
} }// 5
void test() { void test() {
IllegalArgumentException iae = new IllegalArgumentException();// 8 IllegalArgumentException iae = new IllegalArgumentException();// 8
@ -14,10 +14,18 @@ class TestAmbiguousCall {
IllegalArgumentException re = new IllegalArgumentException();// 12 IllegalArgumentException re = new IllegalArgumentException();// 12
this.m1((RuntimeException)re, "RE");// 13 this.m1((RuntimeException)re, "RE");// 13
this.m1((IllegalArgumentException)re, "IAE");// 14 this.m1((IllegalArgumentException)re, "IAE");// 14
} }// 15
} }
class 'pkg/TestAmbiguousCall' { class 'pkg/TestAmbiguousCall' {
method 'm1 (Ljava/lang/RuntimeException;Ljava/lang/String;)V' {
0 4
}
method 'm1 (Ljava/lang/IllegalArgumentException;Ljava/lang/String;)V' {
0 7
}
method 'test ()V' { method 'test ()V' {
7 10 7 10
a 11 a 11
@ -30,13 +38,17 @@ class 'pkg/TestAmbiguousCall' {
27 15 27 15
2a 15 2a 15
2c 15 2c 15
2f 16
} }
} }
Lines mapping: Lines mapping:
4 <-> 5
5 <-> 8
8 <-> 11 8 <-> 11
9 <-> 12 9 <-> 12
10 <-> 13 10 <-> 13
12 <-> 14 12 <-> 14
13 <-> 15 13 <-> 15
14 <-> 16 14 <-> 16
15 <-> 17

@ -5,26 +5,26 @@ public abstract class TestAnonymousClass {
public void run() { public void run() {
boolean var1 = true;// 28 boolean var1 = true;// 28
boolean var2 = true;// 29 boolean var2 = true;// 29
} }// 30
}; };
public static final Runnable R = new Runnable() { public static final Runnable R = new Runnable() {
public void run() { public void run() {
boolean var1 = true;// 45 boolean var1 = true;// 45
boolean var2 = true;// 46 boolean var2 = true;// 46
} }// 47
}; };
public static final Runnable R1 = new Runnable() { public static final Runnable R1 = new Runnable() {
public void run() { public void run() {
boolean var1 = true;// 53 boolean var1 = true;// 53
boolean var2 = true;// 54 boolean var2 = true;// 54
} }// 55
}; };
private final TestAnonymousClass.InnerRecursive y = new TestAnonymousClass.InnerRecursive(new TestAnonymousClass.InnerRecursive((TestAnonymousClass.InnerRecursive)null) { private final TestAnonymousClass.InnerRecursive y = new TestAnonymousClass.InnerRecursive(new TestAnonymousClass.InnerRecursive((TestAnonymousClass.InnerRecursive)null) {
void foo() { void foo() {
boolean var1 = true;// 75 boolean var1 = true;// 75
boolean var2 = true;// 76 boolean var2 = true;// 76
boolean var3 = true;// 77 boolean var3 = true;// 77
} }// 78
}) { }) {
int v = 5; int v = 5;
int t = 5; int t = 5;
@ -36,7 +36,7 @@ public abstract class TestAnonymousClass {
boolean var1 = true;// 90 boolean var1 = true;// 90
boolean var2 = true;// 91 boolean var2 = true;// 91
boolean var3 = true;// 92 boolean var3 = true;// 92
} }// 93
}) { }) {
int v = 5; int v = 5;
int t = 5; int t = 5;
@ -50,32 +50,32 @@ public abstract class TestAnonymousClass {
public void foo() throws Exception { public void foo() throws Exception {
boolean var1 = true;// 13 boolean var1 = true;// 13
boolean var2 = true;// 14 boolean var2 = true;// 14
} }// 15
};// 11 };// 11
var2.foo();// 17 var2.foo();// 17
} else { } else {
System.out.println(5);// 21 System.out.println(5);// 21
} }
} }// 23
void boo() { void boo() {
boolean var1 = true;// 35 boolean var1 = true;// 35
} }// 36
void zoo() { void zoo() {
boolean var1 = true;// 39 boolean var1 = true;// 39
} }// 40
static class InnerRecursive { static class InnerRecursive {
TestAnonymousClass.InnerRecursive r; TestAnonymousClass.InnerRecursive r;
public InnerRecursive(TestAnonymousClass.InnerRecursive var1) { public InnerRecursive(TestAnonymousClass.InnerRecursive var1) {
this.r = var1;// 105 this.r = var1;// 105
} }// 106
void foo() { void foo() {
} }// 110
} }
private static class Inner { private static class Inner {
@ -83,7 +83,7 @@ public abstract class TestAnonymousClass {
public void run() { public void run() {
boolean var1 = true;// 66 boolean var1 = true;// 66
boolean var2 = true;// 67 boolean var2 = true;// 67
} }// 68
}; };
} }
@ -98,6 +98,7 @@ class 'pkg/TestAnonymousClass$2' {
1 5 1 5
2 6 2 6
3 6 3 6
4 7
} }
} }
@ -107,6 +108,7 @@ class 'pkg/TestAnonymousClass$3' {
1 11 1 11
2 12 2 12
3 12 3 12
4 13
} }
} }
@ -116,6 +118,7 @@ class 'pkg/TestAnonymousClass$4' {
1 17 1 17
2 18 2 18
3 18 3 18
4 19
} }
} }
@ -127,6 +130,7 @@ class 'pkg/TestAnonymousClass$5' {
3 24 3 24
4 25 4 25
5 25 5 25
6 26
} }
} }
@ -138,6 +142,7 @@ class 'pkg/TestAnonymousClass$7' {
3 36 3 36
4 37 4 37
5 37 5 37
6 38
} }
} }
@ -147,6 +152,7 @@ class 'pkg/TestAnonymousClass$1' {
1 50 1 50
2 51 2 51
3 51 3 51
4 52
} }
} }
@ -158,22 +164,30 @@ class 'pkg/TestAnonymousClass' {
16 56 16 56
19 56 19 56
1a 56 1a 56
1d 59
} }
method 'boo ()V' { method 'boo ()V' {
0 62 0 62
1 62 1 62
2 63
} }
method 'zoo ()V' { method 'zoo ()V' {
0 66 0 66
1 66 1 66
2 67
} }
} }
class 'pkg/TestAnonymousClass$InnerRecursive' { class 'pkg/TestAnonymousClass$InnerRecursive' {
method '<init> (Lpkg/TestAnonymousClass$InnerRecursive;)V' { method '<init> (Lpkg/TestAnonymousClass$InnerRecursive;)V' {
6 73 6 73
9 74
}
method 'foo ()V' {
0 77
} }
} }
@ -183,6 +197,7 @@ class 'pkg/TestAnonymousClass$Inner$1' {
1 83 1 83
2 84 2 84
3 84 3 84
4 85
} }
} }
@ -191,22 +206,37 @@ Lines mapping:
11 <-> 54 11 <-> 54
13 <-> 51 13 <-> 51
14 <-> 52 14 <-> 52
15 <-> 53
17 <-> 55 17 <-> 55
21 <-> 57 21 <-> 57
23 <-> 60
28 <-> 6 28 <-> 6
29 <-> 7 29 <-> 7
30 <-> 8
35 <-> 63 35 <-> 63
36 <-> 64
39 <-> 67 39 <-> 67
40 <-> 68
45 <-> 12 45 <-> 12
46 <-> 13 46 <-> 13
47 <-> 14
53 <-> 18 53 <-> 18
54 <-> 19 54 <-> 19
55 <-> 20
66 <-> 84 66 <-> 84
67 <-> 85 67 <-> 85
68 <-> 86
75 <-> 24 75 <-> 24
76 <-> 25 76 <-> 25
77 <-> 26 77 <-> 26
78 <-> 27
90 <-> 36 90 <-> 36
91 <-> 37 91 <-> 37
92 <-> 38 92 <-> 38
93 <-> 39
105 <-> 74 105 <-> 74
106 <-> 75
110 <-> 78
Not mapped:
18
104

@ -11,7 +11,7 @@ public class TestClassCast {
} }
System.out.println(((List)var2).size());// 26 System.out.println(((List)var2).size());// 26
} }// 27
} }
class 'pkg/TestClassCast' { class 'pkg/TestClassCast' {
@ -24,6 +24,7 @@ class 'pkg/TestClassCast' {
18 12 18 12
1c 12 1c 12
21 12 21 12
24 13
} }
} }
@ -32,3 +33,4 @@ Lines mapping:
23 <-> 9 23 <-> 9
24 <-> 10 24 <-> 10
26 <-> 13 26 <-> 13
27 <-> 14

@ -6,7 +6,7 @@ public class TestClassFields {
static { static {
sizes = new int[names.length];// 26 sizes = new int[names.length];// 26
} }// 27
} }
class 'pkg/TestClassFields' { class 'pkg/TestClassFields' {
@ -14,8 +14,12 @@ class 'pkg/TestClassFields' {
11 7 11 7
14 7 14 7
17 7 17 7
1a 8
} }
} }
Lines mapping: Lines mapping:
26 <-> 8 26 <-> 8
27 <-> 9
Not mapped:
25

@ -20,8 +20,8 @@ public class TestClassLambda {
var1.forEach((var2x) -> {// 32 var1.forEach((var2x) -> {// 32
int var3 = 2 * var2x.intValue();// 33 int var3 = 2 * var2x.intValue();// 33
System.out.println(var3 + var2 + this.field);// 34 System.out.println(var3 + var2 + this.field);// 34
}); });// 35
} }// 36
public void testLambda1() { public void testLambda1() {
int var1 = (int)Math.random();// 39 int var1 = (int)Math.random();// 39
@ -31,26 +31,26 @@ public class TestClassLambda {
Runnable var3 = () -> { Runnable var3 = () -> {
System.out.println("hello2" + var1); System.out.println("hello2" + var1);
};// 41 };// 41
} }// 42
public void testLambda2() { public void testLambda2() {
reduce((var0, var1) -> {// 45 reduce((var0, var1) -> {// 45
return Math.max(var0, var1); return Math.max(var0, var1);
}); });
} }// 46
public void testLambda3() { public void testLambda3() {
reduce(Math::max);// 49 reduce(Math::max);// 49
} }// 50
public void testLambda4() { public void testLambda4() {
reduce(TestClassLambda::localMax);// 53 reduce(TestClassLambda::localMax);// 53
} }// 54
public void testLambda5() { public void testLambda5() {
String var1 = "abcd";// 57 String var1 = "abcd";// 57
function(var1::toString);// 58 function(var1::toString);// 58
} }// 59
public void testLambda6() { public void testLambda6() {
ArrayList var1 = new ArrayList();// 62 ArrayList var1 = new ArrayList();// 62
@ -59,11 +59,11 @@ public class TestClassLambda {
var1.removeIf((var2x) -> {// 65 var1.removeIf((var2x) -> {// 65
return var2 >= var2x.length() && var2x.length() <= var3; return var2 >= var2x.length() && var2x.length() <= var3;
}); });
} }// 66
public static void testLambda7(Annotation[] var0) { public static void testLambda7(Annotation[] var0) {
Arrays.stream(var0).map(Annotation::annotationType);// 69 Arrays.stream(var0).map(Annotation::annotationType);// 69
} }// 70
public static OptionalInt reduce(IntBinaryOperator var0) { public static OptionalInt reduce(IntBinaryOperator var0) {
return null;// 73 return null;// 73
@ -85,7 +85,7 @@ public class TestClassLambda {
};// 87 };// 87
System.out.println("hello1" + var1);// 88 System.out.println("hello1" + var1);// 88
};// 86 };// 86
} }// 90
} }
class 'pkg/TestClassLambda' { class 'pkg/TestClassLambda' {
@ -99,6 +99,7 @@ class 'pkg/TestClassLambda' {
e 21 e 21
11 21 11 21
12 21 12 21
15 22
} }
method 'testLambda ()V' { method 'testLambda ()V' {
@ -122,6 +123,7 @@ class 'pkg/TestClassLambda' {
40 18 40 18
41 18 41 18
4a 19 4a 19
4f 23
} }
method 'lambda$testLambda1$1 (I)V' { method 'lambda$testLambda1$1 (I)V' {
@ -129,6 +131,7 @@ class 'pkg/TestClassLambda' {
a 28 a 28
13 28 13 28
16 28 16 28
19 29
} }
method 'lambda$testLambda1$2 (I)V' { method 'lambda$testLambda1$2 (I)V' {
@ -136,6 +139,7 @@ class 'pkg/TestClassLambda' {
a 31 a 31
13 31 13 31
16 31 16 31
19 32
} }
method 'testLambda1 ()V' { method 'testLambda1 ()V' {
@ -144,6 +148,7 @@ class 'pkg/TestClassLambda' {
4 26 4 26
b 29 b 29
12 32 12 32
13 33
} }
method 'lambda$testLambda2$3 (II)I' { method 'lambda$testLambda2$3 (II)I' {
@ -153,20 +158,24 @@ class 'pkg/TestClassLambda' {
method 'testLambda2 ()V' { method 'testLambda2 ()V' {
5 36 5 36
9 39
} }
method 'testLambda3 ()V' { method 'testLambda3 ()V' {
5 42 5 42
9 43
} }
method 'testLambda4 ()V' { method 'testLambda4 ()V' {
5 46 5 46
9 47
} }
method 'testLambda5 ()V' { method 'testLambda5 ()V' {
0 50 0 50
2 50 2 50
e 51 e 51
12 52
} }
method 'lambda$testLambda6$4 (IILjava/lang/String;)Z' { method 'lambda$testLambda6$4 (IILjava/lang/String;)Z' {
@ -186,11 +195,13 @@ class 'pkg/TestClassLambda' {
18 57 18 57
19 57 19 57
22 58 22 58
28 61
} }
method 'testLambda7 ([Ljava/lang/annotation/Annotation;)V' { method 'testLambda7 ([Ljava/lang/annotation/Annotation;)V' {
1 64 1 64
9 64 9 64
f 65
} }
method 'reduce (Ljava/util/function/IntBinaryOperator;)Ljava/util/OptionalInt;' { method 'reduce (Ljava/util/function/IntBinaryOperator;)Ljava/util/OptionalInt;' {
@ -214,6 +225,7 @@ class 'pkg/TestClassLambda' {
a 83 a 83
13 83 13 83
16 83 16 83
19 84
} }
method 'lambda$nestedLambdas$6 (I)V' { method 'lambda$nestedLambdas$6 (I)V' {
@ -222,12 +234,14 @@ class 'pkg/TestClassLambda' {
11 85 11 85
1a 85 1a 85
1d 85 1d 85
20 86
} }
method 'nestedLambdas ()V' { method 'nestedLambdas ()V' {
0 80 0 80
1 80 1 80
8 86 8 86
9 87
} }
} }
@ -237,19 +251,28 @@ Lines mapping:
32 <-> 20 32 <-> 20
33 <-> 21 33 <-> 21
34 <-> 22 34 <-> 22
35 <-> 23
36 <-> 24
39 <-> 27 39 <-> 27
40 <-> 30 40 <-> 30
41 <-> 33 41 <-> 33
42 <-> 34
45 <-> 37 45 <-> 37
46 <-> 40
49 <-> 43 49 <-> 43
50 <-> 44
53 <-> 47 53 <-> 47
54 <-> 48
57 <-> 51 57 <-> 51
58 <-> 52 58 <-> 52
59 <-> 53
62 <-> 56 62 <-> 56
63 <-> 57 63 <-> 57
64 <-> 58 64 <-> 58
65 <-> 59 65 <-> 59
66 <-> 62
69 <-> 65 69 <-> 65
70 <-> 66
73 <-> 69 73 <-> 69
77 <-> 73 77 <-> 73
81 <-> 77 81 <-> 77
@ -257,3 +280,5 @@ Lines mapping:
86 <-> 87 86 <-> 87
87 <-> 85 87 <-> 85
88 <-> 86 88 <-> 86
89 <-> 87
90 <-> 88

@ -83,3 +83,8 @@ Lines mapping:
49 <-> 30 49 <-> 30
52 <-> 33 52 <-> 33
53 <-> 34 53 <-> 34
Not mapped:
34
39
54
58

@ -10,13 +10,14 @@ public class TestClassNestedInitializer {
} }
};// 22 };// 22
System.out.println(var1.secret);// 23 System.out.println(var1.secret);// 23
} }// 24
} }
class 'pkg/TestClassNestedInitializer$1' { class 'pkg/TestClassNestedInitializer$1' {
method '<init> (Lpkg/TestClassNestedInitializer;)V' { method '<init> (Lpkg/TestClassNestedInitializer;)V' {
a 8 a 8
c 8 c 8
f 9
} }
} }
@ -26,9 +27,11 @@ class 'pkg/TestClassNestedInitializer' {
9 11 9 11
d 11 d 11
10 11 10 11
13 12
} }
} }
Lines mapping: Lines mapping:
22 <-> 11 22 <-> 11
23 <-> 12 23 <-> 12
24 <-> 13

@ -6,7 +6,7 @@ public class TestClassSimpleBytecodeMapping {
this.run(new Runnable() {// 14 this.run(new Runnable() {// 14
public void run() { public void run() {
System.out.println("Runnable");// 17 System.out.println("Runnable");// 17
} }// 18
}); });
this.test2("1");// 21 this.test2("1");// 21
if(Math.random() > 0.0D) {// 23 if(Math.random() > 0.0D) {// 23
@ -27,22 +27,22 @@ public class TestClassSimpleBytecodeMapping {
System.out.println("Finally");// 38 System.out.println("Finally");// 38
} }
} }// 40
void run(Runnable var1) { void run(Runnable var1) {
var1.run();// 49 var1.run();// 49
} }// 50
public class InnerClass2 { public class InnerClass2 {
public void print() { public void print() {
System.out.println("Inner2");// 54 System.out.println("Inner2");// 54
} }// 55
} }
public class InnerClass { public class InnerClass {
public void print() { public void print() {
System.out.println("Inner");// 44 System.out.println("Inner");// 44
} }// 45
} }
} }
@ -51,6 +51,7 @@ class 'pkg/TestClassSimpleBytecodeMapping$1' {
0 7 0 7
3 7 3 7
5 7 5 7
8 8
} }
} }
@ -85,10 +86,12 @@ class 'pkg/TestClassSimpleBytecodeMapping' {
23 26 23 26
24 26 24 26
27 26 27 26
2e 29
} }
method 'run (Ljava/lang/Runnable;)V' { method 'run (Ljava/lang/Runnable;)V' {
1 32 1 32
6 33
} }
} }
@ -97,6 +100,7 @@ class 'pkg/TestClassSimpleBytecodeMapping$InnerClass2' {
0 37 0 37
3 37 3 37
5 37 5 37
8 38
} }
} }
@ -105,6 +109,7 @@ class 'pkg/TestClassSimpleBytecodeMapping$InnerClass' {
0 43 0 43
3 43 3 43
5 43 5 43
8 44
} }
} }
@ -112,6 +117,7 @@ Lines mapping:
12 <-> 5 12 <-> 5
14 <-> 6 14 <-> 6
17 <-> 8 17 <-> 8
18 <-> 9
21 <-> 11 21 <-> 11
23 <-> 12 23 <-> 12
24 <-> 13 24 <-> 13
@ -121,6 +127,13 @@ Lines mapping:
34 <-> 23 34 <-> 23
36 <-> 25 36 <-> 25
38 <-> 27 38 <-> 27
40 <-> 30
44 <-> 44 44 <-> 44
45 <-> 45
49 <-> 33 49 <-> 33
50 <-> 34
54 <-> 38 54 <-> 38
55 <-> 39
Not mapped:
35
39

@ -10,7 +10,7 @@ public class TestClassSwitch {
case 13: case 13:
System.out.println(13);// 24 System.out.println(13);// 24
} }
} }// 25
} }
class 'pkg/TestClassSwitch' { class 'pkg/TestClassSwitch' {
@ -19,6 +19,7 @@ class 'pkg/TestClassSwitch' {
1c 10 1c 10
1f 10 1f 10
21 10 21 10
24 12
25 6 25 6
28 6 28 6
29 6 29 6
@ -29,5 +30,6 @@ class 'pkg/TestClassSwitch' {
Lines mapping: Lines mapping:
22 <-> 5 22 <-> 5
24 <-> 11 24 <-> 11
25 <-> 13
27 <-> 7 27 <-> 7
29 <-> 9 29 <-> 9

@ -17,7 +17,7 @@ public class TestClassTypes {
System.out.println();// 36 System.out.println();// 36
} }
} }// 38
public boolean testBit(int var1) { public boolean testBit(int var1) {
return (var1 & 1) == 1;// 41 return (var1 & 1) == 1;// 41
@ -36,7 +36,7 @@ public class TestClassTypes {
System.out.println("3");// 55 System.out.println("3");// 55
} }
} }// 57
public void testAssignmentType(List var1) { public void testAssignmentType(List var1) {
Object var2 = var1;// 61 Object var2 = var1;// 61
@ -45,7 +45,7 @@ public class TestClassTypes {
} }
System.out.println(((List)var2).size());// 67 System.out.println(((List)var2).size());// 67
} }// 68
} }
class 'pkg/TestClassTypes' { class 'pkg/TestClassTypes' {
@ -72,6 +72,7 @@ class 'pkg/TestClassTypes' {
23 15 23 15
26 16 26 16
29 16 29 16
2c 19
} }
method 'testBit (I)Z' { method 'testBit (I)Z' {
@ -92,6 +93,7 @@ class 'pkg/TestClassTypes' {
42 35 42 35
45 35 45 35
47 35 47 35
4a 38
} }
method 'testAssignmentType (Ljava/util/List;)V' { method 'testAssignmentType (Ljava/util/List;)V' {
@ -103,6 +105,7 @@ class 'pkg/TestClassTypes' {
18 46 18 46
1c 46 1c 46
21 46 21 46
24 47
} }
} }
@ -115,12 +118,18 @@ Lines mapping:
32 <-> 13 32 <-> 13
35 <-> 16 35 <-> 16
36 <-> 17 36 <-> 17
38 <-> 20
41 <-> 23 41 <-> 23
46 <-> 27 46 <-> 27
48 <-> 29 48 <-> 29
51 <-> 32 51 <-> 32
55 <-> 36 55 <-> 36
57 <-> 39
61 <-> 42 61 <-> 42
63 <-> 43 63 <-> 43
64 <-> 44 64 <-> 44
67 <-> 47 67 <-> 47
68 <-> 48
Not mapped:
49
52

@ -16,7 +16,7 @@ public class TestClassVar {
} }
} }
} }// 37
public Long testFieldSSAU1() { public Long testFieldSSAU1() {
return new Long((long)(this.field_int++));// 40 return new Long((long)(this.field_int++));// 40
@ -36,7 +36,7 @@ public class TestClassVar {
} }
} }
} }// 58
} }
class 'pkg/TestClassVar' { class 'pkg/TestClassVar' {
@ -50,6 +50,7 @@ class 'pkg/TestClassVar' {
20 11 20 11
26 12 26 12
29 12 29 12
34 18
} }
method 'testFieldSSAU1 ()Ljava/lang/Long;' { method 'testFieldSSAU1 ()Ljava/lang/Long;' {
@ -69,6 +70,7 @@ class 'pkg/TestClassVar' {
1c 33 1c 33
1f 34 1f 34
22 34 22 34
28 38
} }
} }
@ -77,6 +79,7 @@ Lines mapping:
29 <-> 10 29 <-> 10
32 <-> 12 32 <-> 12
33 <-> 13 33 <-> 13
37 <-> 19
40 <-> 22 40 <-> 22
45 <-> 26 45 <-> 26
47 <-> 28 47 <-> 28
@ -84,3 +87,6 @@ Lines mapping:
51 <-> 30 51 <-> 30
54 <-> 34 54 <-> 34
55 <-> 35 55 <-> 35
58 <-> 39
Not mapped:
57

@ -5,7 +5,7 @@ class TestCodeConstructs {
void expressions() { void expressions() {
(new String()).hashCode();// 20 (new String()).hashCode();// 20
} }// 21
Integer fieldIncrement() { Integer fieldIncrement() {
return new Integer(this.count++);// 25 return new Integer(this.count++);// 25
@ -15,6 +15,7 @@ class TestCodeConstructs {
class 'pkg/TestCodeConstructs' { class 'pkg/TestCodeConstructs' {
method 'expressions ()V' { method 'expressions ()V' {
7 6 7 6
b 7
} }
method 'fieldIncrement ()Ljava/lang/Integer;' { method 'fieldIncrement ()Ljava/lang/Integer;' {
@ -26,4 +27,5 @@ class 'pkg/TestCodeConstructs' {
Lines mapping: Lines mapping:
20 <-> 7 20 <-> 7
21 <-> 8
25 <-> 11 25 <-> 11

@ -29,46 +29,99 @@ public class TestConstants {
@TestConstants.A(byte.class) @TestConstants.A(byte.class)
void m1() { void m1() {
} }// 54
@TestConstants.A(char.class) @TestConstants.A(char.class)
void m2() { void m2() {
} }// 55
@TestConstants.A(double.class) @TestConstants.A(double.class)
void m3() { void m3() {
} }// 56
@TestConstants.A(float.class) @TestConstants.A(float.class)
void m4() { void m4() {
} }// 57
@TestConstants.A(int.class) @TestConstants.A(int.class)
void m5() { void m5() {
} }// 58
@TestConstants.A(long.class) @TestConstants.A(long.class)
void m6() { void m6() {
} }// 59
@TestConstants.A(short.class) @TestConstants.A(short.class)
void m7() { void m7() {
} }// 60
@TestConstants.A(boolean.class) @TestConstants.A(boolean.class)
void m8() { void m8() {
} }// 61
@TestConstants.A(void.class) @TestConstants.A(void.class)
void m9() { void m9() {
} }// 62
@TestConstants.A(Date.class) @TestConstants.A(Date.class)
void m10() { void m10() {
} }// 63
@interface A { @interface A {
Class<?> value(); Class<?> value();
} }
} }
class 'pkg/TestConstants' {
method 'm1 ()V' {
0 31
}
method 'm2 ()V' {
0 35
}
method 'm3 ()V' {
0 39
}
method 'm4 ()V' {
0 43
}
method 'm5 ()V' {
0 47
}
method 'm6 ()V' {
0 51
}
method 'm7 ()V' {
0 55
}
method 'm8 ()V' {
0 59
}
method 'm9 ()V' {
0 63
}
method 'm10 ()V' {
0 67
}
}
Lines mapping:
54 <-> 32
55 <-> 36
56 <-> 40
57 <-> 44
58 <-> 48
59 <-> 52
60 <-> 56
61 <-> 60
62 <-> 64
63 <-> 68

@ -10,7 +10,7 @@ public abstract class TestDeprecations {
/** @deprecated */ /** @deprecated */
public void byComment() { public void byComment() {
boolean var1 = true;// 27 boolean var1 = true;// 27
} }// 28
/** @deprecated */ /** @deprecated */
public abstract void byCommentAbstract(); public abstract void byCommentAbstract();
@ -19,7 +19,7 @@ public abstract class TestDeprecations {
@Deprecated @Deprecated
public void byAnno() { public void byAnno() {
boolean var1 = true;// 35 boolean var1 = true;// 35
} }// 36
/** @deprecated */ /** @deprecated */
@Deprecated @Deprecated
@ -32,7 +32,7 @@ public abstract class TestDeprecations {
void foo() { void foo() {
boolean var1 = true;// 55 boolean var1 = true;// 55
} }// 56
} }
/** @deprecated */ /** @deprecated */
@ -41,7 +41,7 @@ public abstract class TestDeprecations {
void foo() { void foo() {
boolean var1 = true;// 46 boolean var1 = true;// 46
} }// 47
} }
} }
@ -49,11 +49,13 @@ class 'pkg/TestDeprecations' {
method 'byComment ()V' { method 'byComment ()V' {
0 11 0 11
1 11 1 11
2 12
} }
method 'byAnno ()V' { method 'byAnno ()V' {
0 20 0 20
1 20 1 20
2 21
} }
} }
@ -61,6 +63,7 @@ class 'pkg/TestDeprecations$ByAnno' {
method 'foo ()V' { method 'foo ()V' {
0 33 0 33
1 33 1 33
2 34
} }
} }
@ -68,11 +71,16 @@ class 'pkg/TestDeprecations$ByComment' {
method 'foo ()V' { method 'foo ()V' {
0 42 0 42
1 42 1 42
2 43
} }
} }
Lines mapping: Lines mapping:
27 <-> 12 27 <-> 12
28 <-> 13
35 <-> 21 35 <-> 21
36 <-> 22
46 <-> 43 46 <-> 43
47 <-> 44
55 <-> 34 55 <-> 34
56 <-> 35

@ -4,39 +4,60 @@ public enum TestEnum {
E1, E1,
E2 { E2 {
public void m() { public void m() {
} }// 22
}, },
E3("-"), E3("-"),
E4("+") { E4("+") {
public void m() { public void m() {
} }// 27
}; };
private String s; private String s;
public void m() { public void m() {
} }// 30
private TestEnum() { private TestEnum() {
this("?");// 34 this("?");
} }// 34
private TestEnum(@Deprecated String var3) { private TestEnum(@Deprecated String var3) {
this.s = var3;// 35 this.s = var3;
}// 35
}
class 'pkg/TestEnum$1' {
method 'm ()V' {
0 6
}
}
class 'pkg/TestEnum$2' {
method 'm ()V' {
0 11
} }
} }
class 'pkg/TestEnum' { class 'pkg/TestEnum' {
method 'm ()V' {
0 17
}
method '<init> (Ljava/lang/String;I)V' { method '<init> (Ljava/lang/String;I)V' {
3 20 3 20
5 20 5 20
8 21
} }
method '<init> (Ljava/lang/String;ILjava/lang/String;)V' { method '<init> (Ljava/lang/String;ILjava/lang/String;)V' {
8 24 8 24
b 25
} }
} }
Lines mapping: Lines mapping:
34 <-> 21 22 <-> 7
35 <-> 25 27 <-> 12
30 <-> 18
34 <-> 22
35 <-> 26

@ -3,22 +3,23 @@ package pkg;
class TestInnerClassConstructor { class TestInnerClassConstructor {
void m() { void m() {
new TestInnerClassConstructor.Inner("text");// 5 new TestInnerClassConstructor.Inner("text");// 5
} }// 6
void n(String var1) { void n(String var1) {
System.out.println("n(): " + var1);// 9 System.out.println("n(): " + var1);// 9
} }// 10
final class Inner { final class Inner {
private Inner(String var2) { private Inner(String var2) {
TestInnerClassConstructor.this.n(var2);// 14 TestInnerClassConstructor.this.n(var2);// 14
} }// 15
} }
} }
class 'pkg/TestInnerClassConstructor' { class 'pkg/TestInnerClassConstructor' {
method 'm ()V' { method 'm ()V' {
5 4 5 4
c 5
} }
method 'n (Ljava/lang/String;)V' { method 'n (Ljava/lang/String;)V' {
@ -26,16 +27,23 @@ class 'pkg/TestInnerClassConstructor' {
a 8 a 8
13 8 13 8
16 8 16 8
19 9
} }
} }
class 'pkg/TestInnerClassConstructor$Inner' { class 'pkg/TestInnerClassConstructor$Inner' {
method '<init> (Lpkg/TestInnerClassConstructor;Ljava/lang/String;)V' { method '<init> (Lpkg/TestInnerClassConstructor;Ljava/lang/String;)V' {
b 13 b 13
e 14
} }
} }
Lines mapping: Lines mapping:
5 <-> 5 5 <-> 5
6 <-> 6
9 <-> 9 9 <-> 9
10 <-> 10
14 <-> 14 14 <-> 14
15 <-> 15
Not mapped:
13

@ -5,13 +5,13 @@ public class TestInnerLocal {
public Inner(String var1) { public Inner(String var1) {
this.x = var1;// 22 this.x = var1;// 22
} }// 23
} }
new Inner("test");// 25 new Inner("test");// 25
new TestInnerLocal.Inner1Static("test");// 26 new TestInnerLocal.Inner1Static("test");// 26
new TestInnerLocal.Inner1Static.Inner2Static("test");// 27 new TestInnerLocal.Inner1Static.Inner2Static("test");// 27
} }// 28
public void testMethod() { public void testMethod() {
class Inner { class Inner {
@ -19,28 +19,28 @@ public class TestInnerLocal {
public Inner(String var2) { public Inner(String var2) {
this.x = var2;// 34 this.x = var2;// 34
} }// 35
} }
new Inner("test");// 37 new Inner("test");// 37
new TestInnerLocal.Inner1Static("test");// 38 new TestInnerLocal.Inner1Static("test");// 38
new TestInnerLocal.Inner1("test");// 39 new TestInnerLocal.Inner1("test");// 39
new TestInnerLocal.Inner1Static.Inner2Static("test");// 40 new TestInnerLocal.Inner1Static.Inner2Static("test");// 40
} }// 41
static class Inner1Static { static class Inner1Static {
final String x; final String x;
public Inner1Static(String var1) { public Inner1Static(String var1) {
this.x = var1;// 53 this.x = var1;// 53
} }// 54
public static class Inner2Static { public static class Inner2Static {
final String x; final String x;
public Inner2Static(String var1) { public Inner2Static(String var1) {
this.x = var1;// 59 this.x = var1;// 59
} }// 60
} }
} }
@ -49,13 +49,14 @@ public class TestInnerLocal {
public Inner1(String var2) { public Inner1(String var2) {
this.x = var2;// 46 this.x = var2;// 46
} }// 47
} }
} }
class 'TestInnerLocal$1Inner' { class 'TestInnerLocal$1Inner' {
method '<init> (Ljava/lang/String;)V' { method '<init> (Ljava/lang/String;)V' {
6 6 6 6
9 7
} }
} }
@ -64,6 +65,7 @@ class 'TestInnerLocal' {
4 10 4 10
e 11 e 11
18 12 18 12
1e 13
} }
method 'testMethod ()V' { method 'testMethod ()V' {
@ -71,43 +73,61 @@ class 'TestInnerLocal' {
f 25 f 25
1a 26 1a 26
24 27 24 27
2a 28
} }
} }
class 'TestInnerLocal$2Inner' { class 'TestInnerLocal$2Inner' {
method '<init> (LTestInnerLocal;Ljava/lang/String;)V' { method '<init> (LTestInnerLocal;Ljava/lang/String;)V' {
b 20 b 20
e 21
} }
} }
class 'TestInnerLocal$Inner1Static' { class 'TestInnerLocal$Inner1Static' {
method '<init> (Ljava/lang/String;)V' { method '<init> (Ljava/lang/String;)V' {
6 34 6 34
9 35
} }
} }
class 'TestInnerLocal$Inner1Static$Inner2Static' { class 'TestInnerLocal$Inner1Static$Inner2Static' {
method '<init> (Ljava/lang/String;)V' { method '<init> (Ljava/lang/String;)V' {
6 41 6 41
9 42
} }
} }
class 'TestInnerLocal$Inner1' { class 'TestInnerLocal$Inner1' {
method '<init> (LTestInnerLocal;Ljava/lang/String;)V' { method '<init> (LTestInnerLocal;Ljava/lang/String;)V' {
b 50 b 50
e 51
} }
} }
Lines mapping: Lines mapping:
22 <-> 7 22 <-> 7
23 <-> 8
25 <-> 11 25 <-> 11
26 <-> 12 26 <-> 12
27 <-> 13 27 <-> 13
28 <-> 14
34 <-> 21 34 <-> 21
35 <-> 22
37 <-> 25 37 <-> 25
38 <-> 26 38 <-> 26
39 <-> 27 39 <-> 27
40 <-> 28 40 <-> 28
41 <-> 29
46 <-> 51 46 <-> 51
47 <-> 52
53 <-> 35 53 <-> 35
54 <-> 36
59 <-> 42 59 <-> 42
60 <-> 43
Not mapped:
21
33
45
52
58

@ -7,13 +7,13 @@ public class TestInnerLocalPkg {
public Inner(String var1) { public Inner(String var1) {
this.x = var1;// 24 this.x = var1;// 24
} }// 25
} }
new Inner("test");// 27 new Inner("test");// 27
new TestInnerLocalPkg.Inner1Static("test");// 28 new TestInnerLocalPkg.Inner1Static("test");// 28
new TestInnerLocalPkg.Inner1Static.Inner2Static("test");// 29 new TestInnerLocalPkg.Inner1Static.Inner2Static("test");// 29
} }// 30
public void testMethod() { public void testMethod() {
class Inner { class Inner {
@ -21,28 +21,28 @@ public class TestInnerLocalPkg {
public Inner(String var2) { public Inner(String var2) {
this.x = var2;// 36 this.x = var2;// 36
} }// 37
} }
new Inner("test");// 39 new Inner("test");// 39
new TestInnerLocalPkg.Inner1Static("test");// 40 new TestInnerLocalPkg.Inner1Static("test");// 40
new TestInnerLocalPkg.Inner1("test");// 41 new TestInnerLocalPkg.Inner1("test");// 41
new TestInnerLocalPkg.Inner1Static.Inner2Static("test");// 42 new TestInnerLocalPkg.Inner1Static.Inner2Static("test");// 42
} }// 43
static class Inner1Static { static class Inner1Static {
final String x; final String x;
public Inner1Static(String var1) { public Inner1Static(String var1) {
this.x = var1;// 55 this.x = var1;// 55
} }// 56
public static class Inner2Static { public static class Inner2Static {
final String x; final String x;
public Inner2Static(String var1) { public Inner2Static(String var1) {
this.x = var1;// 61 this.x = var1;// 61
} }// 62
} }
} }
@ -51,13 +51,14 @@ public class TestInnerLocalPkg {
public Inner1(String var2) { public Inner1(String var2) {
this.x = var2;// 48 this.x = var2;// 48
} }// 49
} }
} }
class 'pkg/TestInnerLocalPkg$1Inner' { class 'pkg/TestInnerLocalPkg$1Inner' {
method '<init> (Ljava/lang/String;)V' { method '<init> (Ljava/lang/String;)V' {
6 8 6 8
9 9
} }
} }
@ -66,6 +67,7 @@ class 'pkg/TestInnerLocalPkg' {
4 12 4 12
e 13 e 13
18 14 18 14
1e 15
} }
method 'testMethod ()V' { method 'testMethod ()V' {
@ -73,43 +75,61 @@ class 'pkg/TestInnerLocalPkg' {
f 27 f 27
1a 28 1a 28
24 29 24 29
2a 30
} }
} }
class 'pkg/TestInnerLocalPkg$2Inner' { class 'pkg/TestInnerLocalPkg$2Inner' {
method '<init> (Lpkg/TestInnerLocalPkg;Ljava/lang/String;)V' { method '<init> (Lpkg/TestInnerLocalPkg;Ljava/lang/String;)V' {
b 22 b 22
e 23
} }
} }
class 'pkg/TestInnerLocalPkg$Inner1Static' { class 'pkg/TestInnerLocalPkg$Inner1Static' {
method '<init> (Ljava/lang/String;)V' { method '<init> (Ljava/lang/String;)V' {
6 36 6 36
9 37
} }
} }
class 'pkg/TestInnerLocalPkg$Inner1Static$Inner2Static' { class 'pkg/TestInnerLocalPkg$Inner1Static$Inner2Static' {
method '<init> (Ljava/lang/String;)V' { method '<init> (Ljava/lang/String;)V' {
6 43 6 43
9 44
} }
} }
class 'pkg/TestInnerLocalPkg$Inner1' { class 'pkg/TestInnerLocalPkg$Inner1' {
method '<init> (Lpkg/TestInnerLocalPkg;Ljava/lang/String;)V' { method '<init> (Lpkg/TestInnerLocalPkg;Ljava/lang/String;)V' {
b 52 b 52
e 53
} }
} }
Lines mapping: Lines mapping:
24 <-> 9 24 <-> 9
25 <-> 10
27 <-> 13 27 <-> 13
28 <-> 14 28 <-> 14
29 <-> 15 29 <-> 15
30 <-> 16
36 <-> 23 36 <-> 23
37 <-> 24
39 <-> 27 39 <-> 27
40 <-> 28 40 <-> 28
41 <-> 29 41 <-> 29
42 <-> 30 42 <-> 30
43 <-> 31
48 <-> 53 48 <-> 53
49 <-> 54
55 <-> 37 55 <-> 37
56 <-> 38
61 <-> 44 61 <-> 44
62 <-> 45
Not mapped:
23
35
47
54
60

@ -7,7 +7,7 @@ public class TestInnerSignature<A, B, C> {
this.a = var1;// 23 this.a = var1;// 23
this.b = var2;// 24 this.b = var2;// 24
this.c = var3;// 25 this.c = var3;// 25
} }// 26
public static class InnerStatic<A, B, C> { public static class InnerStatic<A, B, C> {
A a; A a;
@ -18,7 +18,7 @@ public class TestInnerSignature<A, B, C> {
this.a = var1;// 46 this.a = var1;// 46
this.b = var2;// 47 this.b = var2;// 47
this.c = var3;// 48 this.c = var3;// 48
} }// 49
} }
public class Inner { public class Inner {
@ -30,7 +30,7 @@ public class TestInnerSignature<A, B, C> {
this.a = var2;// 34 this.a = var2;// 34
this.b = var3;// 35 this.b = var3;// 35
this.c = var4;// 36 this.c = var4;// 36
} }// 37
} }
} }
@ -39,6 +39,7 @@ class 'TestInnerSignature' {
6 6 6 6
b 7 b 7
10 8 10 8
13 9
} }
} }
@ -47,6 +48,7 @@ class 'TestInnerSignature$InnerStatic' {
6 17 6 17
b 18 b 18
10 19 10 19
13 20
} }
} }
@ -55,6 +57,7 @@ class 'TestInnerSignature$Inner' {
b 29 b 29
10 30 10 30
16 31 16 31
19 32
} }
} }
@ -62,9 +65,16 @@ Lines mapping:
23 <-> 7 23 <-> 7
24 <-> 8 24 <-> 8
25 <-> 9 25 <-> 9
26 <-> 10
34 <-> 30 34 <-> 30
35 <-> 31 35 <-> 31
36 <-> 32 36 <-> 32
37 <-> 33
46 <-> 18 46 <-> 18
47 <-> 19 47 <-> 19
48 <-> 20 48 <-> 20
49 <-> 21
Not mapped:
22
33
45

@ -7,20 +7,20 @@ public abstract class TestLocalClass {
void foo() { void foo() {
boolean var1 = true;// 11 boolean var1 = true;// 11
boolean var2 = true;// 12 boolean var2 = true;// 12
} }// 13
} }
Local var2 = new Local();// 15 Local var2 = new Local();// 15
var2.foo();// 16 var2.foo();// 16
} }// 17
void boo() { void boo() {
boolean var1 = true;// 20 boolean var1 = true;// 20
} }// 21
void zoo() { void zoo() {
boolean var1 = true;// 24 boolean var1 = true;// 24
} }// 25
} }
class 'pkg/TestLocalClass$1Local' { class 'pkg/TestLocalClass$1Local' {
@ -29,6 +29,7 @@ class 'pkg/TestLocalClass$1Local' {
1 7 1 7
2 8 2 8
3 8 3 8
4 9
} }
} }
@ -38,16 +39,19 @@ class 'pkg/TestLocalClass' {
1 4 1 4
a 12 a 12
c 13 c 13
f 14
} }
method 'boo ()V' { method 'boo ()V' {
0 17 0 17
1 17 1 17
2 18
} }
method 'zoo ()V' { method 'zoo ()V' {
0 21 0 21
1 21 1 21
2 22
} }
} }
@ -55,7 +59,11 @@ Lines mapping:
8 <-> 5 8 <-> 5
11 <-> 8 11 <-> 8
12 <-> 9 12 <-> 9
13 <-> 10
15 <-> 13 15 <-> 13
16 <-> 14 16 <-> 14
17 <-> 15
20 <-> 18 20 <-> 18
21 <-> 19
24 <-> 22 24 <-> 22
25 <-> 23

@ -2,42 +2,106 @@ package pkg;
public class TestMethodParameters { public class TestMethodParameters {
TestMethodParameters(@Deprecated int var1) { TestMethodParameters(@Deprecated int var1) {
} }// 19
void m1(@Deprecated int var1) { void m1(@Deprecated int var1) {
} }// 20
static void m2(@Deprecated int var0) { static void m2(@Deprecated int var0) {
} }// 21
void local() { void local() {
class Local { class Local {
Local(@Deprecated int var2) { Local(@Deprecated int var2) {
} }// 36
void m(@Deprecated int var1) { void m(@Deprecated int var1) {
} }// 37
} }
} }// 39
static class C2 { static class C2 {
C2(@Deprecated int var1) { C2(@Deprecated int var1) {
} }// 29
void m1(@Deprecated int var1) { void m1(@Deprecated int var1) {
} }// 30
static void m2(@Deprecated int var0) { static void m2(@Deprecated int var0) {
} }// 31
} }
class C1 { class C1 {
C1(@Deprecated int var2) { C1(@Deprecated int var2) {
} }// 24
void m(@Deprecated int var1) { void m(@Deprecated int var1) {
}// 25
} }
}
class 'pkg/TestMethodParameters' {
method '<init> (I)V' {
4 4
}
method 'm1 (I)V' {
0 7
}
method 'm2 (I)V' {
0 10
}
method 'local ()V' {
0 21
}
}
class 'pkg/TestMethodParameters$1Local' {
method '<init> (Lpkg/TestMethodParameters;I)V' {
9 15
}
method 'm (I)V' {
0 18
}
}
class 'pkg/TestMethodParameters$C2' {
method '<init> (I)V' {
4 25
}
method 'm1 (I)V' {
0 28
}
method 'm2 (I)V' {
0 31
}
}
class 'pkg/TestMethodParameters$C1' {
method '<init> (Lpkg/TestMethodParameters;I)V' {
9 36
}
method 'm (I)V' {
0 39
} }
} }
Lines mapping:
19 <-> 5
20 <-> 8
21 <-> 11
24 <-> 37
25 <-> 40
29 <-> 26
30 <-> 29
31 <-> 32
36 <-> 16
37 <-> 19
39 <-> 22

@ -9,7 +9,7 @@ public class TestSynchronizedMapping {
public void test2(String var1) { public void test2(String var1) {
System.out.println(var1);// 14 System.out.println(var1);// 14
} }// 15
} }
class 'pkg/TestSynchronizedMapping' { class 'pkg/TestSynchronizedMapping' {
@ -22,6 +22,7 @@ class 'pkg/TestSynchronizedMapping' {
method 'test2 (Ljava/lang/String;)V' { method 'test2 (Ljava/lang/String;)V' {
0 10 0 10
4 10 4 10
7 11
} }
} }
@ -29,3 +30,6 @@ Lines mapping:
8 <-> 5 8 <-> 5
9 <-> 6 9 <-> 6
14 <-> 11 14 <-> 11
15 <-> 12
Not mapped:
10

@ -10,16 +10,17 @@ public class TestThrowException {
this.r = new Runnable() {// 12 this.r = new Runnable() {// 12
public void run() { public void run() {
boolean var1 = true;// 15 boolean var1 = true;// 15
} }// 16
}; };
} }
} }// 18
} }
class 'pkg/TestThrowException$1' { class 'pkg/TestThrowException$1' {
method 'run ()V' { method 'run ()V' {
0 11 0 11
1 11 1 11
2 12
} }
} }
@ -29,6 +30,7 @@ class 'pkg/TestThrowException' {
c 7 c 7
11 7 11 7
1b 9 1b 9
1e 15
} }
} }
@ -37,3 +39,7 @@ Lines mapping:
10 <-> 8 10 <-> 8
12 <-> 10 12 <-> 10
15 <-> 12 15 <-> 12
16 <-> 13
18 <-> 16
Not mapped:
8

@ -14,7 +14,7 @@ public class TestTryCatchFinally {
System.out.println("finally");// 34 System.out.println("finally");// 34
} }
} }// 36
int foo(int var1) throws Exception { int foo(int var1) throws Exception {
if(var1 < 1) {// 39 if(var1 < 1) {// 39
@ -51,6 +51,7 @@ class 'pkg/TestTryCatchFinally' {
2b 13 2b 13
2d 13 2d 13
30 13 30 13
38 16
} }
method 'foo (I)I' { method 'foo (I)I' {
@ -80,6 +81,7 @@ Lines mapping:
24 <-> 6 24 <-> 6
27 <-> 9 27 <-> 9
34 <-> 14 34 <-> 14
36 <-> 17
39 <-> 20 39 <-> 20
40 <-> 21 40 <-> 21
41 <-> 22 41 <-> 22
@ -88,3 +90,11 @@ Lines mapping:
51 <-> 31 51 <-> 31
53 <-> 34 53 <-> 34
55 <-> 36 55 <-> 36
Not mapped:
25
28
32
35
52
56
57

Loading…
Cancel
Save