[platform] dropping the old Windows instance activation code (IJPL-442 follow-up)

GitOrigin-RevId: 93951ad2df9b83198cba62ad46cf0c976525d338
This commit is contained in:
Roman Shevchenko
2024-09-06 22:06:41 +02:00
committed by intellij-monorepo-bot
parent 61e15459c5
commit c8ae02f632
6 changed files with 17 additions and 72 deletions

View File

@@ -1,16 +0,0 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide;
import com.intellij.platform.ide.bootstrap.StartupUtil;
import org.jetbrains.annotations.ApiStatus.Internal;
/**
* <b>NOTE:</b> This method is called through JNI by the Windows launcher. Please do not delete or rename it.
*/
@SuppressWarnings("unused")
@Internal
public final class WindowsCommandLineProcessor {
public static int processWindowsLauncherCommandLine(String currentDirectory, String[] args) {
return StartupUtil.processWindowsLauncherCommandLine(currentDirectory, args);
}
}

View File

@@ -19503,9 +19503,7 @@ f:com.intellij.platform.ide.bootstrap.SplashManagerKt
- sf:hideSplash():V
- sf:hideSplashBeforeShow(java.awt.Window):V
f:com.intellij.platform.ide.bootstrap.StartupUtil
- sf:LAUNCHER_INITIAL_DIRECTORY_ENV_VAR:java.lang.String
- sf:logEssentialInfoAboutIde(com.intellij.openapi.diagnostic.Logger,com.intellij.openapi.application.ApplicationInfo,java.util.List):V
- sf:processWindowsLauncherCommandLine(java.lang.String,java.lang.String[]):I
- sf:startApplication(kotlinx.coroutines.CoroutineScope,java.util.List,kotlinx.coroutines.Deferred,java.nio.file.Path,kotlinx.coroutines.Deferred,kotlinx.coroutines.Deferred,kotlinx.coroutines.CoroutineScope,java.lang.Thread):V
e:com.intellij.platform.ide.bootstrap.StartupWizardStage
- java.lang.Enum

View File

