package pl.alpheratzteam.obfuscator.transformer;

import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.LineNumberNode;
import pl.alpheratzteam.obfuscator.Obfuscator;
import pl.alpheratzteam.obfuscator.util.RandomUtil;
import java.util.Arrays;
import java.util.Map;

/**
 * @author Unix
 * @since 14.04.20
 */

public class LineNumberTransformer extends Transformer
{
    public LineNumberTransformer(Obfuscator obfuscator) {
        super(obfuscator);
    }

    @Override
    public void visit(Map<String, ClassNode> classMap) {
        classMap.values().forEach(classNode -> classNode.methods.forEach(methodNode ->
                Arrays.stream(methodNode.instructions.toArray()).forEachOrdered(ain -> {
                    try {
                        final AbstractInsnNode current = ain.getNext();
                        if (current == null)
                            return;
                        if (!(current instanceof LineNumberNode))
                            return;

                        methodNode.instructions.iterator().set(new LineNumberNode(RandomUtil.nextInt(), ((LineNumberNode) current).start));
                    } catch (Exception ignored) {
                    }
                })));
    }
}