package org.jf.dexlib2;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
import org.jf.util.ExceptionWithContext;
import javax.annotation.Nonnull;
public class MethodHandleType {
public static final int STATIC_PUT = 0;
public static final int STATIC_GET = 1;
public static final int INSTANCE_PUT = 2;
public static final int INSTANCE_GET = 3;
public static final int INVOKE_STATIC = 4;
public static final int INVOKE_INSTANCE = 5;
public static final int INVOKE_CONSTRUCTOR = 6;
public static final int INVOKE_DIRECT = 7;
public static final int INVOKE_INTERFACE = 8;
private static final BiMap<Integer, String> methodHandleTypeNames = new ImmutableBiMap.Builder<Integer, String>()
.put(STATIC_PUT, "static-put")
.put(STATIC_GET, "static-get")
.put(INSTANCE_PUT, "instance-put")
.put(INSTANCE_GET, "instance-get")
.put(INVOKE_STATIC, "invoke-static")
.put(INVOKE_INSTANCE, "invoke-instance")
.put(INVOKE_CONSTRUCTOR, "invoke-constructor")
.put(INVOKE_DIRECT, "invoke-direct")
.put(INVOKE_INTERFACE, "invoke-interface")
.build();
@Nonnull public static String toString(int methodHandleType) {
String val = methodHandleTypeNames.get(methodHandleType);
if (val == null) {
throw new InvalidMethodHandleTypeException(methodHandleType);
}
return val;
}
public static int getMethodHandleType(String methodHandleType) {
Integer ret = methodHandleTypeNames.inverse().get(methodHandleType);
if (ret == null) {
throw new ExceptionWithContext("Invalid method handle type: %s", methodHandleType);
}
return ret;
}
public static class InvalidMethodHandleTypeException extends ExceptionWithContext {
private final int methodHandleType;
public InvalidMethodHandleTypeException(int methodHandleType) {
super("Invalid method handle type: %d", methodHandleType);
this.methodHandleType = methodHandleType;
}
public InvalidMethodHandleTypeException(int methodHandleType, String message, Object... formatArgs) {
super(message, formatArgs);
this.methodHandleType = methodHandleType;
}
public int getMethodHandleType() {
return methodHandleType;
}
}
}