[devkit] IJPL-179707 Move threadingModelHelper to dedicated module intellij.devkit.threading

GitOrigin-RevId: 1a7bee6fe9b4f58aa8726e9a2d04b0602f617ab8
This commit is contained in:
Yuriy Artamonov
2026-01-02 11:50:16 +00:00
committed by intellij-monorepo-bot
parent ba388d9687
commit fff8af55a5
29 changed files with 197 additions and 108 deletions
+1
View File
@@ -405,6 +405,7 @@
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/intellij.devkit.stacktrace/intellij.devkit.stacktrace.iml" filepath="$PROJECT_DIR$/plugins/devkit/intellij.devkit.stacktrace/intellij.devkit.stacktrace.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/devkit-tests/intellij.devkit.testFramework.iml" filepath="$PROJECT_DIR$/plugins/devkit/devkit-tests/intellij.devkit.testFramework.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/intellij.devkit.themes/intellij.devkit.themes.iml" filepath="$PROJECT_DIR$/plugins/devkit/intellij.devkit.themes/intellij.devkit.themes.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/intellij.devkit.threading/intellij.devkit.threading.iml" filepath="$PROJECT_DIR$/plugins/devkit/intellij.devkit.threading/intellij.devkit.threading.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/intellij.devkit.uiDesigner/intellij.devkit.uiDesigner.iml" filepath="$PROJECT_DIR$/plugins/devkit/intellij.devkit.uiDesigner/intellij.devkit.uiDesigner.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/intellij.devkit.workspaceModel/intellij.devkit.workspaceModel.iml" filepath="$PROJECT_DIR$/plugins/devkit/intellij.devkit.workspaceModel/intellij.devkit.workspaceModel.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/devkit/intellij.devkit.workspaceModel/k1/intellij.devkit.workspaceModel.k1.iml" filepath="$PROJECT_DIR$/plugins/devkit/intellij.devkit.workspaceModel/k1/intellij.devkit.workspaceModel.k1.iml" />
+1
View File
@@ -919,6 +919,7 @@ plugins/devkit/intellij.devkit.scaffolding
plugins/devkit/intellij.devkit.smartupdate
plugins/devkit/intellij.devkit.stacktrace
plugins/devkit/intellij.devkit.themes
plugins/devkit/intellij.devkit.threading
plugins/devkit/intellij.devkit.uiDesigner
plugins/devkit/intellij.devkit.workspaceModel
plugins/devkit/intellij.devkit.workspaceModel/k1
@@ -18,5 +18,4 @@ public final class DevkitComposeIcons {
/** 16x16 */ public static final @NotNull Icon ComposeToolWindow = load("icons/composeToolWindow.svg", 542147654, 2);
/** 16x16 */ public static final @NotNull Icon Github = load("icons/github.svg", 2052536327, 2);
/** 16x16 */ public static final @NotNull Icon JewelToolWindow = load("icons/jewelToolWindow.svg", -219486260, 2);
/** 16x16 */ public static final @NotNull Icon LockReqs = load("icons/lock-reqs.svg", 1816243125, 2);
}
@@ -68,8 +68,6 @@
<action id="ComposeShowcase" class="com.intellij.devkit.compose.showcase.ComposeShowcaseAction"/>
<action id="JewelActionSystemTest" class="com.intellij.devkit.compose.demo.ActionSystemTestAction"/>
<action id="LockReqAnalysis" internal="true" class="com.intellij.devkit.compose.threadingModelHelper.LockReqAction"/>
<group id="ComposePreviewActions.Title" searchable="false">
<action id="ComposePreviewRefresh"
class="com.intellij.devkit.compose.preview.ComposePreviewRefreshAction"
@@ -67,10 +67,6 @@ action.ComposePreviewRefreshAuto.text=Refresh Automatically
action.ComposePreviewRefreshAuto.GoToAction.text=Refresh Compose UI Preview Automatically
action.ComposePreviewRefreshAuto.description=Toggles automatic refresh on changes in code
action.LockReqAnalysis.text=Analyze Lock Requirements
progress.title.analyzing.lock.requirements=Analyzing lock requirements
tab.title.locking.requirements=Locking Requirements
action.DevkitComposeHotReloadExecutorAction.text=Run with Compose Hot Reload
action.DevkitComposeHotReloadExecutorAction.description=Run with Compose Hot Reload
action.DevkitComposeHotReloadExecutorAction.text.0=Run ''{0}'' with Compose Hot Reload
@@ -1,10 +0,0 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper
import com.intellij.openapi.util.IconLoader
import javax.swing.Icon
object LockReqIcons {
@JvmField
val LockReqIcon: Icon = IconLoader.getIcon("/icons/lock-reqs.svg", LockReqIcons::class.java)
}
@@ -0,0 +1,41 @@
### auto-generated section `build intellij.devkit.threading` start
load("//build:compiler-options.bzl", "create_kotlinc_options")
load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup")
create_kotlinc_options(
name = "custom_threading",
opt_in = [
"androidx.compose.foundation.ExperimentalFoundationApi",
"kotlinx.coroutines.ExperimentalCoroutinesApi",
],
plugin_options = ["plugin:androidx.compose.compiler.plugins.kotlin:generateFunctionKeyMetaAnnotations=true"]
)
resourcegroup(
name = "threading_resources",
srcs = glob(["resources/**/*"]),
strip_prefix = "resources"
)
jvm_library(
name = "threading",
module_name = "intellij.devkit.threading",
visibility = ["//visibility:public"],
srcs = glob(["gen/**/*.kt", "gen/**/*.java", "src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True),
resources = [":threading_resources"],
kotlinc_opts = ":custom_threading",
deps = [
"@lib//:kotlin-stdlib",
"//platform/util:util-ui",
"//platform/core-api:core",
"//platform/editor-ui-api:editor-ui",
"//platform/platform-api:ide",
"//java/java-psi-api:psi",
"//platform/core-ui",
"//platform/compose",
"//plugins/devkit/devkit-core:core",
"//platform/analysis-api:analysis",
],
plugins = ["@lib//:compose-plugin"]
)
### auto-generated section `build intellij.devkit.threading` end
@@ -0,0 +1,18 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.threading.icons;
import com.intellij.ui.IconManager;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
/**
* NOTE THIS FILE IS AUTO-GENERATED
* DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead
*/
public final class DevkitThreadingIcons {
private static @NotNull Icon load(@NotNull String path, int cacheKey, int flags) {
return IconManager.getInstance().loadRasterizedIcon(path, DevkitThreadingIcons.class.getClassLoader(), cacheKey, flags);
}
/** 16x16 */ public static final @NotNull Icon LockRequirements = load("icons/lockRequirements.svg", 1608805900, 2);
}
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="kotlin-language" name="Kotlin">
<configuration version="5" platform="JVM 21" allPlatforms="JVM [21]" useProjectSettings="false">
<compilerSettings>
<option name="additionalArguments" value="-Xjvm-default=all -XXLanguage:+AllowEagerSupertypeAccessibilityChecks -opt-in=androidx.compose.foundation.ExperimentalFoundationApi -opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi -P plugin:androidx.compose.compiler.plugins.kotlin:generateFunctionKeyMetaAnnotations=true" />
</compilerSettings>
<compilerArguments>
<stringArguments>
<stringArg name="jvmTarget" arg="21" />
<stringArg name="apiVersion" arg="2.3" />
<stringArg name="languageVersion" arg="2.3" />
</stringArguments>
<arrayArguments>
<arrayArg name="pluginClasspaths">
<args>$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compose-compiler-plugin/2.3.0/kotlin-compose-compiler-plugin-2.3.0.jar</args>
</arrayArg>
</arrayArguments>
</compilerArguments>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="com.intellij.devkit.threading" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kotlin-stdlib" level="project" />
<orderEntry type="module" module-name="intellij.platform.util.ui" />
<orderEntry type="module" module-name="intellij.platform.core" />
<orderEntry type="module" module-name="intellij.platform.editor.ui" />
<orderEntry type="module" module-name="intellij.platform.ide" />
<orderEntry type="module" module-name="intellij.java.psi" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="module" module-name="intellij.platform.compose" />
<orderEntry type="module" module-name="intellij.devkit.core" />
<orderEntry type="module" module-name="intellij.platform.analysis" />
</component>
</module>

Before

Width:  |  Height:  |  Size: 708 B

After

Width:  |  Height:  |  Size: 708 B

@@ -0,0 +1,14 @@
<idea-plugin>
<dependencies>
<module name="intellij.devkit.core"/>
<module name="intellij.platform.compose"/>
</dependencies>
<resource-bundle>messages.DevkitThreadingBundle</resource-bundle>
<actions resource-bundle="messages.DevkitThreadingBundle">
<action id="LockReqAnalysis"
class="com.intellij.devkit.threading.threadingModelHelper.LockReqAction"
icon="com.intellij.devkit.threading.icons.DevkitThreadingIcons.LockRequirements"/>
</actions>
</idea-plugin>
@@ -0,0 +1,3 @@
action.LockReqAnalysis.text=Analyze Lock Requirements
progress.title.analyzing.lock.requirements=Analyzing lock requirements
tab.title.locking.requirements=Locking Requirements
@@ -0,0 +1,23 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.threading
import com.intellij.DynamicBundle
import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.PropertyKey
import java.util.function.Supplier
private const val BUNDLE = "messages.DevkitThreadingBundle"
internal object DevkitThreadingBundle {
private val instance = DynamicBundle(DevkitThreadingBundle::class.java, BUNDLE)
@JvmStatic
fun message(key: @PropertyKey(resourceBundle = BUNDLE) String, vararg params: Any?): @Nls String {
return instance.getMessage(key, *params)
}
@JvmStatic
fun messagePointer(@PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any?): Supplier<@Nls String> {
return instance.getLazyMessage(key, *params)
}
}
@@ -1,8 +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 com.intellij.devkit.compose.threadingModelHelper
package com.intellij.devkit.threading.threadingModelHelper
import com.intellij.devkit.compose.DevkitComposeBundle
import com.intellij.openapi.actionSystem.*
import com.intellij.devkit.threading.DevkitThreadingBundle
import com.intellij.devkit.threading.icons.DevkitThreadingIcons
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.application.EDT
import com.intellij.openapi.application.readAction
import com.intellij.openapi.components.service
@@ -17,11 +21,11 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.jetbrains.idea.devkit.threadingModelHelper.LockReqPsiOps
class LockReqAction : AnAction() {
private const val TOOLWINDOW_ID: String = "LockReqs"
companion object {
private const val TOOLWINDOW_ID: String = "LockReqs"
}
internal class LockReqAction : AnAction() {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
override fun actionPerformed(e: AnActionEvent) {
e.coroutineScope.launch(Dispatchers.Default) {
@@ -39,19 +43,16 @@ class LockReqAction : AnAction() {
toolWindow.activate { }
}
}
val target = readAction {
val psiFile = e.getData(CommonDataKeys.PSI_FILE) ?: return@readAction null
val element = LockReqPsiOps.forLanguage(psiFile.language).extractTargetElement(psiFile, editor.caretModel.offset)
?: return@readAction null
val smartPointerManager = SmartPointerManager.getInstance(project)
val element = LockReqPsiOps.forLanguage(psiFile.language).extractTargetElement(psiFile, editor.caretModel.offset) ?: return@readAction null
smartPointerManager.createSmartPsiElementPointer<PsiMethod>(element)
SmartPointerManager.getInstance(project).createSmartPsiElementPointer<PsiMethod>(element)
} ?: return@launch
val service = project.service<LockReqsService>()
service.analyzeMethod(target)
project.service<LockReqsService>().analyzeMethod(target)
}
}
@@ -61,9 +62,9 @@ class LockReqAction : AnAction() {
id = TOOLWINDOW_ID,
anchor = ToolWindowAnchor.BOTTOM,
component = null,
icon = LockReqIcons.LockReqIcon,
icon = DevkitThreadingIcons.LockRequirements,
contentFactory = LockReqsToolWindowFactory(),
stripeTitle = DevkitComposeBundle.messagePointer("tab.title.locking.requirements"),
stripeTitle = DevkitThreadingBundle.messagePointer("tab.title.locking.requirements"),
)
)
return toolWindow
@@ -71,7 +72,6 @@ class LockReqAction : AnAction() {
override fun update(e: AnActionEvent) {
e.presentation.isEnabledAndVisible = shouldBeEnabled(e)
e.presentation.icon = LockReqIcons.LockReqIcon
}
private fun shouldBeEnabled(e: AnActionEvent): Boolean {
@@ -79,6 +79,4 @@ class LockReqAction : AnAction() {
val caretOffset = e.getData(CommonDataKeys.EDITOR)?.caretModel?.offset ?: return false
return LockReqPsiOps.forLanguageOrNull(psiFile.language)?.extractTargetElement(psiFile, caretOffset) != null
}
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
}
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper
package com.intellij.devkit.threading.threadingModelHelper
import com.intellij.openapi.components.Service
import com.intellij.openapi.project.Project
@@ -9,7 +9,7 @@ import com.intellij.psi.SmartPsiElementPointer
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import com.intellij.devkit.compose.DevkitComposeBundle
import com.intellij.devkit.threading.DevkitThreadingBundle
import com.intellij.openapi.application.ApplicationManager
import org.jetbrains.idea.devkit.threadingModelHelper.AnalysisConfig
import org.jetbrains.idea.devkit.threadingModelHelper.AnalysisResult
@@ -17,9 +17,8 @@ import org.jetbrains.idea.devkit.threadingModelHelper.DefaultLockReqConsumer
import org.jetbrains.idea.devkit.threadingModelHelper.LOCK_REQUIREMENTS
import org.jetbrains.idea.devkit.threadingModelHelper.LockReqAnalyzerParallelBFS
@Service(Service.Level.PROJECT)
class LockReqsService(private val project: Project) {
internal class LockReqsService(private val project: Project) {
private var _currentResults by mutableStateOf<List<AnalysisResult?>>(emptyList())
val currentResults: List<AnalysisResult?>
@@ -28,7 +27,7 @@ class LockReqsService(private val project: Project) {
suspend fun analyzeMethod(methodPtr: SmartPsiElementPointer<PsiMethod>) {
val analyzer = LockReqAnalyzerParallelBFS()
val config = AnalysisConfig.forProject(project, LOCK_REQUIREMENTS)
withBackgroundProgress(project, DevkitComposeBundle.message("progress.title.analyzing.lock.requirements"), true) {
withBackgroundProgress(project, DevkitThreadingBundle.message("progress.title.analyzing.lock.requirements"), true) {
val consumer = DefaultLockReqConsumer(methodPtr) { snapshot ->
ApplicationManager.getApplication().invokeLater {
_currentResults = listOf(snapshot)
@@ -1,17 +1,17 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper
package com.intellij.devkit.threading.threadingModelHelper
import com.intellij.devkit.compose.threadingModelHelper.ui.LockReqsToolWindow
import com.intellij.devkit.threading.threadingModelHelper.ui.LockReqsToolWindow
import com.intellij.openapi.project.Project
import com.intellij.openapi.wm.ToolWindow
import com.intellij.openapi.wm.ToolWindowFactory
import com.intellij.ui.content.ContentFactory
import org.jetbrains.jewel.bridge.JewelComposePanel
import org.jetbrains.jewel.bridge.compose
class LockReqsToolWindowFactory : ToolWindowFactory {
internal class LockReqsToolWindowFactory : ToolWindowFactory {
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
val contentFactory = ContentFactory.getInstance()
val panel = JewelComposePanel { LockReqsToolWindow(project) }
val panel = compose { LockReqsToolWindow(project) }
val content = contentFactory.createContent(panel, null, false)
toolWindow.contentManager.addContent(content)
}
@@ -1,22 +1,18 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.ui.component.Icon
import org.jetbrains.jewel.ui.component.Text
import org.jetbrains.jewel.ui.icons.AllIconsKeys
@Composable
internal fun EmptyStateView() {
Box(
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.border
@@ -1,9 +1,9 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.runtime.Immutable
import org.jetbrains.idea.devkit.threadingModelHelper.ExecutionPath
import org.jetbrains.idea.devkit.threadingModelHelper.ConstraintType
import org.jetbrains.idea.devkit.threadingModelHelper.ExecutionPath
@Immutable
internal data class LockReqsViewState(
@@ -1,20 +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 com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import com.intellij.devkit.compose.threadingModelHelper.LockReqsService
import com.intellij.devkit.threading.threadingModelHelper.LockReqsService
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import org.jetbrains.idea.devkit.threadingModelHelper.AnalysisResult
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.border
@@ -12,8 +12,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import org.jetbrains.idea.devkit.threadingModelHelper.LockRequirement
import org.jetbrains.idea.devkit.threadingModelHelper.ConstraintType
import org.jetbrains.idea.devkit.threadingModelHelper.LockRequirement
import org.jetbrains.idea.devkit.threadingModelHelper.RequirementReason
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.ui.component.Icon
@@ -1,17 +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 com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import com.intellij.psi.PsiMethod
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.ui.component.Icon
import org.jetbrains.jewel.ui.component.Text
@@ -1,18 +1,9 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.runtime.Composable
@@ -25,16 +16,12 @@ import com.intellij.openapi.fileEditor.OpenFileDescriptor
import com.intellij.openapi.ide.CopyPasteManager
import com.intellij.openapi.project.Project
import com.intellij.util.ui.JBUI
import org.jetbrains.idea.devkit.threadingModelHelper.ExecutionPath
import org.jetbrains.idea.devkit.threadingModelHelper.ConstraintType
import org.jetbrains.idea.devkit.threadingModelHelper.ExecutionPath
import org.jetbrains.jewel.bridge.toComposeColor
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.ui.Orientation
import org.jetbrains.jewel.ui.component.DefaultButton
import org.jetbrains.jewel.ui.component.Divider
import org.jetbrains.jewel.ui.component.Icon
import org.jetbrains.jewel.ui.component.OutlinedButton
import org.jetbrains.jewel.ui.component.Text
import org.jetbrains.jewel.ui.component.*
import org.jetbrains.jewel.ui.icons.AllIconsKeys
import java.awt.datatransfer.StringSelection
@@ -1,13 +1,8 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
@@ -1,5 +1,5 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
@@ -1,12 +1,7 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.compose.threadingModelHelper.ui
package com.intellij.devkit.threading.threadingModelHelper.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+3
View File
@@ -38,6 +38,9 @@
- name: lib/modules/intellij.devkit.scaffolding.jar
contentModules:
- name: intellij.devkit.scaffolding
- name: lib/modules/intellij.devkit.threading.jar
contentModules:
- name: intellij.devkit.threading
- name: lib/modules/intellij.platform.jewel.samples.showcase.jar
contentModules:
- name: intellij.platform.jewel.samples.showcase
@@ -47,6 +47,7 @@
<module name="intellij.devkit.scaffolding"/>
<module name="intellij.devkit.modules"/>
<module name="intellij.devkit.mcp"/>
<module name="intellij.devkit.threading"/>
<module name="intellij.platform.jewel.samples.showcase"/>
</content>