blob: 69a385c7b4bda52422117b143058423118157d6e [file]
// Copyright (c) 2026, 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.utils.internal.ObjectUtils;
import com.android.tools.r8.utils.structural.Ordered;
public class UncheckedApiLevel implements Ordered<UncheckedApiLevel> {
protected final int major;
protected final int minor;
public UncheckedApiLevel(int major, int minor) {
if (major <= 0 || minor < 0) {
throw new IllegalArgumentException("Invalid API version: " + toString(major, minor));
}
this.major = major;
this.minor = minor;
}
@Deprecated
@SuppressWarnings("InlineMeSuggester")
public UncheckedApiLevel(int major) {
// TODO(b/356841164): Remove all uses of this.
this(major, 0);
}
public static UncheckedApiLevel parse(String apiLevel) {
int dotPosition = apiLevel.indexOf('.');
if (dotPosition == -1) {
return new UncheckedApiLevel(Integer.parseInt(apiLevel), 0);
} else {
String majorApiLevel = apiLevel.substring(0, dotPosition);
String minorApiLevel = apiLevel.substring(dotPosition + 1);
return new UncheckedApiLevel(
Integer.parseInt(majorApiLevel), Integer.parseInt(minorApiLevel));
}
}
public int getMajor() {
return major;
}
public int getMinor() {
return minor;
}
public static String toString(int major, int minor) {
if (minor == 0) {
return Integer.toString(major);
} else {
return major + "." + minor;
}
}
@Override
public String toString() {
return toString(major, minor);
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
} else if (!(obj instanceof UncheckedApiLevel)) {
return false;
} else {
var other = (UncheckedApiLevel) obj;
return major == other.major && minor == other.minor;
}
}
@Override
public int hashCode() {
return ObjectUtils.hashII(major, minor);
}
@Override
public int compareTo(UncheckedApiLevel other) {
if (major == other.major) {
return Integer.compare(minor, other.minor);
} else {
return Integer.compare(major, other.major);
}
}
}