in rake-runner-agent/src/org/jetbrains/plugins/ruby/rvm/SharedRVMUtil.java [56:98]
public static Pair<String, String> determineSuitableRVMSdkDist(@NotNull final String rvmrcSdkRef,
@Nullable final String rvmrcGemset,
@NotNull final RubyDistToGemsetTable distName2GemsetsTable) {
final InstalledRVM rvm = RVMPathsSettings.getRVMNullSafe();
final String resolved = rvm.getDistrForName(rvmrcSdkRef);
if (resolved == null) {
return Pair.create(null,null);
}
final Set<String> installed = rvm.getInstalledRubies();
if (installed.contains(resolved)) {
// check gemsets
for (String gemset : distName2GemsetsTable.getGemsets(resolved)) {
if (areGemsetsEqual(rvmrcGemset, gemset)) {
return Pair.create(resolved, gemset);
}
}
return Pair.create(resolved, null);
} else {
// RVM cannot resolve such name into interpreter name
// May be caused by RVM update (when installed 'ruby-1.8.7-pX' and requested '1.8.7' resolved into 'ruby-1.8.7-pY' by RVM)
// In such case we can try to resolve manually, but should TODO: notify user.
// Reverse ordered installed interpreters (from higher version to old)
final SortedSet<String> ordered = new TreeSet<String>(installed).descendingSet();
final List<String> possible = CollectionsUtil.filterCollection(ordered, new Filter<String>() {
public boolean accept(@NotNull final String data) {
// check either refName suites dist name or not
return sdkRefMatchesManual(rvmrcSdkRef, data);
}
});
// First try more suitable interpreter
for (String dist : possible) {
// check gemsets
for (String gemset : distName2GemsetsTable.getGemsets(dist)) {
if (areGemsetsEqual(rvmrcGemset, gemset)) {
return Pair.create(dist, gemset);
}
}
return Pair.create(dist, null);
}
}
return Pair.create(null,null);
}