package rocks.inspectit.agent.java.instrumentation.asm;
import info.novatec.inspectit.org.objectweb.asm.Opcodes;
import java.lang.reflect.Modifier;
import rocks.inspectit.shared.all.instrumentation.classcache.Modifiers;
/**
* Our small utility class for ASM.
*
* @author Ivan Senic
*
*/
public final class AsmUtil {
/**
* Private constructor.
*/
private AsmUtil() {
}
/**
* Returns FQN of the class giving the ASM internal name.
*
* @param asmInternalName
* ASM internal name.
* @return FQN of the class giving the ASM internal name.
*/
public static String getFqn(String asmInternalName) {
return asmInternalName.replace('/', '.');
}
/**
* Returns ASM internal name of the class giving the class FQN.
*
* @param fqn
* Fully qualified name of the class.
* @return ASM internal name of the class giving the class FQN.
*/
public static String getAsmInternalName(String fqn) {
return fqn.replace('.', '/');
}
/**
* Returns {@link Modifiers} based modifiers for given access code. Returned modifier can be
* used directly in our types.
*
* @param access
* Asm access code
* @return Returns {@link Modifiers} based modifiers.
*/
public static int getModifiers(int access) {
int modifier = 0;
modifier |= ((access & Opcodes.ACC_PUBLIC) != 0) ? Modifier.PUBLIC : 0;
modifier |= ((access & Opcodes.ACC_PRIVATE) != 0) ? Modifier.PRIVATE : 0;
modifier |= ((access & Opcodes.ACC_PROTECTED) != 0) ? Modifier.PROTECTED : 0;
modifier |= ((access & Opcodes.ACC_STATIC) != 0) ? Modifier.STATIC : 0;
modifier |= ((access & Opcodes.ACC_FINAL) != 0) ? Modifier.FINAL : 0;
modifier |= ((access & Opcodes.ACC_SYNCHRONIZED) != 0) ? Modifier.SYNCHRONIZED : 0;
modifier |= ((access & Opcodes.ACC_VOLATILE) != 0) ? Modifier.VOLATILE : 0;
modifier |= ((access & Opcodes.ACC_TRANSIENT) != 0) ? Modifier.TRANSIENT : 0;
modifier |= ((access & Opcodes.ACC_NATIVE) != 0) ? Modifier.NATIVE : 0;
modifier |= ((access & Opcodes.ACC_ABSTRACT) != 0) ? Modifier.ABSTRACT : 0;
return Modifiers.getModifiers(modifier);
}
}