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 @Override
public String getBinPath(@NotNull Sdk sdk) { public String getBinPath(@NotNull Sdk sdk) {
return getConvertedHomePath(sdk) + "bin"; return getConvertedHomePath(sdk) + "bin";
@@ -341,9 +349,17 @@ public final class JavaSdkImpl extends JavaSdk {
return version != null ? JavaSdkVersion.fromJavaVersion(version) : null; return version != null ? JavaSdkVersion.fromJavaVersion(version) : null;
} }
private JavaVersion getJavaVersion(Sdk sdk) { @Nullable
private JavaVersion getJavaVersion(@NotNull Sdk sdk) {
String versionString = sdk.getVersionString(); 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 @Override

View File

@@ -35,10 +35,22 @@ public interface SdkTypeId {
*/ */
@NotNull @NotNull
default Comparator<Sdk> versionComparator() { default Comparator<Sdk> versionComparator() {
Comparator<String> versionStringComparator = versionStringComparator();
return (sdk1, sdk2) -> { return (sdk1, sdk2) -> {
assert sdk1.getSdkType() == this : sdk1; assert sdk1.getSdkType() == this : sdk1;
assert sdk2.getSdkType() == this : sdk2; 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) { public boolean isLocalSdk(@NotNull Sdk sdk) {
return false; return false;
} }
@NotNull
@Override
public Comparator<Sdk> versionComparator() {
return null;
}
} }
} }