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 ae41102d..ee6ff65c 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 @@ -29,6 +29,8 @@ package org.jf.baksmali.Adaptors.EncodedValue; import org.jf.dexlib.EncodedValue.*; +import org.jf.dexlib.TypeIdItem; +import org.jf.dexlib.StringIdItem; public abstract class EncodedValueAdaptor { public static EncodedValueAdaptor make(EncodedValue encodedValue) { @@ -62,9 +64,9 @@ public abstract class EncodedValueAdaptor { case VALUE_SHORT: return new SimpleEncodedValueAdaptor(((ShortEncodedValueSubField)encodedValue.getValue()).getValue()); case VALUE_STRING: - return null; + return new StringEncodedValueAdaptor(((EncodedIndexedItemReference)encodedValue.getValue()).getValue()); case VALUE_TYPE: - return null; + return new TypeEncodedValueAdaptor(((EncodedIndexedItemReference)encodedValue.getValue()).getValue()); } return null; } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.java new file mode 100644 index 00000000..11c8f6d6 --- /dev/null +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.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.dexlib.StringIdItem; +import org.jf.dexlib.util.Utf8Utils; + +public class StringEncodedValueAdaptor extends EncodedValueAdaptor { + private StringIdItem stringIdItem; + + public StringEncodedValueAdaptor(StringIdItem stringIdItem) { + this.stringIdItem = stringIdItem; + } + + public String getFormat() { + return "StringEncodedValue"; + } + + public Object getValue() { + return Utf8Utils.escapeString(stringIdItem.getStringValue()); + } +} diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/TypeEncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/TypeEncodedValueAdaptor.java new file mode 100644 index 00000000..f16b243c --- /dev/null +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/TypeEncodedValueAdaptor.java @@ -0,0 +1,49 @@ +/* + * [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.dexlib.StringIdItem; +import org.jf.dexlib.TypeIdItem; +import org.jf.dexlib.util.Utf8Utils; + +public class TypeEncodedValueAdaptor extends EncodedValueAdaptor { + private TypeIdItem typeIdItem; + + public TypeEncodedValueAdaptor(TypeIdItem typeIdItem) { + this.typeIdItem = typeIdItem; + } + + public String getFormat() { + return "SimpleEncodedValue"; + } + + public Object getValue() { + return typeIdItem.getTypeDescriptor(); + } +} diff --git a/baksmali/src/main/resources/templates/baksmali.stg b/baksmali/src/main/resources/templates/baksmali.stg index 941577bb..dd6adee9 100644 --- a/baksmali/src/main/resources/templates/baksmali.stg +++ b/baksmali/src/main/resources/templates/baksmali.stg @@ -265,4 +265,9 @@ EncodedValue(EncodedValue) ::= SimpleEncodedValue(EncodedValue) ::= << +>> + +StringEncodedValue(EncodedValue) ::= +<< +"" >> \ 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 7b85d388..b8fe7d17 100644 --- a/baksmali/src/test/smali/baksmali_test_class.smali +++ b/baksmali/src/test/smali/baksmali_test_class.smali @@ -29,8 +29,10 @@ .field public static boolTrueStaticField:Z = true .field public static boolFalseStaticField:Z = false +.field public static typeStaticField:Ljava/lang/Class; = Lbaksmali/test/class; - +.field public static stringStaticField:Ljava/lang/String; = "test" +.field public static stringEscapedStaticField:Ljava/lang/String; = "test\ntest" .field public instanceField:Ljava/lang/String;