Create two sentinel api levels
InvalidApiLevel: This will be used for error handling if a user provided api level is not recognized PrivateApiLevel: This will be used to differentiate the api level of sdk_version:"" from sdk_version:"current" or sdk_version:"<active_codename>" (all used to be FutureApiLevel previously). This was not necessary previously since the type of min_sdk_version was SdkSpec(kind+level). Since it had access to kind, it could check that it was not SdkSpecPrivate Test: m nothing Change-Id: I628b443c34bf2ec258d947dfec09f38b126bc6bb
This commit is contained in:
@@ -55,6 +55,9 @@ type ApiLevel struct {
|
||||
}
|
||||
|
||||
func (this ApiLevel) FinalInt() int {
|
||||
if this.IsInvalid() {
|
||||
panic(fmt.Errorf("%v is not a recognized api_level\n", this))
|
||||
}
|
||||
if this.IsPreview() {
|
||||
panic("Requested a final int from a non-final ApiLevel")
|
||||
} else {
|
||||
@@ -63,6 +66,9 @@ func (this ApiLevel) FinalInt() int {
|
||||
}
|
||||
|
||||
func (this ApiLevel) FinalOrFutureInt() int {
|
||||
if this.IsInvalid() {
|
||||
panic(fmt.Errorf("%v is not a recognized api_level\n", this))
|
||||
}
|
||||
if this.IsPreview() {
|
||||
return FutureApiLevelInt
|
||||
} else {
|
||||
@@ -76,6 +82,9 @@ func (this ApiLevel) FinalOrFutureInt() int {
|
||||
// - preview codenames -> preview base (9000) + index
|
||||
// - otherwise -> cast to int
|
||||
func (this ApiLevel) FinalOrPreviewInt() int {
|
||||
if this.IsInvalid() {
|
||||
panic(fmt.Errorf("%v is not a recognized api_level\n", this))
|
||||
}
|
||||
if this.IsCurrent() {
|
||||
return this.number
|
||||
}
|
||||
@@ -97,6 +106,11 @@ func (this ApiLevel) IsPreview() bool {
|
||||
return this.isPreview
|
||||
}
|
||||
|
||||
// Returns true if the raw api level string is invalid
|
||||
func (this ApiLevel) IsInvalid() bool {
|
||||
return this.EqualTo(InvalidApiLevel)
|
||||
}
|
||||
|
||||
// Returns true if this is the unfinalized "current" API level. This means
|
||||
// different things across Java and native. Java APIs do not use explicit
|
||||
// codenames, so all non-final codenames are grouped into "current". For native
|
||||
@@ -113,6 +127,12 @@ func (this ApiLevel) IsNone() bool {
|
||||
return this.number == -1
|
||||
}
|
||||
|
||||
// Returns true if an app is compiling against private apis.
|
||||
// e.g. if sdk_version = "" in Android.bp, then the ApiLevel of that "sdk" is at PrivateApiLevel.
|
||||
func (this ApiLevel) IsPrivate() bool {
|
||||
return this.number == PrivateApiLevel.number
|
||||
}
|
||||
|
||||
// Returns -1 if the current API level is less than the argument, 0 if they
|
||||
// are equal, and 1 if it is greater than the argument.
|
||||
func (this ApiLevel) CompareTo(other ApiLevel) int {
|
||||
@@ -166,6 +186,19 @@ var NoneApiLevel = ApiLevel{
|
||||
isPreview: true,
|
||||
}
|
||||
|
||||
// Sentinel ApiLevel to validate that an apiLevel is either an int or a recognized codename.
|
||||
var InvalidApiLevel = NewInvalidApiLevel("invalid")
|
||||
|
||||
// Returns an apiLevel object at the same level as InvalidApiLevel.
|
||||
// The object contains the raw string provied in bp file, and can be used for error handling.
|
||||
func NewInvalidApiLevel(raw string) ApiLevel {
|
||||
return ApiLevel{
|
||||
value: raw,
|
||||
number: -2, // One less than NoneApiLevel
|
||||
isPreview: true,
|
||||
}
|
||||
}
|
||||
|
||||
// The first version that introduced 64-bit ABIs.
|
||||
var FirstLp64Version = uncheckedFinalApiLevel(21)
|
||||
|
||||
|
Reference in New Issue
Block a user