Issue details
I found a new enum pattern currently unhandled in jadx:
Example 1:
package jadx.test;
public enum EnumAnonymous1 {
TEST {}
}
decompiles to:
package jadx.test;
/* JADX INFO: loaded from: classes.dex */
public enum EnumAnonymous1 {
TEST { // from class: jadx.test.EnumAnonymous1.1
};
/* synthetic */ EnumAnonymous1(AnonymousClass1 x2) {
this();
}
}
Example 2: Same with arguments and test w/o DX/D8
package jadx.test;
public enum EnumAnonymous2 {
TEST1("TEST1", 0) {
};
EnumAnonymous2(final String string, final int i) {}
}
without dx/d8 decompiles to:
package jadx.test;
/* JADX INFO: loaded from: jadx/test/EnumAnonymous2.class */
public enum EnumAnonymous2 {
TEST1("TEST1", 0) { // from class: jadx.test.EnumAnonymous2.1
};
/* synthetic */ EnumAnonymous2(String x2, int x3, AnonymousClass1 x4) {
this(x2, x3);
}
EnumAnonymous2(String string, int i) {
}
}
and with dx/d8 to:
package jadx.test;
/* JADX WARN: Enum visitor error
jadx.core.utils.exceptions.JadxRuntimeException: Init of enum field 'TEST1' uses external variables
at jadx.core.dex.visitors.EnumVisitor.createEnumFieldByConstructor(EnumVisitor.java:485)
at jadx.core.dex.visitors.EnumVisitor.processEnumFieldByField(EnumVisitor.java:399)
at jadx.core.dex.visitors.EnumVisitor.processEnumFieldByWrappedInsn(EnumVisitor.java:364)
at jadx.core.dex.visitors.EnumVisitor.extractEnumFieldsFromFilledArray(EnumVisitor.java:349)
at jadx.core.dex.visitors.EnumVisitor.extractEnumFieldsFromInsn(EnumVisitor.java:284)
at jadx.core.dex.visitors.EnumVisitor.convertToEnum(EnumVisitor.java:153)
at jadx.core.dex.visitors.EnumVisitor.visit(EnumVisitor.java:102)
*/
/* JADX WARN: Failed to restore enum class, 'enum' modifier and super class removed */
/* JADX INFO: loaded from: classes.dex */
public class EnumAnonymous2 {
private static final /* synthetic */ EnumAnonymous2[] $VALUES;
public static final EnumAnonymous2 TEST1;
/* synthetic */ EnumAnonymous2(String x0, int x1, String x2, int x3, AnonymousClass1 x4) {
this(x0, x1, x2, x3);
}
public static EnumAnonymous2 valueOf(String name) {
return (EnumAnonymous2) Enum.valueOf(EnumAnonymous2.class, name);
}
public static EnumAnonymous2[] values() {
return (EnumAnonymous2[]) $VALUES.clone();
}
static {
String str = "TEST1";
int i = 0;
TEST1 = new EnumAnonymous2(str, i, str, i) { // from class: jadx.test.EnumAnonymous2.1
};
$VALUES = new EnumAnonymous2[]{TEST1};
}
private EnumAnonymous2(String str, int i, String string, int i2) {
super(str, i);
}
}
Relevant log output or stacktrace
Provide sample and class/method full name
See issue details.
Jadx version
1.5.6, latest git
Issue details
I found a new enum pattern currently unhandled in jadx:
Example 1:
decompiles to:
Example 2: Same with arguments and test w/o DX/D8
without dx/d8 decompiles to:
and with dx/d8 to:
Relevant log output or stacktrace
Provide sample and class/method full name
See issue details.
Jadx version
1.5.6, latest git