OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / cts / tools / dex-tools / src / dex / structure / DexAnnotation.java
diff --git a/cts/tools/dex-tools/src/dex/structure/DexAnnotation.java b/cts/tools/dex-tools/src/dex/structure/DexAnnotation.java
new file mode 100644 (file)
index 0000000..9cd372d
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dex.structure;
+
+import java.util.List;
+
+/**
+ * {@code DexAnnotation} represents an annotation.
+ */
+public interface DexAnnotation {
+
+    /**
+     * {@code Visibility} indicates the retention of a {@code DexAnnotation}.
+     */
+    enum Visibility {
+        /**
+         * Intended only to be visible at build time (e.g., during compilation
+         * of other code).
+         */
+        VISIBILITY_BUILD((byte) 0x00),
+        /**
+         * Intended to be visible at runtime. FIXME missing words in spec
+         */
+        VISIBILITY_RUNTIME((byte) 0X01),
+        /**
+         * Intended to be visible at runtime, but only to the underlying system
+         * (and not to regular user code). FIXME missing words in spec
+         */
+        VISIBILITY_SYSTEM((byte) 0x02);
+
+        @SuppressWarnings("unused")
+        private byte value;
+
+        private Visibility(byte value) {
+            this.value = value;
+        }
+
+        /**
+         * Returns the {@code Visibility} identified by the given {@code byte}.
+         * pre: 0 <= {@code value} <=2
+         * 
+         * @param value
+         *            the {@code byte} value which identifies a {@code
+         *            Visibility}
+         * @return the {@code Visibility} for the given {@code byte}
+         */
+        public static Visibility get(byte value) {
+            // FIXME loop and compare instead of switch?
+            switch (value) {
+            case 0x00:
+                return VISIBILITY_BUILD;
+            case 0x01:
+                return VISIBILITY_RUNTIME;
+            case 0x02:
+                return VISIBILITY_SYSTEM;
+            default:
+                throw new IllegalArgumentException("Visibility doesn't exist!");
+            }
+        }
+    }
+
+    /**
+     * Returns the {@code Visibility} of this {@code DexAnnotation}.
+     * 
+     * @return the {@code Visibility} of this {@code DexAnnotation}
+     */
+    Visibility getVisibility();
+
+    /**
+     * Returns the attributes of this {@code DexAnnotation}.
+     * 
+     * @return the attributes of this {@code DexAnnotation}
+     */
+    List<DexAnnotationAttribute> getAttributes();
+
+    /**
+     * Returns the class name of this {@code DexAnnotation}.
+     * 
+     * @return the class name of this {@code DexAnnotation}
+     */
+    String getTypeName();
+}