Skip to content

Commit acb5711

Browse files
committed
sum transformer changes from its children
1 parent 535ca27 commit acb5711

File tree

6 files changed

+26
-32
lines changed

6 files changed

+26
-32
lines changed

CODE_OF_CONDUCT.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

deobfuscator-api/src/main/java/uwu/narumi/deobfuscator/api/context/Context.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.util.*;
44
import java.util.concurrent.ConcurrentHashMap;
55

6+
import org.apache.logging.log4j.LogManager;
7+
import org.apache.logging.log4j.Logger;
68
import org.jetbrains.annotations.Nullable;
79
import org.jetbrains.annotations.UnmodifiableView;
810
import org.objectweb.asm.ClassReader;
@@ -16,6 +18,8 @@
1618

1719
public class Context implements ClassProvider {
1820

21+
private static final Logger LOGGER = LogManager.getLogger();
22+
1923
private final Map<String, ClassWrapper> classesMap = new ConcurrentHashMap<>();
2024
private final Map<String, byte[]> filesMap = new ConcurrentHashMap<>();
2125

@@ -93,7 +97,7 @@ public void addCompiledClass(String pathInJar, byte[] bytes) {
9397

9498
this.compiledClasses.addRawClass(bytes);
9599
} catch (InvalidClassException e) {
96-
throw new RuntimeException(e);
100+
LOGGER.error("Failed to load class {}", pathInJar);
97101
}
98102
}
99103

deobfuscator-api/src/main/java/uwu/narumi/deobfuscator/api/transformer/ComposedTransformer.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@ public ComposedTransformer(boolean rerunOnChange, Supplier<Transformer>... trans
2323
@Override
2424
protected void transform() {
2525
transformers.forEach(transformerSupplier -> {
26-
boolean changed = Transformer.transform(transformerSupplier, scope(), context());
27-
if (changed) {
28-
this.markChange();
29-
}
26+
int changesCount = Transformer.transform(transformerSupplier, scope(), context());
27+
this.changes.addAndGet(changesCount);
3028
});
3129
}
3230
}

deobfuscator-api/src/main/java/uwu/narumi/deobfuscator/api/transformer/Transformer.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public abstract class Transformer extends AsmHelper implements Opcodes {
2828

2929
// Internal variables
3030
private boolean hasRan = false;
31-
private final AtomicInteger changes = new AtomicInteger(0);
31+
public final AtomicInteger changes = new AtomicInteger(0);
3232

3333
// Config
3434
protected boolean rerunOnChange = false;
@@ -106,13 +106,13 @@ private void init(Context context, ClassWrapper scope) {
106106
* You can't reuse the existing instance.
107107
* @param scope You can choose the class transform or set it to null to transform all classes
108108
* @param context The context
109-
* @return If the transformation changed something
109+
* @return Changes count
110110
*/
111-
public static boolean transform(Supplier<@Nullable Transformer> transformerSupplier, @Nullable ClassWrapper scope, Context context) {
111+
public static int transform(Supplier<@Nullable Transformer> transformerSupplier, @Nullable ClassWrapper scope, Context context) {
112112
return transform(transformerSupplier, scope, context, false);
113113
}
114114

115-
private static boolean transform(
115+
private static int transform(
116116
Supplier<@Nullable Transformer> transformerSupplier,
117117
@Nullable ClassWrapper scope,
118118
Context context,
@@ -121,7 +121,7 @@ private static boolean transform(
121121
Transformer transformer = transformerSupplier.get();
122122
if (transformer == null) {
123123
// Null means that transformer is disabled. Skip it
124-
return false;
124+
return 0;
125125
}
126126

127127
if (transformer.hasRan) {
@@ -140,30 +140,30 @@ private static boolean transform(
140140
transformer.transform();
141141
} catch (TransformerException e) {
142142
LOGGER.error("! {}: {}", transformer.name(), e.getMessage());
143-
return false;
143+
return 0;
144144
} catch (Exception e) {
145145
LOGGER.error("Error occurred when transforming {}", transformer.name(), e);
146146
if (!context.getOptions().continueOnError()) {
147147
throw new RuntimeException(e);
148148
}
149-
return false;
149+
return 0;
150150
} finally {
151151
// Mark transformer that it was already used
152152
transformer.hasRan = true;
153153
}
154154

155-
boolean changed = transformer.isChanged();
155+
int changesCount = transformer.getChangesCount();
156156

157-
LOGGER.info("Made {} changes", transformer.getChangesCount());
157+
LOGGER.info("Made {} changes", changesCount);
158158
LOGGER.info("Ended {} transformer in {} ms", transformer.name(), (System.currentTimeMillis() - start));
159159

160-
if (changed && transformer.shouldRerunOnChange()) {
160+
if (transformer.isChanged() && transformer.shouldRerunOnChange()) {
161161
LOGGER.info("\uD83D\uDD04 Changes detected. Rerunning {} transformer", transformer.name());
162-
Transformer.transform(transformerSupplier, scope, context, true);
162+
changesCount += Transformer.transform(transformerSupplier, scope, context, true);
163163
}
164164

165165
// Bytecode verification
166-
if (context.getOptions().verifyBytecode() && !reran && changed) {
166+
if (context.getOptions().verifyBytecode() && !reran && transformer.isChanged()) {
167167
// Verify if bytecode is valid
168168
try {
169169
verifyBytecode(scope, context);
@@ -172,7 +172,7 @@ private static boolean transform(
172172
}
173173
}
174174

175-
return changed;
175+
return changesCount;
176176
}
177177

178178
/**

deobfuscator-api/src/main/java/uwu/narumi/deobfuscator/api/transformer/VersionedComposedTransformer.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ public VersionedComposedTransformer(String version) {
1212
this.version = version;
1313
}
1414

15-
private boolean changed = false;
16-
1715
@Override
1816
protected void transform() {
1917
Map<String, List<Supplier<Transformer>>> transformers = transformersByVersions();
@@ -23,11 +21,7 @@ protected void transform() {
2321

2422
transformers
2523
.get(version)
26-
.forEach(transformer -> changed |= Transformer.transform(transformer, scope(), context()));
27-
28-
if (changed) {
29-
markChange();
30-
}
24+
.forEach(transformer -> this.changes.addAndGet(Transformer.transform(transformer, scope(), context())));
3125
}
3226

3327
public abstract Map<String, List<Supplier<Transformer>>> transformersByVersions();

deobfuscator-transformers/src/main/java/uwu/narumi/deobfuscator/core/other/impl/universal/AccessRepairTransformer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ protected void transform() throws Exception {
111111
});
112112

113113
classWrapper.fields().forEach(fieldNode -> {
114+
// Remove ACC_ENUM from fields from classes that are not enums
115+
if (!isAccess(classWrapper.classNode().access, ACC_ENUM)) {
116+
fieldNode.access &= ~ACC_ENUM;
117+
}
118+
114119
for (int access : FIELD) {
115120
if (isAccess(fieldNode.access, access)) {
116121
fieldNode.access &= ~access;

0 commit comments

Comments
 (0)