From 741a9a33d7494abb90f4f74fd45a5d5d786e025d Mon Sep 17 00:00:00 2001 From: Konstantin Hudyakov Date: Fri, 27 Jan 2023 12:20:52 +0200 Subject: [PATCH] [IFT] Fix Java learning project loading Seems that SetupJavaProjectFromSourcesActivity is broken and is not used to create projects anymore so let's do not run it and configure compiler output path manually. IJ-CR-102100 GitOrigin-RevId: b8afb03efe02922c7b9ab5c3c1cdcd1898fb00f1 --- .../intellij/java/ift/JavaBasedLangSupport.kt | 31 ++++++++++++++----- .../kotlin/training/ift/KotlinLangSupport.kt | 5 --- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/java/java-features-trainer/src/com/intellij/java/ift/JavaBasedLangSupport.kt b/java/java-features-trainer/src/com/intellij/java/ift/JavaBasedLangSupport.kt index 773bc02bb11f..13e25f24c7d7 100644 --- a/java/java-features-trainer/src/com/intellij/java/ift/JavaBasedLangSupport.kt +++ b/java/java-features-trainer/src/com/intellij/java/ift/JavaBasedLangSupport.kt @@ -1,6 +1,8 @@ // 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.ide.impl.NewProjectUtil +import com.intellij.ide.impl.OpenProjectTask import com.intellij.openapi.application.invokeLater import com.intellij.openapi.application.runInEdt import com.intellij.openapi.application.runWriteAction @@ -10,7 +12,9 @@ import com.intellij.openapi.projectRoots.JavaSdkType import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.ex.JavaSdkUtil import com.intellij.openapi.roots.ProjectRootManager +import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VirtualFile +import com.intellij.platform.PlatformProjectOpenProcessor import training.lang.AbstractLangSupport import training.project.ProjectUtils import java.nio.file.Path @@ -21,12 +25,27 @@ abstract class JavaBasedLangSupport : AbstractLangSupport() { override fun installAndOpenLearningProject(contentRoot: Path, projectToClose: Project?, postInitCallback: (learnProject: Project) -> Unit) { - super.installAndOpenLearningProject(contentRoot, projectToClose) { project -> + val openProjectTask = OpenProjectTask { + this.projectToClose = projectToClose + // It is required to not run SetupJavaProjectFromSourcesActivity because + // Projects created from wizard do not use it now + this.beforeOpen = { project -> + project.putUserData(PlatformProjectOpenProcessor.PROJECT_OPENED_BY_PLATFORM_PROCESSOR, false) + true + } + } + ProjectUtils.simpleInstallAndOpenLearningProject(contentRoot, this, openProjectTask) { project -> + val projectPath = FileUtil.toSystemIndependentName(contentRoot.toString()) + val outputPath = projectPath.removeSuffix("/") + "/out" + NewProjectUtil.setCompilerOutputPath(project, outputPath) + JavaProjectUtil.findJavaSdkAsync(project) { sdk -> - if (sdk != null) { - applyProjectSdk(sdk, project) + runInEdt { + if (sdk != null) { + applyProjectSdk(sdk, project) + } + postInitCallback(project) } - postInitCallback(project) } } } @@ -39,9 +58,7 @@ abstract class JavaBasedLangSupport : AbstractLangSupport() { val applySdkAction = { runWriteAction { JavaSdkUtil.applyJdkToProject(project, sdk) } } - runInEdt { - CommandProcessor.getInstance().executeCommand(project, applySdkAction, null, null) - } + CommandProcessor.getInstance().executeCommand(project, applySdkAction, null, null) } override fun applyToProjectAfterConfigure(): (Project) -> Unit = { newProject -> diff --git a/plugins/kotlin/features-trainer/src/org/jetbrains/kotlin/training/ift/KotlinLangSupport.kt b/plugins/kotlin/features-trainer/src/org/jetbrains/kotlin/training/ift/KotlinLangSupport.kt index 69e32930aa41..ef3a24c8cb5c 100644 --- a/plugins/kotlin/features-trainer/src/org/jetbrains/kotlin/training/ift/KotlinLangSupport.kt +++ b/plugins/kotlin/features-trainer/src/org/jetbrains/kotlin/training/ift/KotlinLangSupport.kt @@ -8,7 +8,6 @@ import com.intellij.openapi.application.runReadAction import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.progress.runBackgroundableTask import com.intellij.openapi.project.Project -import com.intellij.platform.PlatformProjectOpenProcessor import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator import org.jetbrains.kotlin.idea.configuration.NotificationMessageCollector import org.jetbrains.kotlin.idea.formatter.KotlinStyleGuideCodeStyle @@ -30,10 +29,6 @@ class KotlinLangSupport : JavaBasedLangSupport() { postInitCallback: (learnProject: Project) -> Unit ) { super.installAndOpenLearningProject(contentRoot, projectToClose) { project -> - // It is required to not run SetupJavaProjectFromSourcesActivity because - // it will overwrite our manual setup of KotlinJavaRuntime library - project.putUserData(PlatformProjectOpenProcessor.PROJECT_OPENED_BY_PLATFORM_PROCESSOR, false) - setupKotlin(project) postInitCallback(project) }