feat: rewrite try-catch processing
This commit is contained in:
@@ -3,7 +3,7 @@ package jadx.api.plugins.input.data;
|
||||
public interface ICatch {
|
||||
String[] getTypes();
|
||||
|
||||
int[] getAddresses();
|
||||
int[] getHandlers();
|
||||
|
||||
int getCatchAllAddress();
|
||||
int getCatchAllHandler();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package jadx.api.plugins.input.data;
|
||||
public interface ITry {
|
||||
ICatch getCatch();
|
||||
|
||||
int getStartAddress();
|
||||
int getStartOffset();
|
||||
|
||||
int getEndAddress();
|
||||
int getEndOffset();
|
||||
}
|
||||
|
||||
+13
-12
@@ -1,21 +1,22 @@
|
||||
package jadx.api.plugins.input.data.impl;
|
||||
|
||||
import jadx.api.plugins.input.data.ICatch;
|
||||
import jadx.api.plugins.utils.Utils;
|
||||
|
||||
public class CatchData implements ICatch {
|
||||
private final int[] addr;
|
||||
private final int[] handlers;
|
||||
private final String[] types;
|
||||
private final int allAddr;
|
||||
private final int allHandler;
|
||||
|
||||
public CatchData(int[] addr, String[] types, int allAddr) {
|
||||
this.addr = addr;
|
||||
public CatchData(int[] handlers, String[] types, int allHandler) {
|
||||
this.handlers = handlers;
|
||||
this.types = types;
|
||||
this.allAddr = allAddr;
|
||||
this.allHandler = allHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getAddresses() {
|
||||
return addr;
|
||||
public int[] getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -24,8 +25,8 @@ public class CatchData implements ICatch {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCatchAllAddress() {
|
||||
return allAddr;
|
||||
public int getCatchAllHandler() {
|
||||
return allHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -33,10 +34,10 @@ public class CatchData implements ICatch {
|
||||
StringBuilder sb = new StringBuilder("Catch:");
|
||||
int size = types.length;
|
||||
for (int i = 0; i < size; i++) {
|
||||
sb.append(' ').append(types[i]).append("->").append(addr[i]);
|
||||
sb.append(' ').append(types[i]).append("->").append(Utils.formatOffset(handlers[i]));
|
||||
}
|
||||
if (allAddr != -1) {
|
||||
sb.append(" all->").append(allAddr);
|
||||
if (allHandler != -1) {
|
||||
sb.append(" all->").append(Utils.formatOffset(allHandler));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
+11
-10
@@ -2,16 +2,17 @@ package jadx.api.plugins.input.data.impl;
|
||||
|
||||
import jadx.api.plugins.input.data.ICatch;
|
||||
import jadx.api.plugins.input.data.ITry;
|
||||
import jadx.api.plugins.utils.Utils;
|
||||
|
||||
public class TryData implements ITry {
|
||||
|
||||
private final int startAddr;
|
||||
private final int endAddr;
|
||||
private final int startOffset;
|
||||
private final int endOffset;
|
||||
private final ICatch catchHandler;
|
||||
|
||||
public TryData(int startAddr, int endAddr, ICatch catchHandler) {
|
||||
this.startAddr = startAddr;
|
||||
this.endAddr = endAddr;
|
||||
public TryData(int startOffset, int endOffset, ICatch catchHandler) {
|
||||
this.startOffset = startOffset;
|
||||
this.endOffset = endOffset;
|
||||
this.catchHandler = catchHandler;
|
||||
}
|
||||
|
||||
@@ -21,17 +22,17 @@ public class TryData implements ITry {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartAddress() {
|
||||
return startAddr;
|
||||
public int getStartOffset() {
|
||||
return startOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEndAddress() {
|
||||
return endAddr;
|
||||
public int getEndOffset() {
|
||||
return endOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Try{" + startAddr + " - " + endAddr + ": " + catchHandler + '}';
|
||||
return "Try{" + Utils.formatOffset(startOffset) + " - " + Utils.formatOffset(endOffset) + ": " + catchHandler + '}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,26 @@
|
||||
package jadx.api.plugins.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class Utils {
|
||||
|
||||
public static <T> void addToList(List<T> list, @Nullable T item) {
|
||||
public static <T> void addToList(Collection<T> list, @Nullable T item) {
|
||||
if (item != null) {
|
||||
list.add(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static <T, I> void addToList(List<T> list, @Nullable I item, Function<I, T> map) {
|
||||
public static <T, I> void addToList(Collection<T> list, @Nullable I item, Function<I, T> map) {
|
||||
if (item != null) {
|
||||
T value = map.apply(item);
|
||||
if (value != null) {
|
||||
@@ -44,6 +47,24 @@ public class Utils {
|
||||
return list;
|
||||
}
|
||||
|
||||
public static <T> List<T> concatDistinct(List<T> a, List<T> b) {
|
||||
int aSize = a.size();
|
||||
int bSize = b.size();
|
||||
if (aSize == 0 && bSize == 0) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
if (aSize == 0) {
|
||||
return b;
|
||||
}
|
||||
if (bSize == 0) {
|
||||
return a;
|
||||
}
|
||||
Set<T> set = new LinkedHashSet<>(aSize + bSize);
|
||||
set.addAll(a);
|
||||
set.addAll(b);
|
||||
return new ArrayList<>(set);
|
||||
}
|
||||
|
||||
public static <T> String listToStr(List<T> list) {
|
||||
if (list == null) {
|
||||
return "null";
|
||||
|
||||
Reference in New Issue
Block a user