diff options
author | Ben Gruver <bgruv@google.com> | 2018-02-09 16:36:51 -0800 |
---|---|---|
committer | Ben Gruver <bgruv@google.com> | 2018-05-23 13:34:16 -0700 |
commit | 858d264db97c7b1db20fdef77ea136a12cd6904d (patch) | |
tree | dda3ed4d3f6720e10b987cff38efbd02dad7862d | |
parent | 9ccda3a1bf35a61dff0b34ff3658f3cbbabfd907 (diff) | |
download | smali-858d264db97c7b1db20fdef77ea136a12cd6904d.tar.gz |
Change the name of the invoke method handle types
Change the names to match the name used in the smali grammar
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<String, Integer> 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<MethodHandl /** * Gets the member that is being referenced by this method handle. * - * For INVOKE_STATIC and INVOKE_INSTANCE method handle types, this should be a MethodReference. + * For STATIC_INVOKE and INSTANCE_INVOKE method handle types, this should be a MethodReference. * For the other method handle types, this should be a FieldReference. * * @return A MethodReference or FieldReference, depending on the method handle type diff --git a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java index 733dd541..cbabc5f6 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/immutable/reference/ImmutableMethodHandleReference.java @@ -71,8 +71,8 @@ public class ImmutableMethodHandleReference extends BaseMethodHandleReference im memberReference = ImmutableFieldReference.of( (FieldReference) methodHandleReference.getMemberReference()); break; - case MethodHandleType.INVOKE_INSTANCE: - case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INSTANCE_INVOKE: + case MethodHandleType.STATIC_INVOKE: memberReference = ImmutableMethodReference.of( (MethodReference) methodHandleReference.getMemberReference()); break; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java index 84f57f2d..ceebd66e 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/DexWriter.java @@ -588,8 +588,8 @@ public abstract class DexWriter< memberIndex = fieldSection.getItemIndex( methodHandleSection.getFieldReference(methodHandleReference)); break; - case MethodHandleType.INVOKE_INSTANCE: - case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INSTANCE_INVOKE: + case MethodHandleType.STATIC_INVOKE: memberIndex = methodSection.getItemIndex( methodHandleSection.getMethodReference(methodHandleReference)); break; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java index 17f6c01e..99e9511f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderMethodHandlePool.java @@ -68,8 +68,8 @@ public class BuilderMethodHandlePool extends BaseBuilderPool memberReference = dexBuilder.internFieldReference( (FieldReference) methodHandleReference.getMemberReference()); break; - case MethodHandleType.INVOKE_INSTANCE: - case MethodHandleType.INVOKE_STATIC: + case MethodHandleType.INSTANCE_INVOKE: + case MethodHandleType.STATIC_INVOKE: memberReference = dexBuilder.internMethodReference( (MethodReference) methodHandleReference.getMemberReference()); break; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java index 443ec29f..ce265861 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/pool/MethodHandlePool.java @@ -56,8 +56,8 @@ public class MethodHandlePool extends BaseIndexPool<MethodHandleReference> 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;"), |