blob: 9f407915cdeb769ffb437f1d8c816b2fbf19e475 [file] [log] [blame]
Benoit Lamarchee6fedc52017-08-31 17:20:16 +02001// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4package com.android.tools.r8.utils;
5
Mikaël Peltiere7b00942017-10-03 15:10:42 +02006import com.android.tools.r8.errors.Unreachable;
7
Benoit Lamarchee6fedc52017-08-31 17:20:16 +02008/**
9 * Android API level description
10 */
11public enum AndroidApiLevel {
Mikaël Peltierccafacd2017-10-03 18:03:30 +020012 LATEST(-1),
Mikaël Peltier3c871d42017-10-04 15:41:56 +020013 P(28),
14 O_MR1(27),
Benoit Lamarchee6fedc52017-08-31 17:20:16 +020015 O(26),
16 N_MR1(25),
17 N(24),
18 M(23),
19 L_MR1(22),
20 L(21),
21 K_WATCH(20),
22 K(19),
23 J_MR2(18),
24 J_MR1(17),
25 J(16),
26 I_MR1(15),
27 I(14),
28 H_MR2(13),
29 H_MR1(12),
30 H(11),
31 G_MR1(10),
32 G(9),
33 F(8),
34 E_MR1(7),
35 E_0_1(6),
36 E(5),
37 D(4),
38 C(3),
39 B_1_1(2),
40 B(1);
41
42 private final int level;
43
44 AndroidApiLevel(int level) {
45 this.level = level;
46 }
47
48 public int getLevel() {
49 return level;
50 }
51
52 public String getName() {
53 return "Android " + name();
54 }
Mikaël Peltier20c9ca72017-10-03 10:09:39 +020055
56 public static AndroidApiLevel getDefault() {
57 return AndroidApiLevel.B;
58 }
Mikaël Peltiere7b00942017-10-03 15:10:42 +020059
60 public DexVersion getDexVersion() {
61 return DexVersion.getDexVersion(this);
62 }
63
64 public static AndroidApiLevel getMinAndroidApiLevel(DexVersion dexVersion) {
65 switch (dexVersion) {
66 case V35:
67 return AndroidApiLevel.B;
68 case V37:
69 return AndroidApiLevel.N;
70 case V38:
71 return AndroidApiLevel.O;
72 case V39:
73 return AndroidApiLevel.P;
74 default:
75 throw new Unreachable();
76 }
77 }
78
79 public static AndroidApiLevel getAndroidApiLevel(int apiLevel) {
80 switch (apiLevel) {
Mikaël Peltierccafacd2017-10-03 18:03:30 +020081 case 0:
82 // 0 is not supported, it should not happen
83 throw new Unreachable();
Mikaël Peltiere7b00942017-10-03 15:10:42 +020084 case 1:
85 return B;
86 case 2:
87 return B_1_1;
88 case 3:
89 return C;
90 case 4:
91 return D;
92 case 5:
93 return E;
94 case 6:
95 return E_0_1;
96 case 7:
97 return E_MR1;
98 case 8:
99 return F;
100 case 9:
101 return G;
102 case 10:
103 return G_MR1;
104 case 11:
105 return H;
106 case 12:
107 return H_MR1;
108 case 13:
109 return H_MR2;
110 case 14:
111 return I;
112 case 15:
113 return I_MR1;
114 case 16:
115 return J;
116 case 17:
117 return J_MR1;
118 case 18:
119 return J_MR2;
120 case 19:
121 return K;
122 case 20:
123 return K_WATCH;
124 case 21:
125 return L;
126 case 22:
127 return L_MR1;
128 case 23:
129 return M;
130 case 24:
131 return N;
132 case 25:
133 return N_MR1;
134 case 26:
135 return O;
136 case 27:
Mikaël Peltier3c871d42017-10-04 15:41:56 +0200137 return O_MR1;
138 case 28:
Mikaël Peltiere7b00942017-10-03 15:10:42 +0200139 return P;
140 default:
Mikaël Peltierccafacd2017-10-03 18:03:30 +0200141 return LATEST;
Mikaël Peltiere7b00942017-10-03 15:10:42 +0200142 }
143 }
Benoit Lamarchee6fedc52017-08-31 17:20:16 +0200144}