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
30 changes: 19 additions & 11 deletions src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public class JdkInfo {

public string HomePath {get;}

public string Locator {get;}

public string JarPath {get;}
public string JavaPath {get;}
public string JavacPath {get;}
Expand Down Expand Up @@ -76,9 +78,15 @@ public JdkInfo (string homePath)
javaVersion = new Lazy<Version> (GetJavaVersion, LazyThreadSafetyMode.ExecutionAndPublication);
}

public JdkInfo (string homePath, string locator)
: this (homePath)
{
Locator = locator;
}

public override string ToString()
{
return $"JdkInfo(Version={Version}, Vendor=\"{Vendor}\", HomePath=\"{HomePath}\")";
return $"JdkInfo(Version={Version}, Vendor=\"{Vendor}\", HomePath=\"{HomePath}\", Locator=\"{Locator}\")";
}

public bool GetJavaSettingsPropertyValues (string key, out IEnumerable<string> value)
Expand Down Expand Up @@ -229,7 +237,7 @@ public static IEnumerable<JdkInfo> GetKnownSystemJdkInfos (Action<TraceLevel, st
static IEnumerable<JdkInfo> GetConfiguredJdks (Action<TraceLevel, string> logger)
{
return GetConfiguredJdkPaths (logger)
.Select (p => TryGetJdkInfo (p, logger))
.Select (p => TryGetJdkInfo (p, logger, "monodroid-config.xml"))
.Where (jdk => jdk != null)
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
}
Expand All @@ -246,7 +254,7 @@ static IEnumerable<string> GetConfiguredJdkPaths (Action<TraceLevel, string> log
internal static IEnumerable<JdkInfo> GetMacOSMicrosoftJdks (Action<TraceLevel, string> logger)
{
return GetMacOSMicrosoftJdkPaths ()
.Select (p => TryGetJdkInfo (p, logger))
.Select (p => TryGetJdkInfo (p, logger, "$HOME/Library/Developer/Xamarin/jdk"))
.Where (jdk => jdk != null)
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
}
Expand All @@ -265,14 +273,14 @@ static IEnumerable<string> GetMacOSMicrosoftJdkPaths ()
return Directory.EnumerateDirectories (jdks);
}

static JdkInfo TryGetJdkInfo (string path, Action<TraceLevel, string> logger)
static JdkInfo TryGetJdkInfo (string path, Action<TraceLevel, string> logger, string locator)
{
JdkInfo jdk = null;
try {
jdk = new JdkInfo (path);
jdk = new JdkInfo (path, locator);
}
catch (Exception e) {
logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`");
logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`; via locator: {locator}");
logger (TraceLevel.Verbose, e.ToString ());
}
return jdk;
Expand All @@ -290,7 +298,7 @@ static IEnumerable<JdkInfo> GetJavaHomeEnvironmentJdks (Action<TraceLevel, strin
var java_home = Environment.GetEnvironmentVariable ("JAVA_HOME");
if (string.IsNullOrEmpty (java_home))
yield break;
var jdk = TryGetJdkInfo (java_home, logger);
var jdk = TryGetJdkInfo (java_home, logger, "$JAVA_HOME");
if (jdk != null)
yield return jdk;
}
Expand All @@ -300,7 +308,7 @@ static IEnumerable<JdkInfo> GetLibexecJdks (Action<TraceLevel, string> logger)
{
return GetLibexecJdkPaths (logger)
.Distinct ()
.Select (p => TryGetJdkInfo (p, logger))
.Select (p => TryGetJdkInfo (p, logger, "`/usr/libexec/java_home -X`"))
.Where (jdk => jdk != null)
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
}
Expand Down Expand Up @@ -339,7 +347,7 @@ static IEnumerable<JdkInfo> GetJavaAlternativesJdks (Action<TraceLevel, string>
{
return GetJavaAlternativesJdkPaths ()
.Distinct ()
.Select (p => TryGetJdkInfo (p, logger))
.Select (p => TryGetJdkInfo (p, logger, "`/usr/sbin/update-java-alternatives -l`"))
.Where (jdk => jdk != null);
}

Expand Down Expand Up @@ -372,7 +380,7 @@ static IEnumerable<JdkInfo> GetLibJvmJdks (Action<TraceLevel, string> logger)
{
return GetLibJvmJdkPaths ()
.Distinct ()
.Select (p => TryGetJdkInfo (p, logger))
.Select (p => TryGetJdkInfo (p, logger, "`ls /usr/lib/jvm/*`"))
.Where (jdk => jdk != null)
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
}
Expand All @@ -394,7 +402,7 @@ static IEnumerable<string> GetLibJvmJdkPaths ()
static IEnumerable<JdkInfo> GetPathEnvironmentJdks (Action<TraceLevel, string> logger)
{
return GetPathEnvironmentJdkPaths ()
.Select (p => TryGetJdkInfo (p, logger))
.Select (p => TryGetJdkInfo (p, logger, "$PATH"))
.Where (jdk => jdk != null);
}

Expand Down
17 changes: 9 additions & 8 deletions src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,28 +112,29 @@ protected override string GetJavaSdkPath ()

internal static IEnumerable<JdkInfo> GetJdkInfos (Action<TraceLevel, string> logger)
{
JdkInfo TryGetJdkInfo (string path)
JdkInfo TryGetJdkInfo (string path, string locator)
{
JdkInfo jdk = null;
try {
jdk = new JdkInfo (path);
jdk = new JdkInfo (path, locator);
}
catch (Exception e) {
logger (TraceLevel.Warning, e.ToString ());
logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`; via category: {locator}");
logger (TraceLevel.Verbose, e.ToString ());
}
return jdk;
}

IEnumerable<JdkInfo> ToJdkInfos (IEnumerable<string> paths)
IEnumerable<JdkInfo> ToJdkInfos (IEnumerable<string> paths, string locator)
{
return paths.Select (TryGetJdkInfo)
return paths.Select (p => TryGetJdkInfo (p, locator))
.Where (jdk => jdk != null)
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
}

return ToJdkInfos (GetPreferredJdkPaths ())
.Concat (ToJdkInfos (GetOpenJdkPaths ()))
.Concat (ToJdkInfos (GetOracleJdkPaths ()));
return ToJdkInfos (GetPreferredJdkPaths (), "Preferred Registry")
.Concat (ToJdkInfos (GetOpenJdkPaths (), "OpenJDK"))
.Concat (ToJdkInfos (GetOracleJdkPaths (), "Oracle JDK"));
}

private static IEnumerable<string> GetPreferredJdkPaths ()
Expand Down