[dynamic plugins] predicate fixed #IDEA-253844 fixed
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / projectRoots / SdkTypeId.java
1 // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.projectRoots;
3
4 import com.intellij.openapi.util.text.StringUtil;
5 import org.jdom.Element;
6 import org.jetbrains.annotations.NotNull;
7 import org.jetbrains.annotations.Nullable;
8
9 import java.util.Comparator;
10
11 /**
12  * @author yole
13  */
14 public interface SdkTypeId {
15   @NotNull
16   String getName();
17
18   @Nullable
19   String getVersionString(@NotNull Sdk sdk);
20
21   void saveAdditionalData(@NotNull SdkAdditionalData additionalData, @NotNull Element additional);
22
23   @Nullable
24   SdkAdditionalData loadAdditionalData(@NotNull Sdk currentSdk, @NotNull Element additional);
25
26   /**
27    * An SDK can be located on a local machine or on a remote or virtual machine. In the latter case this method returns false.
28    */
29   default boolean isLocalSdk(@NotNull Sdk sdk) {
30     return true;
31   }
32
33   /**
34    * Note to implementors: you may need to override this method if SDKs of this type have non-trivial version strings.
35    */
36   @NotNull
37   default Comparator<Sdk> versionComparator() {
38     Comparator<String> versionStringComparator = versionStringComparator();
39     return (sdk1, sdk2) -> {
40       assert sdk1.getSdkType() == this : sdk1;
41       assert sdk2.getSdkType() == this : sdk2;
42       return versionStringComparator.compare(sdk1.getVersionString(), sdk2.getVersionString());
43     };
44   }
45
46   /**
47    * A comparator to compare versions of SDKs of that SdkType, e.g. versions from
48    * {@link Sdk#getVersionString()} or {@link SdkType#getVersionString}
49    * <br />
50    * The implementation has to be synchronized with {@link #versionComparator()}
51    */
52   @NotNull
53   default Comparator<String> versionStringComparator() {
54     return (v1, v2) -> StringUtil.compareVersionNumbers(v1, v2);
55   }
56 }