summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Thiakil2018-07-12 07:35:04 +0800
committerGravatar Thiakil2018-07-20 12:15:38 +0800
commit268e8bd3a292162c215723638665e32415207c28 (patch)
treec6be44e7852e6274132eef6b4fb1fcda2b82287e /src/main
parentUpdate version number (diff)
downloadenigma-268e8bd3a292162c215723638665e32415207c28.tar.gz
enigma-268e8bd3a292162c215723638665e32415207c28.tar.xz
enigma-268e8bd3a292162c215723638665e32415207c28.zip
remove raw casts to Object
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/cuchaz/enigma/Deobfuscator.java4
-rw-r--r--src/main/java/oml/ast/transformers/RemoveObjectCasts.java39
2 files changed, 42 insertions, 1 deletions
diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java
index 6ea1c40b..5b210110 100644
--- a/src/main/java/cuchaz/enigma/Deobfuscator.java
+++ b/src/main/java/cuchaz/enigma/Deobfuscator.java
@@ -34,6 +34,7 @@ import cuchaz.enigma.mapping.entry.*;
34import cuchaz.enigma.throwables.IllegalNameException; 34import cuchaz.enigma.throwables.IllegalNameException;
35import cuchaz.enigma.utils.Utils; 35import cuchaz.enigma.utils.Utils;
36import oml.ast.transformers.ObfuscatedEnumSwitchRewriterTransform; 36import oml.ast.transformers.ObfuscatedEnumSwitchRewriterTransform;
37import oml.ast.transformers.RemoveObjectCasts;
37import org.objectweb.asm.ClassWriter; 38import org.objectweb.asm.ClassWriter;
38import org.objectweb.asm.Opcodes; 39import org.objectweb.asm.Opcodes;
39import org.objectweb.asm.tree.ClassNode; 40import org.objectweb.asm.tree.ClassNode;
@@ -661,7 +662,8 @@ public class Deobfuscator {
661 662
662 public static void runCustomTransforms(AstBuilder builder, DecompilerContext context){ 663 public static void runCustomTransforms(AstBuilder builder, DecompilerContext context){
663 List<IAstTransform> transformers = Arrays.asList( 664 List<IAstTransform> transformers = Arrays.asList(
664 new ObfuscatedEnumSwitchRewriterTransform(context) 665 new ObfuscatedEnumSwitchRewriterTransform(context),
666 new RemoveObjectCasts(context)
665 ); 667 );
666 for (IAstTransform transform : transformers){ 668 for (IAstTransform transform : transformers){
667 transform.run(builder.getCompilationUnit()); 669 transform.run(builder.getCompilationUnit());
diff --git a/src/main/java/oml/ast/transformers/RemoveObjectCasts.java b/src/main/java/oml/ast/transformers/RemoveObjectCasts.java
new file mode 100644
index 00000000..d7c3c4a6
--- /dev/null
+++ b/src/main/java/oml/ast/transformers/RemoveObjectCasts.java
@@ -0,0 +1,39 @@
1package oml.ast.transformers;
2
3import com.strobel.assembler.metadata.BuiltinTypes;
4import com.strobel.decompiler.DecompilerContext;
5import com.strobel.decompiler.languages.java.ast.AstNode;
6import com.strobel.decompiler.languages.java.ast.CastExpression;
7import com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor;
8import com.strobel.decompiler.languages.java.ast.transforms.IAstTransform;
9
10/**
11 * Created by Thiakil on 11/07/2018.
12 */
13public class RemoveObjectCasts implements IAstTransform {
14 private final DecompilerContext _context;
15
16 public RemoveObjectCasts(DecompilerContext context) {
17 _context = context;
18 }
19
20 @Override
21 public void run(AstNode compilationUnit) {
22 compilationUnit.acceptVisitor(new Visitor(_context), null);
23 }
24
25 private final static class Visitor extends ContextTrackingVisitor<Void>{
26
27 protected Visitor(DecompilerContext context) {
28 super(context);
29 }
30
31 @Override
32 public Void visitCastExpression(CastExpression node, Void data) {
33 if (node.getType().toTypeReference().equals(BuiltinTypes.Object)){
34 node.replaceWith(node.getExpression());
35 }
36 return super.visitCastExpression(node, data);
37 }
38 }
39}