@@ -20,7 +20,6 @@ import com.intellij.openapi.application.*
import com.intellij.openapi.application.ex.ApplicationEx
import com.intellij.openapi.application.ex.ApplicationManagerEx
import com.intellij.openapi.components.serviceAsync
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.diagnostic.getOrLogException
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.diagnostic.thisLogger
@@ -35,7 +34,6 @@ import com.intellij.openapi.util.text.HtmlChunk
import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame
import com.intellij.platform.diagnostic.telemetry.impl.span
import com.intellij.platform.ide.CoreUiCoroutineScopeHolder
import com.intellij.platform.ide.bootstrap.LAUNCHER_INITIAL_DIRECTORY_ENV_VAR
import com.intellij.platform.ide.diagnostic.startUpPerformanceReporter.FUSProjectHotStartUpMeasurer
import com.intellij.ui.mac.touchbar.TouchbarSupport
import com.intellij.ui.updateAppWindowIcon
@@ -236,10 +234,7 @@ open class IdeStarter : ModernApplicationStarter() {
}
private suspend fun loadProjectFromExternalCommandLine(commandLineArgs: List<String>): Project? {
val currentDirectory = System.getenv(LAUNCHER_INITIAL_DIRECTORY_ENV_VAR)
@Suppress("SSBasedInspection")
Logger.getInstance("#com.intellij.platform.ide.bootstrap.ApplicationLoader").info("ApplicationLoader.loadProject (cwd=${currentDirectory})")
val result = CommandLineProcessor.processExternalCommandLine(commandLineArgs, currentDirectory)
val result = CommandLineProcessor.processExternalCommandLine(commandLineArgs, currentDirectory = null)
if (result.hasError) {
withContext(Dispatchers.EDT) {
if (!ApplicationManagerEx.isInIntegrationTest() ||

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.openapi.application
import com.intellij.configurationStore.saveSettings
@@ -7,7 +7,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.util.NlsContexts
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.ide.bootstrap.LAUNCHER_INITIAL_DIRECTORY_ENV_VAR
import com.intellij.platform.ide.bootstrap.commandNameFromExtension
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
@@ -16,9 +15,6 @@ import org.jetbrains.annotations.ApiStatus.Internal
import java.util.*
import kotlin.system.exitProcess
/**
* @author Konstantin Bulenkov
*/
@Internal
abstract class ApplicationStarterBase protected constructor(private vararg val argsCount: Int) : ModernApplicationStarter() {
abstract val usageMessage: @NlsContexts.DialogMessage String?
@@ -81,7 +77,7 @@ abstract class ApplicationStarterBase protected constructor(private vararg val a
final override suspend fun start(args: List<String>) {
try {
val exitCode: Int = try {
val result = executeCommand(args = args, currentDirectory = System.getenv(LAUNCHER_INITIAL_DIRECTORY_ENV_VAR))
val result = executeCommand(args, currentDirectory = null)
result.message?.let(::println)
result.exitCode
}

View File

@@ -66,7 +66,6 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Path
import java.util.concurrent.CancellationException
import java.util.function.BiFunction
import kotlin.coroutines.jvm.internal.CoroutineDumpState
import kotlin.system.exitProcess
import kotlin.time.Duration.Companion.minutes
@@ -531,27 +530,11 @@ private fun addActivateAndWindowsCliListeners() {
}
}
EXTERNAL_LISTENER = BiFunction { currentDirectory, args ->
LOG.info("External Windows command received")
@Suppress("RAW_RUN_BLOCKING")
runBlocking(Dispatchers.Default) {
val result = handleExternalCommand(args.asList(), currentDirectory)
try {
result.future.await().exitCode
}
catch (t: Throwable) {
LOG.error(t)
AppExitCodes.ACTIVATE_ERROR
}
}
}
ApplicationManager.getApplication().messageBus.simpleConnect().subscribe(AppLifecycleListener.TOPIC, object : AppLifecycleListener {
override fun appWillBeClosed(isRestart: Boolean) {
addExternalInstanceListener {
CompletableDeferred(CliResult(AppExitCodes.ACTIVATE_DISPOSING, IdeBundle.message("activation.shutting.down")))
}
EXTERNAL_LISTENER = BiFunction { _, _ -> AppExitCodes.ACTIVATE_DISPOSING }
}
})
}

View File

@@ -3,16 +3,21 @@
package com.intellij.platform.ide.bootstrap
import com.intellij.BundleBase
import com.intellij.diagnostic.*
import com.intellij.ide.*
import com.intellij.ide.bootstrap.*
import com.intellij.diagnostic.LoadingState
import com.intellij.ide.BootstrapBundle
import com.intellij.ide.CliResult
import com.intellij.ide.IdeBundle
import com.intellij.ide.bootstrap.InitAppContext
import com.intellij.ide.plugins.PluginManagerCore
import com.intellij.idea.*
import com.intellij.idea.AppExitCodes
import com.intellij.idea.AppMode
import com.intellij.idea.LoggerFactory
import com.intellij.jna.JnaLoader
import com.intellij.openapi.application.*
import com.intellij.openapi.application.ex.ApplicationInfoEx
import com.intellij.openapi.application.ex.ApplicationManagerEx
import com.intellij.openapi.application.impl.*
import com.intellij.openapi.application.impl.ApplicationImpl
import com.intellij.openapi.application.impl.ApplicationInfoImpl
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.diagnostic.getOrLogException
import com.intellij.openapi.diagnostic.logger
@@ -25,7 +30,8 @@ import com.intellij.ui.mac.initMacApplication
import com.intellij.ui.mac.screenmenu.Menu
import com.intellij.ui.scale.JBUIScale
import com.intellij.ui.svg.SvgCacheManager
import com.intellij.util.*
import com.intellij.util.EnvironmentUtil
import com.intellij.util.Java11Shim
import com.intellij.util.lang.ZipFilePool
import com.jetbrains.JBR
import kotlinx.coroutines.*
@@ -39,10 +45,9 @@ import java.nio.file.Path
import java.nio.file.StandardOpenOption
import java.time.format.DateTimeFormatter
import java.util.*
import java.util.concurrent.*
import java.util.concurrent.ForkJoinPool
import java.util.concurrent.atomic.AtomicReference
import java.util.function.BiConsumer
import java.util.function.BiFunction
import java.util.logging.ConsoleHandler
import java.util.logging.Level
import kotlin.system.exitProcess
@@ -50,18 +55,6 @@ import kotlin.system.exitProcess
internal const val IDE_STARTED: String = "------------------------------------------------------ IDE STARTED ------------------------------------------------------"
private const val IDE_SHUTDOWN = "------------------------------------------------------ IDE SHUTDOWN ------------------------------------------------------"
/**
* A name of an environment variable that will be set by the Windows launcher and will contain the working directory the
* IDE was started with.
*
* This is necessary on Windows because the launcher needs to change the current directory for the JVM to load
* properly; see the details in WindowsLauncher.cpp.
*/
const val LAUNCHER_INITIAL_DIRECTORY_ENV_VAR: String = "IDEA_INITIAL_DIRECTORY"
@JvmField
internal var EXTERNAL_LISTENER: BiFunction<String, Array<String>, Int> = BiFunction { _, _ -> AppExitCodes.ACTIVATE_NOT_INITIALIZED }
private const val IDEA_CLASS_BEFORE_APPLICATION_PROPERTY = "idea.class.before.app"
private const val DISABLE_IMPLICIT_READ_ON_EDT_PROPERTY = "idea.disable.implicit.read.on.edt"
private const val MAGIC_MAC_PATH = "/AppTranslocation/"
@@ -367,10 +360,6 @@ private fun CoroutineScope.scheduleLoadSystemLibsAndLogInfoAndInitMacApp(
}
}
fun processWindowsLauncherCommandLine(currentDirectory: String, args: Array<String>): Int {
return EXTERNAL_LISTENER.apply(currentDirectory, args)
}
@get:Internal
val isImplicitReadOnEDTDisabled: Boolean
get() = "false" != System.getProperty(DISABLE_IMPLICIT_READ_ON_EDT_PROPERTY)
@@ -496,7 +485,7 @@ private suspend fun lockSystemDirs(args: List<String>) {
}
try {
val currentDir = Path.of(System.getenv(LAUNCHER_INITIAL_DIRECTORY_ENV_VAR) ?: "").toAbsolutePath().normalize()
val currentDir = Path.of("").toAbsolutePath().normalize()
val result = withContext(Dispatchers.IO) { directoryLock.lockOrActivate(currentDir, args) }
if (result == null) {
ShutDownTracker.getInstance().registerShutdownTask {