1use crate::dex::raw::{DUByte, DUInt, DUShort};
2use crate::smali::SmaliTokensBuilder;
3use java_asm_macro::const_container;
4
5pub struct MapListTypeConst;
6
7#[const_container(DUShort)]
8impl MapListTypeConst {
9 pub const TYPE_HEADER_ITEM: DUShort = 0x0000;
10 pub const TYPE_STRING_ID_ITEM: DUShort = 0x0001;
11 pub const TYPE_TYPE_ID_ITEM: DUShort = 0x0002;
12 pub const TYPE_PROTO_ID_ITEM: DUShort = 0x0003;
13 pub const TYPE_FIELD_ID_ITEM: DUShort = 0x0004;
14 pub const TYPE_METHOD_ID_ITEM: DUShort = 0x0005;
15 pub const TYPE_CLASS_DEF_ITEM: DUShort = 0x0006;
16 pub const TYPE_CALL_SITE_ID_ITEM: DUShort = 0x0007;
17 pub const TYPE_METHOD_HANDLE_ITEM: DUShort = 0x0008;
18 pub const TYPE_MAP_LIST: DUShort = 0x1000;
19 pub const TYPE_TYPE_LIST: DUShort = 0x1001;
20 pub const TYPE_ANNOTATION_SET_REF_LIST: DUShort = 0x1002;
21 pub const TYPE_ANNOTATION_SET_ITEM: DUShort = 0x1003;
22 pub const TYPE_CLASS_DATA_ITEM: DUShort = 0x2000;
23 pub const TYPE_CODE_ITEM: DUShort = 0x2001;
24 pub const TYPE_STRING_DATA_ITEM: DUShort = 0x2002;
25 pub const TYPE_DEBUG_INFO_ITEM: DUShort = 0x2003;
26 pub const TYPE_ANNOTATION_ITEM: DUShort = 0x2004;
27 pub const TYPE_ENCODED_ARRAY_ITEM: DUShort = 0x2005;
28 pub const TYPE_ANNOTATIONS_DIRECTORY_ITEM: DUShort = 0x2006;
29 pub const TYPE_HIDDENAPI_CLASS_DATA_ITEM: DUShort = 0xF000;
30}
31
32pub struct AccessFlags;
33pub struct ClassAccessFlags; pub struct MethodAccessFlags; pub struct FieldAccessFlags; #[const_container(DUInt)]
38impl AccessFlags {
39 pub const ACC_PUBLIC: DUInt = 0x0001;
40 pub const ACC_PRIVATE: DUInt = 0x0002;
41 pub const ACC_PROTECTED: DUInt = 0x0004;
42 pub const ACC_STATIC: DUInt = 0x0008;
43 pub const ACC_FINAL: DUInt = 0x0010;
44 pub const ACC_ABSTRACT: DUInt = 0x0400;
45 pub const UNUSED: DUInt = 0x8000;
46 pub const ACC_SYNTHETIC: DUInt = 0x1000;
47 pub const ACC_ENUM: DUInt = 0x4000;
48
49 pub fn render(access_flag: DUInt, mut tb: SmaliTokensBuilder) -> SmaliTokensBuilder {
50 if access_flag & Self::ACC_PUBLIC != 0 { tb = tb.raw("public"); }
51 if access_flag & Self::ACC_PRIVATE != 0 { tb = tb.raw("private"); }
52 if access_flag & Self::ACC_PROTECTED != 0 { tb = tb.raw("protected"); }
53 if access_flag & Self::ACC_STATIC != 0 { tb = tb.raw("static"); }
54 if access_flag & Self::ACC_FINAL != 0 { tb = tb.raw("final"); }
55 if access_flag & Self::ACC_ABSTRACT != 0 { tb = tb.raw("abstract"); }
56 if access_flag & Self::ACC_SYNTHETIC != 0 { tb = tb.raw("synthetic"); }
57 if access_flag & Self::ACC_ENUM != 0 { tb = tb.raw("enum"); }
58 tb
59 }
60}
61
62#[const_container(DUInt)]
63impl ClassAccessFlags {
64 pub const ACC_PUBLIC: DUInt = AccessFlags::ACC_PUBLIC;
65 pub const ACC_PRIVATE: DUInt = AccessFlags::ACC_PRIVATE;
66 pub const ACC_PROTECTED: DUInt = AccessFlags::ACC_PROTECTED;
67 pub const ACC_STATIC: DUInt = AccessFlags::ACC_STATIC;
68 pub const ACC_FINAL: DUInt = AccessFlags::ACC_FINAL;
69 pub const ACC_INTERFACE: DUInt = 0x0200;
70 pub const ACC_ABSTRACT: DUInt = AccessFlags::ACC_ABSTRACT;
71 pub const ACC_SYNTHETIC: DUInt = AccessFlags::ACC_SYNTHETIC;
72 pub const ACC_ANNOTATION: DUInt = 0x2000;
73 pub const ACC_ENUM: DUInt = AccessFlags::ACC_ENUM;
74
75 pub fn render(access_flag: DUInt, mut tb: SmaliTokensBuilder) -> SmaliTokensBuilder {
76 tb = AccessFlags::render(access_flag, tb);
77 if access_flag & Self::ACC_INTERFACE != 0 { tb = tb.raw("interface"); }
78 if access_flag & Self::ACC_ANNOTATION != 0 { tb = tb.raw("annotation"); }
79 tb
80 }
81}
82
83#[const_container(DUInt)]
84impl MethodAccessFlags {
85 pub const ACC_PUBLIC: DUInt = AccessFlags::ACC_PUBLIC;
86 pub const ACC_PRIVATE: DUInt = AccessFlags::ACC_PRIVATE;
87 pub const ACC_PROTECTED: DUInt = AccessFlags::ACC_PROTECTED;
88 pub const ACC_STATIC: DUInt = AccessFlags::ACC_STATIC;
89 pub const ACC_FINAL: DUInt = AccessFlags::ACC_FINAL;
90 pub const ACC_SYNCHRONIZED: DUInt = 0x0020;
91 pub const ACC_BRIDGE: DUInt = 0x0040;
92 pub const ACC_VARARGS: DUInt = 0x0080;
93 pub const ACC_NATIVE: DUInt = 0x0100;
94 pub const ACC_ABSTRACT: DUInt = AccessFlags::ACC_ABSTRACT;
95 pub const ACC_STRICT: DUInt = 0x0800;
96 pub const ACC_SYNTHETIC: DUInt = AccessFlags::ACC_SYNTHETIC;
97 pub const ACC_CONSTRUCTOR: DUInt = 0x10000;
98 pub const ACC_DECLARED_SYNCHRONIZED: DUInt = 0x20000;
99
100 pub fn render(access_flag: DUInt, mut tb: SmaliTokensBuilder) -> SmaliTokensBuilder {
101 tb = AccessFlags::render(access_flag, tb);
102 if access_flag & Self::ACC_SYNCHRONIZED != 0 { tb = tb.raw("synchronized"); }
103 if access_flag & Self::ACC_BRIDGE != 0 { tb = tb.raw("bridge"); }
104 if access_flag & Self::ACC_VARARGS != 0 { tb = tb.raw("varargs"); }
105 if access_flag & Self::ACC_NATIVE != 0 { tb = tb.raw("native"); }
106 if access_flag & Self::ACC_STRICT != 0 { tb = tb.raw("strict"); }
107 if access_flag & Self::ACC_CONSTRUCTOR != 0 { tb = tb.raw("constructor"); }
108 if access_flag & Self::ACC_DECLARED_SYNCHRONIZED != 0 { tb = tb.raw("declared-synchronized"); }
109 tb
110 }
111}
112
113#[const_container(DUInt)]
114impl FieldAccessFlags {
115 pub const ACC_PUBLIC: DUInt = AccessFlags::ACC_PUBLIC;
116 pub const ACC_PRIVATE: DUInt = AccessFlags::ACC_PRIVATE;
117 pub const ACC_PROTECTED: DUInt = AccessFlags::ACC_PROTECTED;
118 pub const ACC_STATIC: DUInt = AccessFlags::ACC_STATIC;
119 pub const ACC_FINAL: DUInt = AccessFlags::ACC_FINAL;
120 pub const ACC_VOLATILE: DUInt = 0x0040;
121 pub const ACC_TRANSIENT: DUInt = 0x0080;
122 pub const ACC_SYNTHETIC: DUInt = AccessFlags::ACC_SYNTHETIC;
123 pub const ACC_ENUM: DUInt = 0x4000;
124
125 pub fn render(access_flag: DUInt, mut tb: SmaliTokensBuilder) -> SmaliTokensBuilder {
126 tb = AccessFlags::render(access_flag, tb);
127 if access_flag & Self::ACC_VOLATILE != 0 { tb = tb.raw("volatile"); }
128 if access_flag & Self::ACC_TRANSIENT != 0 { tb = tb.raw("transient"); }
129 if access_flag & Self::ACC_ENUM != 0 { tb = tb.raw("enum"); }
130 tb
131 }
132}
133
134pub struct EncodedValueType;
135#[const_container(DUByte)]
136impl EncodedValueType {
137 pub const VALUE_BYTE: DUByte = 0x00;
138 pub const VALUE_SHORT: DUByte = 0x02;
139 pub const VALUE_CHAR: DUByte = 0x03;
140 pub const VALUE_INT: DUByte = 0x04;
141 pub const VALUE_LONG: DUByte = 0x06;
142 pub const VALUE_FLOAT: DUByte = 0x10;
143 pub const VALUE_DOUBLE: DUByte = 0x11;
144 pub const VALUE_METHOD_TYPE: DUByte = 0x15;
145 pub const VALUE_METHOD_HANDLE: DUByte = 0x16;
146 pub const VALUE_STRING: DUByte = 0x17;
147 pub const VALUE_TYPE: DUByte = 0x18;
148 pub const VALUE_FIELD: DUByte = 0x19;
149 pub const VALUE_METHOD: DUByte = 0x1a;
150 pub const VALUE_ENUM: DUByte = 0x1b;
151 pub const VALUE_ARRAY: DUByte = 0x1c;
152 pub const VALUE_ANNOTATION: DUByte = 0x1d;
153 pub const VALUE_NULL: DUByte = 0x1e;
154 pub const VALUE_BOOLEAN: DUByte = 0x1f;
155}
156
157pub struct MethodHandleType;
158
159#[const_container(DUShort)]
160impl MethodHandleType {
161 pub const H_STATIC_PUT: DUShort = 0x00;
162 pub const H_STATIC_GET: DUShort = 0x01;
163 pub const H_INSTANCE_PUT: DUShort = 0x02;
164 pub const H_INSTANCE_GET: DUShort = 0x03;
165 pub const H_INVOKE_STATIC: DUShort = 0x04;
166 pub const H_INVOKE_INSTANCE: DUShort = 0x05;
167 pub const H_INVOKE_CONSTRUCTOR: DUShort = 0x06;
168 pub const H_INVOKE_DIRECT: DUShort = 0x07;
169 pub const H_INVOKE_INTERFACE: DUShort = 0x08;
170}