SdkTypeId - add version string comparator to the API, fix inheritors

GitOrigin-RevId: 4cc18ea990aad56632db714701826f2eaa3d8d05
This commit is contained in:
Eugene Petrenko
2020-01-15 14:53:15 +01:00
committed by intellij-monorepo-bot
parent 1a28c4fcf0
commit b0b06a9e32
3 changed files with 32 additions and 10 deletions

View File

@@ -148,6 +148,14 @@ public final class JavaSdkImpl extends JavaSdk {
};
}
@NotNull
@Override
public Comparator<String> versionStringComparator() {
return (sdk1, sdk2) -> {
return Comparing.compare(getJavaVersion(sdk1), getJavaVersion(sdk2));
};
}
@Override
public String getBinPath(@NotNull Sdk sdk) {
return getConvertedHomePath(sdk) + "bin";
@@ -341,9 +349,17 @@ public final class JavaSdkImpl extends JavaSdk {
return version != null ? JavaSdkVersion.fromJavaVersion(version) : null;
}
private JavaVersion getJavaVersion(Sdk sdk) {
@Nullable
private JavaVersion getJavaVersion(@NotNull Sdk sdk) {
String versionString = sdk.getVersionString();
return versionString != null ? myCachedVersionStringToJdkVersion.computeIfAbsent(versionString, JavaVersion::tryParse) : null;
return getJavaVersion(versionString);
}
@Nullable
private JavaVersion getJavaVersion(@Nullable String versionString) {
return versionString != null
? myCachedVersionStringToJdkVersion.computeIfAbsent(versionString, JavaVersion::tryParse)
: null;
}
@Override

View File

@@ -35,10 +35,22 @@ public interface SdkTypeId {
*/
@NotNull
default Comparator<Sdk> versionComparator() {
Comparator<String> versionStringComparator = versionStringComparator();
return (sdk1, sdk2) -> {
assert sdk1.getSdkType() == this : sdk1;
assert sdk2.getSdkType() == this : sdk2;
return StringUtil.compareVersionNumbers(sdk1.getVersionString(), sdk2.getVersionString());
return versionStringComparator.compare(sdk1.getVersionString(), sdk2.getVersionString());
};
}
}
/**
* A comparator to compare versions of SDKs of that SdkType, e.g. versions from
* {@link Sdk#getVersionString()} or {@link SdkType#getVersionString}
* <br />
* The implementation has to be synchronized with {@link #versionComparator()}
*/
@NotNull
default Comparator<String> versionStringComparator() {
return (v1, v2) -> StringUtil.compareVersionNumbers(v1, v2);
}
}

View File

@@ -99,11 +99,5 @@ public class PythonMockSdk {
public boolean isLocalSdk(@NotNull Sdk sdk) {
return false;
}
@NotNull
@Override
public Comparator<Sdk> versionComparator() {
return null;
}
}
}