diff --git a/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml b/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml
index 808be2780568..596cd8e501cf 100644
--- a/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml
+++ b/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml
@@ -32,7 +32,6 @@
-
diff --git a/plugins/devkit/devkit-core/src/requestHandlers/BuildHttpRequestHandler.kt b/plugins/devkit/devkit-core/src/requestHandlers/BuildHttpRequestHandler.kt
index 77c9b4dc15b7..1df3804516b7 100644
--- a/plugins/devkit/devkit-core/src/requestHandlers/BuildHttpRequestHandler.kt
+++ b/plugins/devkit/devkit-core/src/requestHandlers/BuildHttpRequestHandler.kt
@@ -1,4 +1,4 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
@file:Suppress("ReplaceGetOrSet")
package org.jetbrains.idea.devkit.requestHandlers
@@ -33,7 +33,6 @@ import kotlinx.coroutines.withContext
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationException
-import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import org.jetbrains.ide.HttpRequestHandler
@@ -47,11 +46,10 @@ private val LOG = logger()
/**
* Starts JPS build for targets passed in the content in JSON format (array of [BuildScopeDescription] objects).
*
- * Currently, it's enabled for 'intellij' project only, and can be used to build additional required modules when a developer runs a test or
+ * Currently, it's enabled for 'intellij' project only and can be used to build additional required modules when a developer runs a test or
* an application from the IDE.
*/
-@Suppress("unused")
-private class BuildHttpRequestHandler : HttpRequestHandler() {
+internal class BuildHttpRequestHandler : HttpRequestHandler() {
override fun isSupported(request: FullHttpRequest): Boolean {
return request.method() == HttpMethod.POST && request.uri().startsWith(PREFIX)
}
diff --git a/plugins/devkit/devkit-core/src/requestHandlers/CompileHttpRequestHandler.kt b/plugins/devkit/devkit-core/src/requestHandlers/CompileHttpRequestHandler.kt
deleted file mode 100644
index 71d2a3c46bff..000000000000
--- a/plugins/devkit/devkit-core/src/requestHandlers/CompileHttpRequestHandler.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-@file:Suppress("ReplaceGetOrSet")
-
-package org.jetbrains.idea.devkit.requestHandlers
-
-import com.github.benmanes.caffeine.cache.Caffeine
-import com.intellij.openapi.components.Service
-import com.intellij.openapi.components.service
-import com.intellij.openapi.diagnostic.logger
-import com.intellij.openapi.module.ModuleManager
-import com.intellij.openapi.project.IntelliJProjectUtil
-import com.intellij.openapi.project.ProjectManager
-import com.intellij.task.ProjectTaskManager
-import com.intellij.util.io.DigestUtil
-import io.netty.buffer.ByteBufUtil
-import io.netty.buffer.Unpooled
-import io.netty.channel.ChannelHandlerContext
-import io.netty.handler.codec.http.*
-import kotlinx.serialization.SerializationException
-import kotlinx.serialization.decodeFromByteArray
-import kotlinx.serialization.protobuf.ProtoBuf
-import org.jetbrains.ide.HttpRequestHandler
-import org.jetbrains.io.send
-import java.util.concurrent.TimeUnit
-
-private const val PREFIX = "/devkit/make"
-private val LOG = logger()
-
-@Service
-internal class CompileHttpRequestHandlerToken {
- // build of dev-mode make take a while, so, 15 minutes
- // (run configuration -> IDE make for configuration is started -> external process started to execute)
- private val tokens = Caffeine.newBuilder().expireAfterAccess(15, TimeUnit.MINUTES).build()
-
- fun acquireToken(): String {
- var token = tokens.asMap().keys.firstOrNull()
- if (token == null) {
- token = DigestUtil.randomToken()
- tokens.put(token, true)
- }
- return token
- }
-
- fun hasToken(token: String): Boolean = tokens.getIfPresent(token) == true
-}
-
-/**
- * Starts JPS build for targets passed in the content in JSON format (array of [BuildScopeDescription] objects).
- *
- * Currently, it's enabled for 'intellij' project only, and can be used to build additional required modules when a developer runs a test or
- * an application from the IDE.
- */
-@Suppress("unused")
-private class CompileHttpRequestHandler : HttpRequestHandler() {
- override fun isSupported(request: FullHttpRequest): Boolean {
- return request.method() == HttpMethod.POST && request.uri().startsWith(PREFIX)
- }
-
- @Suppress("OPT_IN_USAGE")
- override fun process(urlDecoder: QueryStringDecoder, request: FullHttpRequest, context: ChannelHandlerContext): Boolean {
- val channel = context.channel()
-
- val query = urlDecoder.parameters()
- val token = query.get("token")?.firstOrNull()
- if (token == null || !service().hasToken(token)) {
- HttpResponseStatus.FORBIDDEN.send(channel, request)
- return true
- }
-
- val projectHash = query.get("project-hash")?.firstOrNull()
- val project = ProjectManager.getInstance().findOpenProjectByHash(projectHash)
- if (project == null) {
- LOG.info("Project is not found (query=$query)")
- HttpResponseStatus.NOT_FOUND.send(channel, request)
- return true
- }
-
- if (!IntelliJProjectUtil.isIntelliJPlatformProject(project)) {
- LOG.info("Build requests are currently handled for 'intellij' project only, so request won't be processed (query=$query)")
- HttpResponseStatus.FORBIDDEN.send(channel, request)
- return true
- }
-
- val modules = try {
- ProtoBuf.decodeFromByteArray>(ByteBufUtil.getBytes(request.content()))
- }
- catch (e: SerializationException) {
- LOG.info(e)
- HttpResponseStatus.BAD_REQUEST.send(channel, request)
- return true
- }
-
- val projectTaskManager = ProjectTaskManager.getInstance(project)
- val moduleManager = ModuleManager.getInstance(project)
- val projectTask = projectTaskManager.createModulesBuildTask(
- /* modules = */ modules.map { moduleManager.findModuleByName(it) }.toTypedArray(),
- /* isIncrementalBuild = */ true,
- /* includeDependentModules = */ false,
- /* includeRuntimeDependencies = */ false,
- /* includeTests = */ false,
- )
- projectTaskManager.run(projectTask)
- .onSuccess { taskResult ->
- val content = Unpooled.copiedBuffer("{hasErrors: ${taskResult.hasErrors()}, isAborted: ${taskResult.isAborted}}", Charsets.UTF_8)
- val response = DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, content)
- response.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON)
- response.send(channel, request)
- }
- .onError { error ->
- HttpResponseStatus.INTERNAL_SERVER_ERROR.send(channel, request, description = "Build cancelled")
- LOG.warn(error)
- }
- return true
- }
-}
\ No newline at end of file
diff --git a/plugins/devkit/devkit-core/src/requestHandlers/HttpDebugListener.kt b/plugins/devkit/devkit-core/src/requestHandlers/HttpDebugListener.kt
index e2cd78ebbc37..e2a026a07ab1 100644
--- a/plugins/devkit/devkit-core/src/requestHandlers/HttpDebugListener.kt
+++ b/plugins/devkit/devkit-core/src/requestHandlers/HttpDebugListener.kt
@@ -1,4 +1,4 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.idea.devkit.requestHandlers
import com.intellij.debugger.impl.attach.JavaAttachDebuggerProvider
@@ -16,15 +16,12 @@ import org.jetbrains.ide.HttpRequestHandler
import org.jetbrains.io.send
import java.nio.charset.Charset
+private val LOG = Logger.getInstance(HttpDebugListener::class.java)
+
+@NonNls
+private const val PREFIX = "/debug/attachToTestProcess"
+
internal class HttpDebugListener : HttpRequestHandler() {
-
- companion object {
- @NonNls
- private const val PREFIX = "/debug/attachToTestProcess"
- }
-
- private val logger = Logger.getInstance(HttpDebugListener::class.java)
-
override fun isSupported(request: FullHttpRequest): Boolean {
return request.method() == HttpMethod.POST && request.uri().startsWith(PREFIX)
}
@@ -39,12 +36,12 @@ internal class HttpDebugListener : HttpRequestHandler() {
val port = contentLines[0]
val name = contentLines.getOrNull(1)
- logger.info("Debugger attach request to a test process by port '$port' as '$name'")
+ LOG.info("Debugger attach request to a test process by port '$port' as '$name'")
val projectHash = urlDecoder.parameters()["project-hash"]?.firstOrNull()
val project = findTargetProject(projectHash)
if (project == null) {
- logger.info("Suitable target project was not found")
+ LOG.info("Suitable target project was not found")
HttpResponseStatus.BAD_REQUEST.send(context.channel(), request)
return true
}
@@ -58,11 +55,11 @@ internal class HttpDebugListener : HttpRequestHandler() {
private fun findTargetProject(projectHash: String?): Project? {
if (projectHash != null) {
- logger.debug("Locating target project by hash '$projectHash'")
+ LOG.debug("Locating target project by hash '$projectHash'")
return ProjectManager.getInstance().findOpenProjectByHash(projectHash)
}
- logger.debug("project-hash parameter is not specified, locating target project by active test session")
+ LOG.debug("project-hash parameter is not specified, locating target project by active test session")
val project = ProjectManager.getInstance().openProjects.firstOrNull { project ->
IntelliJProjectUtil.isIntelliJPlatformProject(project) && ExecutionManager.getInstance(project).getRunningProcesses().any {
!it.isProcessTerminated
diff --git a/plugins/devkit/devkit-core/src/run/DevKitApplicationPatcher.kt b/plugins/devkit/devkit-core/src/run/DevKitApplicationPatcher.kt
index bf2a80d63ffa..4caabc125c71 100644
--- a/plugins/devkit/devkit-core/src/run/DevKitApplicationPatcher.kt
+++ b/plugins/devkit/devkit-core/src/run/DevKitApplicationPatcher.kt
@@ -1,14 +1,12 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.idea.devkit.run
-import com.intellij.compiler.options.MakeProjectStepBeforeRun
import com.intellij.execution.JavaRunConfigurationBase
import com.intellij.execution.RunConfigurationExtension
import com.intellij.execution.application.ApplicationConfiguration
import com.intellij.execution.configurations.*
import com.intellij.execution.scratch.JavaScratchConfiguration
import com.intellij.openapi.application.PathManager
-import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.module.impl.ModuleManagerEx
import com.intellij.openapi.project.IntelliJProjectUtil
@@ -24,8 +22,6 @@ import com.intellij.platform.ijent.community.buildConstants.MULTI_ROUTING_FILE_S
import com.intellij.util.PlatformUtils
import com.intellij.util.lang.UrlClassLoader
import com.intellij.util.system.CpuArch
-import org.jetbrains.ide.BuiltInServerManager
-import org.jetbrains.idea.devkit.requestHandlers.CompileHttpRequestHandlerToken
import org.jetbrains.idea.devkit.requestHandlers.passDataAboutBuiltInServer
import java.lang.ClassLoader.getSystemClassLoader
import java.net.URLClassLoader
@@ -78,15 +74,10 @@ internal class DevKitApplicationPatcher : RunConfigurationExtension() {
}
}
- val is17 = javaParameters.jdk?.versionString?.contains("17") == true
if (!vmParametersAsList.any { it.contains("CICompilerCount") || it.contains("TieredCompilation") }) {
vmParameters.addAll("-XX:CICompilerCount=2")
- if (!is17) {
- //vmParameters.addAll("-XX:-TieredCompilation")
- //vmParameters.addAll("-XX:+SegmentedCodeCache")
- vmParameters.addAll("-XX:+UnlockDiagnosticVMOptions")
- vmParameters.addAll("-XX:TieredOldPercentage=100000")
- }
+ vmParameters.addAll("-XX:+UnlockDiagnosticVMOptions")
+ vmParameters.addAll("-XX:TieredOldPercentage=100000")
}
vmParameters.addAll(
@@ -104,9 +95,7 @@ internal class DevKitApplicationPatcher : RunConfigurationExtension() {
if (vmParametersAsList.none { it.startsWith("-XX:JbrShrinkingGcMaxHeapFreeRatio=") }) {
vmParameters.add("-XX:JbrShrinkingGcMaxHeapFreeRatio=40")
}
- if (is17 && vmParametersAsList.none { it.startsWith("-XX:SoftRefLRUPolicyMSPerMB") }) {
- vmParameters.add("-XX:SoftRefLRUPolicyMSPerMB=50")
- }
+ vmParameters.add("-XX:SoftRefLRUPolicyMSPerMB=50")
if (vmParametersAsList.none { it.startsWith("-XX:ReservedCodeCacheSize") }) {
vmParameters.add("-XX:ReservedCodeCacheSize=512m")
}
@@ -120,7 +109,7 @@ internal class DevKitApplicationPatcher : RunConfigurationExtension() {
enableIjentDefaultFsProvider(project, vmParameters)
if (isDevBuild) {
- updateParametersForDevBuild(javaParameters, configuration, project)
+ updateParametersForDevBuild(javaParameters, configuration)
}
}
@@ -130,13 +119,8 @@ internal class DevKitApplicationPatcher : RunConfigurationExtension() {
}
}
-private fun updateParametersForDevBuild(javaParameters: JavaParameters, configuration: JavaRunConfigurationBase, project: Project) {
+private fun updateParametersForDevBuild(javaParameters: JavaParameters, configuration: JavaRunConfigurationBase) {
val vmParameters = javaParameters.vmParametersList
- if (configuration.beforeRunTasks.none { it.providerId === MakeProjectStepBeforeRun.ID }) {
- vmParameters.addProperty("compile.server.port", BuiltInServerManager.getInstance().port.toString())
- vmParameters.addProperty("compile.server.project", project.locationHash)
- vmParameters.addProperty("compile.server.token", service().acquireToken())
- }
var productClassifier = vmParameters.getPropertyValue("idea.platform.prefix")
productClassifier = when (productClassifier) {