From 8c8cec655db8793f19a52abf62fe338dbe3fab7b Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Thu, 18 Jun 2009 03:48:44 +0000 Subject: [PATCH] Implemented enum encoded values git-svn-id: https://smali.googlecode.com/svn/trunk@164 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../EncodedValue/EncodedValueAdaptor.java | 3 +- .../EncodedValue/EnumEncodedValueAdaptor.java | 48 +++++++++++++++++++ .../src/main/resources/templates/baksmali.stg | 5 ++ .../src/test/smali/baksmali_test_class.smali | 2 + 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EnumEncodedValueAdaptor.java diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java index ab094a11..f7b9c872 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java @@ -51,7 +51,8 @@ public abstract class EncodedValueAdaptor { case VALUE_DOUBLE: return new SimpleEncodedValueAdaptor(((DoubleEncodedValueSubField)encodedValue.getValue()).getValue()); case VALUE_ENUM: - return null; + EncodedIndexedItemReference enumEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); + return new EnumEncodedValueAdaptor(new FieldReference((FieldIdItem)enumEncodedReference.getValue())); case VALUE_FIELD: EncodedIndexedItemReference fieldEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); return new EncodedIndexedItemAdaptor(new FieldReference((FieldIdItem)fieldEncodedReference.getValue())); diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EnumEncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EnumEncodedValueAdaptor.java new file mode 100644 index 00000000..0bc70f16 --- /dev/null +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EnumEncodedValueAdaptor.java @@ -0,0 +1,48 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2009 Ben Gruver + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.baksmali.Adaptors.EncodedValue; + +import org.jf.baksmali.Adaptors.Reference.FieldReference; + +public class EnumEncodedValueAdaptor extends EncodedValueAdaptor { + private FieldReference fieldReference; + + public EnumEncodedValueAdaptor(FieldReference fieldReference) { + this.fieldReference = fieldReference; + } + + + public String getFormat() { + return "EnumEncodedValue"; + } + + public Object getValue() { + return fieldReference; + } +} diff --git a/baksmali/src/main/resources/templates/baksmali.stg b/baksmali/src/main/resources/templates/baksmali.stg index 54617fd5..82578fa4 100644 --- a/baksmali/src/main/resources/templates/baksmali.stg +++ b/baksmali/src/main/resources/templates/baksmali.stg @@ -282,4 +282,9 @@ ArrayEncodedValue(EncodedValue) ::= {}; separator=","> } +>> + +EnumEncodedValue(EncodedValue) ::= +<< +.enum >> \ No newline at end of file diff --git a/baksmali/src/test/smali/baksmali_test_class.smali b/baksmali/src/test/smali/baksmali_test_class.smali index b8d34988..0778c66a 100644 --- a/baksmali/src/test/smali/baksmali_test_class.smali +++ b/baksmali/src/test/smali/baksmali_test_class.smali @@ -41,6 +41,8 @@ .field public static arrayStaticField:[I = {1, 2, 3, {1, 2, 3, 4}} +.field public static enumStaticField:Lsome/enum; = .enum Lsome/enum;->someEnumValue:Lsome/enum; + .field public instanceField:Ljava/lang/String;