From 6d3497f72d3d5604ed67e0c895a6dc1ab600cbcc Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Mon, 16 Mar 2015 20:52:55 -0700 Subject: [PATCH] Add Member and Annotatable interfaces --- .../org/jf/dexlib2/iface/Annotatable.java | 49 +++++++++++++++ .../java/org/jf/dexlib2/iface/ClassDef.java | 4 +- .../main/java/org/jf/dexlib2/iface/Field.java | 12 ++-- .../java/org/jf/dexlib2/iface/Member.java | 63 +++++++++++++++++++ .../java/org/jf/dexlib2/iface/Method.java | 6 +- 5 files changed, 123 insertions(+), 11 deletions(-) create mode 100644 brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java create mode 100644 brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java new file mode 100644 index 00000000..f16c207b --- /dev/null +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java @@ -0,0 +1,49 @@ +/* + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 COPYRIGHT + * OWNER OR CONTRIBUTORS 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.dexlib2.iface; + +import javax.annotation.Nonnull; +import java.util.Set; + +/** + * This class represents an object that can have Annotations applied to it + */ +public interface Annotatable { + /** + * Gets a set of the annotations that are applied to this object. + * + * The annotations in the returned set are guaranteed to have unique types. + * + * @return A set of the annotations that are applied to this object + */ + @Nonnull Set getAnnotations(); +} diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java index 73ab8690..31d7fb99 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java @@ -43,7 +43,7 @@ import java.util.Set; * It also acts as a TypeReference to itself. Any equality/comparison is based on its identity as a TypeReference, * and shouldn't take into account anything other than the type of this class. */ -public interface ClassDef extends TypeReference { +public interface ClassDef extends TypeReference, Annotatable { /** * Gets the class type. * @@ -95,7 +95,7 @@ public interface ClassDef extends TypeReference { * * @return A set of the annotations that are applied to this class */ - @Nonnull Set getAnnotations(); + @Override @Nonnull Set getAnnotations(); /** * Gets the static fields that are defined by this class. diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java index 7b4aad38..0091929b 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java @@ -44,27 +44,27 @@ import java.util.Set; * It also acts as a FieldReference to itself. Any equality/comparison is based on its identity as a FieldReference, * and shouldn't take into account any non-FieldReference specifics of this field. */ -public interface Field extends FieldReference { +public interface Field extends FieldReference, Member { /** * Gets the type of the class that defines this field. * * @return The type of the class that defines this field */ - @Nonnull String getDefiningClass(); + @Override @Nonnull String getDefiningClass(); /** * Gets the name of this field. * * @return The name of this field */ - @Nonnull String getName(); + @Override @Nonnull String getName(); /** * Gets the type of this field. * * @return The type of this field */ - @Nonnull String getType(); + @Override @Nonnull String getType(); /** * Gets the access flags for this field. @@ -73,7 +73,7 @@ public interface Field extends FieldReference { * * @return The access flags for this field */ - int getAccessFlags(); + @Override int getAccessFlags(); /** * Gets the initial value for this field, if available. @@ -92,5 +92,5 @@ public interface Field extends FieldReference { * * @return A set of the annotations that are applied to this field */ - @Nonnull Set getAnnotations(); + @Override @Nonnull Set getAnnotations(); } diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java new file mode 100644 index 00000000..343c4032 --- /dev/null +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java @@ -0,0 +1,63 @@ +/* + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 COPYRIGHT + * OWNER OR CONTRIBUTORS 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.dexlib2.iface; + +import javax.annotation.Nonnull; + +/** + * This class represents a generic class member + */ +public interface Member extends Annotatable { + /** + * Gets the type of the class that defines this member. + * + * @return The type of the class that defines this member + */ + @Nonnull String getDefiningClass(); + + /** + * Gets the name of this member. + * + * @return The name of this field + */ + @Nonnull String getName(); + + /** + * Gets the access flags for this member. + * + * This will be a combination of the AccessFlags.* flags that are marked as compatible for use with this type + * of member. + * + * @return The access flags for this member + */ + int getAccessFlags(); +} diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java index c9080e0f..5d3796ff 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java @@ -44,7 +44,7 @@ import java.util.Set; * It also acts as a MethodReference to itself. Any equality/comparison is based on its identity as a MethodReference, * and shouldn't take into account any non-MethodReference specifics of this method. */ -public interface Method extends MethodReference { +public interface Method extends MethodReference, Member { /** * Gets the type of the class that defines this method. * @@ -86,7 +86,7 @@ public interface Method extends MethodReference { * * @return The access flags for this method */ - int getAccessFlags(); + @Override int getAccessFlags(); /** * Gets a set of the annotations that are applied to this method. @@ -95,7 +95,7 @@ public interface Method extends MethodReference { * * @return A set of the annotations that are applied to this method */ - @Nonnull Set getAnnotations(); + @Override @Nonnull Set getAnnotations(); /** * Gets a MethodImplementation object that defines the implementation of the method.