blob: 6ea2f409456f73432e827b1d0a85019fbe45fa15 [file] [log] [blame]
// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.utils;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.utils.structural.Ordered;
import java.util.Arrays;
import java.util.List;
/** Android API level description */
public enum AndroidApiLevel implements Ordered<AndroidApiLevel> {
B(1),
B_1_1(2),
C(3),
D(4),
E(5),
E_0_1(6),
E_MR1(7),
F(8),
G(9),
G_MR1(10),
H(11),
H_MR1(12),
H_MR2(13),
I(14),
I_MR1(15),
J(16),
J_MR1(17),
J_MR2(18),
K(19),
K_WATCH(20),
L(21),
L_MR1(22),
M(23),
N(24),
N_MR1(25),
O(26),
O_MR1(27),
P(28),
Q(29),
R(30),
S(31),
UNKNOWN(10000);
public static final AndroidApiLevel LATEST = S;
public static final int magicApiLevelUsedByAndroidPlatformBuild = 10000;
private final int level;
AndroidApiLevel(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
public String getName() {
return "Android " + name();
}
public static AndroidApiLevel getDefault() {
return AndroidApiLevel.B;
}
public AndroidApiLevel max(AndroidApiLevel other) {
return Ordered.max(this, other);
}
public DexVersion getDexVersion() {
return DexVersion.getDexVersion(this);
}
public static List<AndroidApiLevel> getAndroidApiLevelsSorted() {
return Arrays.asList(AndroidApiLevel.values());
}
public static AndroidApiLevel getMinAndroidApiLevel(DexVersion dexVersion) {
switch (dexVersion) {
case V35:
return AndroidApiLevel.B;
case V37:
return AndroidApiLevel.N;
case V38:
return AndroidApiLevel.O;
case V39:
return AndroidApiLevel.P;
default:
throw new Unreachable();
}
}
public static AndroidApiLevel getAndroidApiLevel(int apiLevel) {
assert apiLevel > 0;
assert UNKNOWN.isGreaterThan(LATEST);
switch (apiLevel) {
case 1:
return B;
case 2:
return B_1_1;
case 3:
return C;
case 4:
return D;
case 5:
return E;
case 6:
return E_0_1;
case 7:
return E_MR1;
case 8:
return F;
case 9:
return G;
case 10:
return G_MR1;
case 11:
return H;
case 12:
return H_MR1;
case 13:
return H_MR2;
case 14:
return I;
case 15:
return I_MR1;
case 16:
return J;
case 17:
return J_MR1;
case 18:
return J_MR2;
case 19:
return K;
case 20:
return K_WATCH;
case 21:
return L;
case 22:
return L_MR1;
case 23:
return M;
case 24:
return N;
case 25:
return N_MR1;
case 26:
return O;
case 27:
return O_MR1;
case 28:
return P;
case 29:
return Q;
case 30:
return R;
case 31:
return S;
default:
// This has to be updated when we add new api levels.
assert S == LATEST;
return UNKNOWN;
}
}
}