Initial import of ADIF API reverse-engineering toolkit
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
package com.google.firebase.crashlytics.internal.stacktrace;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class MiddleOutFallbackStrategy implements StackTraceTrimmingStrategy {
|
||||
private final int maximumStackSize;
|
||||
private final MiddleOutStrategy middleOutStrategy;
|
||||
private final StackTraceTrimmingStrategy[] trimmingStrategies;
|
||||
|
||||
public MiddleOutFallbackStrategy(int i, StackTraceTrimmingStrategy... stackTraceTrimmingStrategyArr) {
|
||||
this.maximumStackSize = i;
|
||||
this.trimmingStrategies = stackTraceTrimmingStrategyArr;
|
||||
this.middleOutStrategy = new MiddleOutStrategy(i);
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.stacktrace.StackTraceTrimmingStrategy
|
||||
public StackTraceElement[] getTrimmedStackTrace(StackTraceElement[] stackTraceElementArr) {
|
||||
if (stackTraceElementArr.length <= this.maximumStackSize) {
|
||||
return stackTraceElementArr;
|
||||
}
|
||||
StackTraceElement[] stackTraceElementArr2 = stackTraceElementArr;
|
||||
for (StackTraceTrimmingStrategy stackTraceTrimmingStrategy : this.trimmingStrategies) {
|
||||
if (stackTraceElementArr2.length <= this.maximumStackSize) {
|
||||
break;
|
||||
}
|
||||
stackTraceElementArr2 = stackTraceTrimmingStrategy.getTrimmedStackTrace(stackTraceElementArr);
|
||||
}
|
||||
return stackTraceElementArr2.length > this.maximumStackSize ? this.middleOutStrategy.getTrimmedStackTrace(stackTraceElementArr2) : stackTraceElementArr2;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.google.firebase.crashlytics.internal.stacktrace;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class MiddleOutStrategy implements StackTraceTrimmingStrategy {
|
||||
private final int trimmedSize;
|
||||
|
||||
public MiddleOutStrategy(int i) {
|
||||
this.trimmedSize = i;
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.stacktrace.StackTraceTrimmingStrategy
|
||||
public StackTraceElement[] getTrimmedStackTrace(StackTraceElement[] stackTraceElementArr) {
|
||||
int length = stackTraceElementArr.length;
|
||||
int i = this.trimmedSize;
|
||||
if (length <= i) {
|
||||
return stackTraceElementArr;
|
||||
}
|
||||
int i4 = i / 2;
|
||||
int i5 = i - i4;
|
||||
StackTraceElement[] stackTraceElementArr2 = new StackTraceElement[i];
|
||||
System.arraycopy(stackTraceElementArr, 0, stackTraceElementArr2, 0, i5);
|
||||
System.arraycopy(stackTraceElementArr, stackTraceElementArr.length - i4, stackTraceElementArr2, i5, i4);
|
||||
return stackTraceElementArr2;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.google.firebase.crashlytics.internal.stacktrace;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class RemoveRepeatsStrategy implements StackTraceTrimmingStrategy {
|
||||
private final int maxRepetitions;
|
||||
|
||||
public RemoveRepeatsStrategy() {
|
||||
this(1);
|
||||
}
|
||||
|
||||
private static boolean isRepeatingSequence(StackTraceElement[] stackTraceElementArr, int i, int i4) {
|
||||
int i5 = i4 - i;
|
||||
if (i4 + i5 > stackTraceElementArr.length) {
|
||||
return false;
|
||||
}
|
||||
for (int i6 = 0; i6 < i5; i6++) {
|
||||
if (!stackTraceElementArr[i + i6].equals(stackTraceElementArr[i4 + i6])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static StackTraceElement[] trimRepeats(StackTraceElement[] stackTraceElementArr, int i) {
|
||||
int i4;
|
||||
HashMap hashMap = new HashMap();
|
||||
StackTraceElement[] stackTraceElementArr2 = new StackTraceElement[stackTraceElementArr.length];
|
||||
int i5 = 0;
|
||||
int i6 = 0;
|
||||
int i7 = 1;
|
||||
while (i5 < stackTraceElementArr.length) {
|
||||
StackTraceElement stackTraceElement = stackTraceElementArr[i5];
|
||||
Integer num = (Integer) hashMap.get(stackTraceElement);
|
||||
if (num == null || !isRepeatingSequence(stackTraceElementArr, num.intValue(), i5)) {
|
||||
stackTraceElementArr2[i6] = stackTraceElementArr[i5];
|
||||
i6++;
|
||||
i7 = 1;
|
||||
i4 = i5;
|
||||
} else {
|
||||
int intValue = i5 - num.intValue();
|
||||
if (i7 < i) {
|
||||
System.arraycopy(stackTraceElementArr, i5, stackTraceElementArr2, i6, intValue);
|
||||
i6 += intValue;
|
||||
i7++;
|
||||
}
|
||||
i4 = (intValue - 1) + i5;
|
||||
}
|
||||
hashMap.put(stackTraceElement, Integer.valueOf(i5));
|
||||
i5 = i4 + 1;
|
||||
}
|
||||
StackTraceElement[] stackTraceElementArr3 = new StackTraceElement[i6];
|
||||
System.arraycopy(stackTraceElementArr2, 0, stackTraceElementArr3, 0, i6);
|
||||
return stackTraceElementArr3;
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.stacktrace.StackTraceTrimmingStrategy
|
||||
public StackTraceElement[] getTrimmedStackTrace(StackTraceElement[] stackTraceElementArr) {
|
||||
StackTraceElement[] trimRepeats = trimRepeats(stackTraceElementArr, this.maxRepetitions);
|
||||
return trimRepeats.length < stackTraceElementArr.length ? trimRepeats : stackTraceElementArr;
|
||||
}
|
||||
|
||||
public RemoveRepeatsStrategy(int i) {
|
||||
this.maxRepetitions = i;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.google.firebase.crashlytics.internal.stacktrace;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public interface StackTraceTrimmingStrategy {
|
||||
StackTraceElement[] getTrimmedStackTrace(StackTraceElement[] stackTraceElementArr);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.google.firebase.crashlytics.internal.stacktrace;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class TrimmedThrowableData {
|
||||
public final TrimmedThrowableData cause;
|
||||
public final String className;
|
||||
public final String localizedMessage;
|
||||
public final StackTraceElement[] stacktrace;
|
||||
|
||||
private TrimmedThrowableData(String str, String str2, StackTraceElement[] stackTraceElementArr, TrimmedThrowableData trimmedThrowableData) {
|
||||
this.localizedMessage = str;
|
||||
this.className = str2;
|
||||
this.stacktrace = stackTraceElementArr;
|
||||
this.cause = trimmedThrowableData;
|
||||
}
|
||||
|
||||
public static TrimmedThrowableData makeTrimmedThrowableData(Throwable th, StackTraceTrimmingStrategy stackTraceTrimmingStrategy) {
|
||||
Stack stack = new Stack();
|
||||
while (th != null) {
|
||||
stack.push(th);
|
||||
th = th.getCause();
|
||||
}
|
||||
TrimmedThrowableData trimmedThrowableData = null;
|
||||
while (!stack.isEmpty()) {
|
||||
Throwable th2 = (Throwable) stack.pop();
|
||||
trimmedThrowableData = new TrimmedThrowableData(th2.getLocalizedMessage(), th2.getClass().getName(), stackTraceTrimmingStrategy.getTrimmedStackTrace(th2.getStackTrace()), trimmedThrowableData);
|
||||
}
|
||||
return trimmedThrowableData;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user