aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2015-03-16 20:52:55 -0700
committerBen Gruver <bgruv@google.com>2015-03-16 20:52:55 -0700
commit0c982a02f110d56c2cabe86bf267f89ca2e0451f (patch)
tree9bccc82c40b1b9a47ac3c67cc6832a8cbef0a8fa
parentbf167c2f0ed5b9ebde990819554b33373449e39b (diff)
downloadsmali-0c982a02f110d56c2cabe86bf267f89ca2e0451f.tar.gz
Add Member and Annotatable interfaces
-rw-r--r--dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java49
-rw-r--r--dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java4
-rw-r--r--dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java12
-rw-r--r--dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java63
-rw-r--r--dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java6
5 files changed, 123 insertions, 11 deletions
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/Annotatable.java
new file mode 100644
index 00000000..f16c207b
--- /dev/null
+++ b/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<? extends Annotation> getAnnotations();
+}
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java
index 73ab8690..31d7fb99 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/iface/ClassDef.java
+++ b/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<? extends Annotation> getAnnotations();
+ @Override @Nonnull Set<? extends Annotation> getAnnotations();
/**
* Gets the static fields that are defined by this class.
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java
index 7b4aad38..0091929b 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/iface/Field.java
+++ b/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<? extends Annotation> getAnnotations();
+ @Override @Nonnull Set<? extends Annotation> getAnnotations();
}
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/Member.java
new file mode 100644
index 00000000..343c4032
--- /dev/null
+++ b/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/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java
index c9080e0f..5d3796ff 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/iface/Method.java
+++ b/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<? extends Annotation> getAnnotations();
+ @Override @Nonnull Set<? extends Annotation> getAnnotations();
/**
* Gets a MethodImplementation object that defines the implementation of the method.