Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 24 additions & 19 deletions src/Xamarin.Android.Tools.AndroidSdk/AndroidAppManifest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,37 +136,37 @@ public void WriteToFile (string fileName)
}

public string? PackageName {
get { return (string) manifest.Attribute ("package"); }
get { return (string?) manifest.Attribute ("package"); }
set { manifest.SetAttributeValue ("package", NullIfEmpty (value)); }
}

public string? ApplicationLabel {
get { return (string) application.Attribute (aNS + "label"); }
get { return (string?) application.Attribute (aNS + "label"); }
set { application.SetAttributeValue (aNS + "label", NullIfEmpty (value)); }
}

public string? ApplicationIcon {
get { return (string) application.Attribute (aNS + "icon"); }
get { return (string?) application.Attribute (aNS + "icon"); }
set { application.SetAttributeValue (aNS + "icon", NullIfEmpty (value)); }
}

public string? ApplicationTheme {
get { return (string) application.Attribute (aNS + "theme"); }
get { return (string?) application.Attribute (aNS + "theme"); }
set { application.SetAttributeValue (aNS + "theme", NullIfEmpty (value)); }
}

public string? VersionName {
get { return (string) manifest.Attribute (aNS + "versionName"); }
get { return (string?) manifest.Attribute (aNS + "versionName"); }
set { manifest.SetAttributeValue (aNS + "versionName", NullIfEmpty (value)); }
}

public string? VersionCode {
get { return (string) manifest.Attribute (aNS + "versionCode"); }
get { return (string?) manifest.Attribute (aNS + "versionCode"); }
set { manifest.SetAttributeValue (aNS + "versionCode", NullIfEmpty (value)); }
}

public string? InstallLocation {
get { return (string) manifest.Attribute (aNS + "installLocation"); }
get { return (string?) manifest.Attribute (aNS + "installLocation"); }
set { manifest.SetAttributeValue (aNS + "installLocation", NullIfEmpty (value)); }
}

Expand All @@ -182,8 +182,8 @@ public int? TargetSdkVersion {

int? ParseSdkVersion (XAttribute attribute)
{
var version = (string)attribute;
if (string.IsNullOrEmpty (version))
var version = (string?) attribute;
if (version == null || string.IsNullOrEmpty (version))
return null;
int vn;
if (!int.TryParse (version, out vn)) {
Expand All @@ -198,7 +198,7 @@ public int? TargetSdkVersion {
public IEnumerable<string> AndroidPermissions {
get {
foreach (var el in manifest.Elements ("uses-permission")) {
var name = (string) el.Attribute (aName);
var name = (string?) el.Attribute (aName);
if (name == null)
continue;
var lastDot = name.LastIndexOf ('.');
Expand All @@ -211,7 +211,7 @@ public IEnumerable<string> AndroidPermissions {
public IEnumerable<string> AndroidPermissionsQualified {
get {
foreach (var el in manifest.Elements ("uses-permission")) {
var name = (string) el.Attribute (aName);
var name = (string?) el.Attribute (aName);
if (name != null)
yield return name;
}
Expand Down Expand Up @@ -267,7 +267,11 @@ void RemoveAndroidPermissions (IEnumerable<string> permissions)
{
var perms = new HashSet<string> (permissions);
var list = manifest.Elements ("uses-permission")
.Where (el => perms.Contains ((string)el.Attribute (aName))).ToList ();
.Where (el => {
var name = (string?) el.Attribute (aName);
return name != null && perms.Contains (name);
})
.ToList ();
foreach (var el in list)
el.Remove ();
}
Expand All @@ -284,7 +288,7 @@ void RemoveAndroidPermissions (IEnumerable<string> permissions)
{
string? first = null;
foreach (var a in GetLaunchableActivities ()) {
var name = (string) a.Attribute (aName);
var name = (string?) a.Attribute (aName);
//prefer the fastdev launcher, it's quicker
if (name == "mono.android.__FastDevLauncher") {
return name;
Expand All @@ -303,7 +307,7 @@ void RemoveAndroidPermissions (IEnumerable<string> permissions)
public string? GetLaunchableUserActivityName ()
{
return GetLaunchableActivities ()
.Select (a => (string) a.Attribute (aName))
.Select (a => (string?) a.Attribute (aName))
.FirstOrDefault (name => !string.IsNullOrEmpty (name) && name != "mono.android.__FastDevLauncher");
}

Expand All @@ -313,7 +317,7 @@ IEnumerable<XElement> GetLaunchableActivities ()
var filter = activity.Element ("intent-filter");
if (filter != null) {
foreach (var category in filter.Elements ("category"))
if (category != null && (string)category.Attribute (aName) == "android.intent.category.LAUNCHER")
if (category != null && (string?)category.Attribute (aName) == "android.intent.category.LAUNCHER")
yield return activity;
}
}
Expand All @@ -322,17 +326,18 @@ IEnumerable<XElement> GetLaunchableActivities ()
public IEnumerable<string> GetAllActivityNames ()
{
foreach (var activity in application.Elements ("activity")) {
var activityName = (string) activity.Attribute (aName);
if (activityName != "mono.android.__FastDevLauncher")
var activityName = (string?) activity.Attribute (aName);
if (activityName != null && activityName != "mono.android.__FastDevLauncher")
yield return activityName;
}
}

public IEnumerable<string> GetLaunchableActivityNames ()
{
return GetLaunchableActivities ()
.Select (a => (string) a.Attribute (aName))
.Where (name => !string.IsNullOrEmpty (name) && name != "mono.android.__FastDevLauncher");
.Select (a => (string?) a.Attribute (aName))
.Where (name => !string.IsNullOrEmpty (name) && name != "mono.android.__FastDevLauncher")
.Select (name => name!);
}
}
}
Expand Down
1 change: 1 addition & 0 deletions src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ static Dictionary<string, List<string>> GetJavaProperties (Action<TraceLevel, st
if (e.Data.StartsWith (ContinuedValuePrefix, StringComparison.Ordinal)) {
if (curKey == null) {
logger (TraceLevel.Error, $"No Java property previously seen for continued value `{e.Data}`.");
return;
}
props [curKey].Add (e.Data.Substring (ContinuedValuePrefix.Length));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ static IEnumerable<string> GetUnixConfiguredJdkPaths (Action<TraceLevel, string>
{
var config = AndroidSdkUnix.GetUnixConfigFile (logger);
foreach (var java_sdk in config.Root.Elements ("java-sdk")) {
var path = (string) java_sdk.Attribute ("path");
yield return path;
var path = (string?) java_sdk.Attribute ("path");
if (path != null && !string.IsNullOrEmpty (path)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the path != null check is redundant, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You'd think so, but… Different .NET profiles have different NRT metadata, and iirc in .NET Standard 2.0, string.IsNullOrEmpty() does not have [NotNullWhen(false)] on the parameter, which results in warnings if it isn't explicitly checked. :-(

JdkLocations.MacOS.cs(26,19): warning CS8603: Possible null reference return.

yield return path;
}
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public override string? PreferedAndroidSdkPath {
var androidEl = config_file.Root.Element ("android-sdk");

if (androidEl != null) {
var path = (string)androidEl.Attribute ("path");
var path = (string?)androidEl.Attribute ("path");

if (ValidateAndroidSdkLocation (path))
return path;
Expand All @@ -64,7 +64,7 @@ public override string? PreferedAndroidNdkPath {
var androidEl = config_file.Root.Element ("android-ndk");

if (androidEl != null) {
var path = (string)androidEl.Attribute ("path");
var path = (string?)androidEl.Attribute ("path");

if (ValidateAndroidNdkLocation (path))
return path;
Expand All @@ -79,7 +79,7 @@ public override string? PreferedJavaSdkPath {
var javaEl = config_file.Root.Element ("java-sdk");

if (javaEl != null) {
var path = (string)javaEl.Attribute ("path");
var path = (string?)javaEl.Attribute ("path");

if (ValidateJavaSdkLocation (path))
return path;
Expand Down