Commit 4140fe0b authored by Konstantin Hudyakov's avatar Konstantin Hudyakov Committed by intellij-monorepo-bot
Browse files

[IFT] Refactor: extract JDK related methods to JavaProjectUtil

IJ-CR-23618

GitOrigin-RevId: 6d35d2a1e53a5bb57949ec7c3beabce96f632dea
parent 759e298d
Showing with 66 additions and 52 deletions
+66 -52
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.ift
import com.intellij.openapi.application.invokeAndWaitIfNeeded
import com.intellij.openapi.application.runInEdt
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.command.CommandProcessor
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil
import com.intellij.openapi.roots.impl.LanguageLevelProjectExtensionImpl
import com.intellij.openapi.roots.ui.configuration.SdkLookup
import com.intellij.openapi.roots.ui.configuration.SdkLookupDecision
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.pom.java.LanguageLevel
import com.intellij.util.lang.JavaVersion
import training.lang.AbstractLangSupport
import training.learn.LearnBundle
import training.project.ProjectUtils
import java.nio.file.Path
abstract class JavaBasedLangSupport : AbstractLangSupport() {
......@@ -27,7 +18,7 @@ abstract class JavaBasedLangSupport : AbstractLangSupport() {
projectToClose: Project?,
postInitCallback: (learnProject: Project) -> Unit) {
super.installAndOpenLearningProject(contentRoot, projectToClose) { project ->
findJavaSdkAsync(project) { sdk ->
JavaProjectUtil.findJavaSdkAsync(project) { sdk ->
if (sdk != null) {
applyProjectSdk(sdk, project)
}
......@@ -36,42 +27,6 @@ abstract class JavaBasedLangSupport : AbstractLangSupport() {
}
}
private fun findJavaSdkAsync(project: Project, onSdkSearchCompleted: (Sdk?) -> Unit) {
val javaSdkType = JavaSdk.getInstance()
val notification = ProjectUtils.createSdkDownloadingNotification()
SdkLookup.newLookupBuilder()
.withSdkType(javaSdkType)
.withVersionFilter {
JavaVersion.tryParse(it)?.isAtLeast(6) == true
}
.onDownloadableSdkSuggested { sdkFix ->
val userDecision = invokeAndWaitIfNeeded {
Messages.showYesNoDialog(
LearnBundle.message("learn.project.initializing.jdk.download.message", sdkFix.downloadDescription),
LearnBundle.message("learn.project.initializing.jdk.download.title"),
null
)
}
if (userDecision == Messages.YES) {
notification.notify(project)
SdkLookupDecision.CONTINUE
}
else {
onSdkSearchCompleted(null)
SdkLookupDecision.STOP
}
}
.onSdkResolved { sdk ->
if (sdk != null && sdk.sdkType === javaSdkType) {
onSdkSearchCompleted(sdk)
DumbService.getInstance(project).runWhenSmart {
notification.expire()
}
}
}
.executeLookup()
}
override fun getSdkForProject(project: Project, selectedSdk: Sdk?): Sdk? {
return null
}
......
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.java.ift
import com.intellij.openapi.application.invokeAndWaitIfNeeded
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.roots.ui.configuration.SdkLookup
import com.intellij.openapi.roots.ui.configuration.SdkLookupDecision
import com.intellij.openapi.ui.Messages
import com.intellij.util.lang.JavaVersion
import training.learn.LearnBundle
import training.project.ProjectUtils
object JavaProjectUtil {
fun findJavaSdkAsync(project: Project, onSdkSearchCompleted: (Sdk?) -> Unit) {
val javaSdkType = JavaSdk.getInstance()
val notification = ProjectUtils.createSdkDownloadingNotification()
SdkLookup.newLookupBuilder()
.withSdkType(javaSdkType)
.withVersionFilter {
JavaVersion.tryParse(it)?.isAtLeast(6) == true
}
.onDownloadableSdkSuggested { sdkFix ->
val userDecision = invokeAndWaitIfNeeded {
Messages.showYesNoDialog(
LearnBundle.message("learn.project.initializing.jdk.download.message", sdkFix.downloadDescription),
LearnBundle.message("learn.project.initializing.jdk.download.title"),
null
)
}
if (userDecision == Messages.YES) {
notification.notify(project)
SdkLookupDecision.CONTINUE
}
else {
onSdkSearchCompleted(null)
SdkLookupDecision.STOP
}
}
.onSdkResolved { sdk ->
if (sdk != null && sdk.sdkType === javaSdkType) {
onSdkSearchCompleted(sdk)
DumbService.getInstance(project).runWhenSmart {
notification.expire()
}
}
}
.executeLookup()
}
fun getProjectJdk(project: Project): Sdk? {
val projectJdk = ProjectRootManager.getInstance(project).projectSdk
val module = ModuleManager.getInstance(project).modules.first()
val moduleJdk = ModuleRootManager.getInstance(module).sdk
return moduleJdk ?: projectJdk
}
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ import com.intellij.ide.util.PropertiesComponent
import com.intellij.ide.util.gotoByName.GotoActionModel
import com.intellij.idea.ActionsBundle
import com.intellij.java.ift.JavaLessonsBundle
import com.intellij.java.ift.JavaProjectUtil
import com.intellij.java.ift.lesson.run.highlightRunGutters
import com.intellij.openapi.actionSystem.ActionPlaces
import com.intellij.openapi.actionSystem.AnActionEvent
......@@ -31,8 +32,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectBundle
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.SdkType
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.roots.ui.configuration.SdkDetector
import com.intellij.openapi.ui.MessageDialogBuilder
import com.intellij.openapi.ui.Messages
......@@ -243,15 +242,13 @@ class JavaOnboardingTourLesson : KLesson("java.onboarding", JavaLessonsBundle.me
})
}
val projectJdk = ProjectRootManager.getInstance(project).projectSdk
val module = ModuleManager.getInstance(project).modules.first()
val moduleJdk = ModuleRootManager.getInstance(module).sdk
val currentJdk = moduleJdk ?: projectJdk
val currentJdk = JavaProjectUtil.getProjectJdk(project)
val currentJdkVersion: @NlsSafe String = if (currentJdk != null) {
JavaSdk.getInstance().getVersionString(currentJdk) ?: "none"
}
else "none"
val module = ModuleManager.getInstance(project).modules.first()
val currentLanguageLevel: @NlsSafe String = LanguageLevelUtil.getEffectiveLanguageLevel(module).name
primaryLanguage.onboardingFeedbackData = object : OnboardingFeedbackData("IDEA Onboarding Tour Feedback", lessonEndInfo) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment