From 858d264db97c7b1db20fdef77ea136a12cd6904d Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Fri, 9 Feb 2018 16:36:51 -0800 Subject: [PATCH] Change the name of the invoke method handle types Change the names to match the name used in the smali grammar --- .../java/org/jf/dexlib2/MethodHandleType.java | 41 ++++++++++++++----- .../DexBackedMethodHandleReference.java | 4 +- .../reference/MethodHandleReference.java | 2 +- .../ImmutableMethodHandleReference.java | 4 +- .../java/org/jf/dexlib2/writer/DexWriter.java | 4 +- .../builder/BuilderMethodHandlePool.java | 4 +- .../dexlib2/writer/pool/MethodHandlePool.java | 4 +- .../org/jf/dexlib2/writer/CallSiteTest.java | 4 +- 8 files changed, 44 insertions(+), 23 deletions(-) diff --git a/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java b/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java index beca8ee3..91bd7231 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/MethodHandleType.java @@ -31,37 +31,58 @@ package org.jf.dexlib2; +import com.google.common.collect.Maps; import org.jf.util.ExceptionWithContext; import javax.annotation.Nonnull; +import java.util.Map; 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 STATIC_INVOKE = 4; + public static final int INSTANCE_INVOKE = 5; + + private static final Map methodHandleTypeNames = Maps.newHashMap(); + + static { + methodHandleTypeNames.put("static-put", STATIC_PUT); + methodHandleTypeNames.put("static-get", STATIC_GET); + methodHandleTypeNames.put("instance-put", INSTANCE_PUT); + methodHandleTypeNames.put("instance-get", INSTANCE_GET); + methodHandleTypeNames.put("static-invoke", STATIC_INVOKE); + methodHandleTypeNames.put("instance-invoke", INSTANCE_INVOKE); + } @Nonnull public static String toString(int methodHandleType) { switch (methodHandleType) { case STATIC_PUT: - return "static_put"; + return "static-put"; case STATIC_GET: - return "static_get"; + return "static-get"; case INSTANCE_PUT: - return "instance_put"; + return "instance-put"; case INSTANCE_GET: - return "instance_get"; - case INVOKE_STATIC: - return "invoke_static"; - case INVOKE_INSTANCE: - return "invoke_instance"; + return "instance-get"; + case STATIC_INVOKE: + return "static-invoke"; + case INSTANCE_INVOKE: + return "instance-invoke"; default: throw new InvalidMethodHandleTypeException(methodHandleType); } } + public static int getMethodHandleType(String methodHandleType) { + Integer ret = methodHandleTypeNames.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; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java index 12a6f1ee..0e535e9a 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/reference/DexBackedMethodHandleReference.java @@ -66,8 +66,8 @@ public class DexBackedMethodHandleReference extends BaseMethodHandleReference { case MethodHandleType.STATIC_GET: case MethodHandleType.STATIC_PUT: return new DexBackedFieldReference(dexFile, memberIndex); - case MethodHandleType.INVOKE_INSTANCE: - case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INSTANCE_INVOKE: + case MethodHandleType.STATIC_INVOKE: return new DexBackedMethodReference(dexFile, memberIndex); default: throw new ExceptionWithContext("Invalid method handle type: %d", getMethodHandleType()); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java index c034ee3f..a7578f53 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/reference/MethodHandleReference.java @@ -48,7 +48,7 @@ public interface MethodHandleReference extends Reference, Comparable case MethodHandleType.STATIC_PUT: dexPool.fieldSection.intern((FieldReference) methodHandleReference.getMemberReference()); break; - case MethodHandleType.INVOKE_INSTANCE: - case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INSTANCE_INVOKE: + case MethodHandleType.STATIC_INVOKE: dexPool.methodSection.intern((MethodReference) methodHandleReference.getMemberReference()); break; default: diff --git a/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java b/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java index c909fb28..5769e0f4 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/writer/CallSiteTest.java @@ -74,7 +74,7 @@ public class CallSiteTest { new ImmutableMethodImplementation(10, ImmutableList.of( new ImmutableInstruction35c(Opcode.INVOKE_CUSTOM, 0, 0, 0, 0, 0, 0, new ImmutableCallSiteReference("call_site_1", - new ImmutableMethodHandleReference(MethodHandleType.INVOKE_STATIC, + new ImmutableMethodHandleReference(MethodHandleType.STATIC_INVOKE, new ImmutableMethodReference("Lcls1", "loader", ImmutableList.of("Ljava/lang/invoke/Lookup;", "Ljava/lang/String;", @@ -96,7 +96,7 @@ public class CallSiteTest { BuilderCallSiteReference callSite = dexBuilder.internCallSite(new ImmutableCallSiteReference("call_site_1", new ImmutableMethodHandleReference( - MethodHandleType.INVOKE_STATIC, + MethodHandleType.STATIC_INVOKE, new ImmutableMethodReference("Lcls1", "loader", ImmutableList.of("Ljava/lang/invoke/Lookup;", "Ljava/lang/String;", "Ljava/lang/invoke/MethodType;"),