com.kamesuta.mc.signpic.asm.lib.VisitorHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.kamesuta.mc.signpic.asm.lib.VisitorHelper.java

Source

/*
 * This class is from the OpenModsLib.
 * https://github.com/OpenMods/OpenModsLib
 *
 * Code Copyright (c) 2013 Open Mods
 * Code released under the MIT license
 * https://github.com/OpenMods/OpenModsLib/blob/master/LICENSE
 */
package com.kamesuta.mc.signpic.asm.lib;

import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;

import com.google.common.base.Preconditions;

import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
import net.minecraft.launchwrapper.Launch;

public class VisitorHelper {

    public abstract static class TransformProvider {
        private final int flags;

        public TransformProvider(final int flags) {
            this.flags = flags;
        }

        public abstract ClassVisitor createVisitor(String name, ClassVisitor cv);
    }

    public static byte[] apply(final byte[] bytes, final String name, final TransformProvider context) {
        Preconditions.checkNotNull(bytes);
        final ClassReader cr = new ClassReader(bytes);
        final ClassWriter cw = new ClassWriter(cr, context.flags);
        final ClassVisitor mod = context.createVisitor(name, cw);

        try {
            cr.accept(mod, 0);
            return cw.toByteArray();
        } catch (final StopTransforming e) {
            return bytes;
        }
    }

    public static boolean useSrgNames() {
        final Boolean deobfuscated = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
        return deobfuscated == null || !deobfuscated;
    }

    public static String getMappedName(final String clsName) {
        return useSrgNames() ? FMLDeobfuscatingRemapper.INSTANCE.unmap(clsName) : clsName;
    }
}