From a00d19098ca9850e1b28a9db178df5a4b3456659 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 9 Mar 2018 13:52:05 +0100 Subject: [PATCH] restore java version detection for android & plugins sdks (IDEA-187506) --- .../openapi/projectRoots/JavaSdkVersionUtil.java | 12 +++++++++++- .../com/intellij/openapi/projectRoots/SdkType.java | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/java/openapi/src/com/intellij/openapi/projectRoots/JavaSdkVersionUtil.java b/java/openapi/src/com/intellij/openapi/projectRoots/JavaSdkVersionUtil.java index 0c5858f6bc40..9ee57ae62f15 100644 --- a/java/openapi/src/com/intellij/openapi/projectRoots/JavaSdkVersionUtil.java +++ b/java/openapi/src/com/intellij/openapi/projectRoots/JavaSdkVersionUtil.java @@ -22,7 +22,17 @@ public class JavaSdkVersionUtil { } public static JavaSdkVersion getJavaSdkVersion(@Nullable Sdk sdk) { - return sdk != null && sdk.getSdkType() instanceof JavaSdk ? ((JavaSdk)sdk.getSdkType()).getVersion(sdk) : null; + if (sdk != null) { + SdkTypeId sdkType = sdk.getSdkType(); + if (!(sdkType instanceof JavaSdk) && sdkType instanceof SdkType) { + sdkType = ((SdkType)sdkType).getDependencyType(); + } + + if (sdkType instanceof JavaSdk) { + return ((JavaSdk)sdkType).getVersion(sdk); + } + } + return null; } @Nullable diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java index e93adb5b53ba..a64bbea40216 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java @@ -225,6 +225,15 @@ public abstract class SdkType implements SdkTypeId { throw new IllegalArgumentException("Unknown SDk type: " + sdkTypeClass); } + /** + * @return for sdk build over another sdk, returns type of the nested sdk, + * e.g. plugins or android sdks are build over java sdk and for them the method returns {@link JavaSdkType}, + * null otherwise + */ + protected SdkType getDependencyType() { + return null; + } + public boolean isRootTypeApplicable(@NotNull OrderRootType type) { return true; }