Compose setup

This commit is contained in:
Jakub Senohrabek 2025-05-20 16:24:04 +02:00
parent 3bc8732088
commit ea305cb70a
7 changed files with 62 additions and 11 deletions

View File

@ -5,6 +5,7 @@
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="jbr-17" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />

View File

@ -9,6 +9,7 @@ plugins {
alias(libs.plugins.changelog) // Gradle Changelog Plugin alias(libs.plugins.changelog) // Gradle Changelog Plugin
alias(libs.plugins.qodana) // Gradle Qodana Plugin alias(libs.plugins.qodana) // Gradle Qodana Plugin
alias(libs.plugins.kover) // Gradle Kover Plugin alias(libs.plugins.kover) // Gradle Kover Plugin
alias(libs.plugins.composeCompiler) // Gradle Compose Compiler Plugin
} }
group = providers.gradleProperty("pluginGroup").get() group = providers.gradleProperty("pluginGroup").get()
@ -38,6 +39,21 @@ dependencies {
intellijPlatform { intellijPlatform {
create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion")) create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion"))
// Compose support dependencies
bundledModules(
"intellij.libraries.skiko",
"intellij.libraries.compose.foundation.desktop",
"intellij.platform.jewel.foundation",
"intellij.platform.jewel.ui",
"intellij.platform.jewel.ideLafBridge",
"intellij.platform.jewel.markdown.core",
"intellij.platform.jewel.markdown.ideLafBridgeStyling",
"intellij.platform.jewel.markdown.extensions.gfmTables",
"intellij.platform.jewel.markdown.extensions.gfmStrikethrough",
"intellij.platform.jewel.markdown.extensions.gfmAlerts",
//"intellij.platform.jewel.markdown.extensions.autolink", // Not available in 2025.1.1
)
// Plugin Dependencies. Uses `platformBundledPlugins` property from the gradle.properties file for bundled IntelliJ Platform plugins. // Plugin Dependencies. Uses `platformBundledPlugins` property from the gradle.properties file for bundled IntelliJ Platform plugins.
bundledPlugins(providers.gradleProperty("platformBundledPlugins").map { it.split(',') }) bundledPlugins(providers.gradleProperty("platformBundledPlugins").map { it.split(',') })

View File

@ -7,12 +7,12 @@ pluginRepositoryUrl = https://github.com/JetBrains/intellij-platform-plugin-temp
pluginVersion = 2.1.0 pluginVersion = 2.1.0
# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
pluginSinceBuild = 242 pluginSinceBuild = 251
pluginUntilBuild = 252.* pluginUntilBuild = 252.*
# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension # IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension
platformType = IC platformType = IC
platformVersion = 2024.2.5 platformVersion = 2025.1.1
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
# Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP # Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP

View File

@ -20,3 +20,4 @@ intelliJPlatform = { id = "org.jetbrains.intellij.platform", version.ref = "inte
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" }
qodana = { id = "org.jetbrains.qodana", version.ref = "qodana" } qodana = { id = "org.jetbrains.qodana", version.ref = "qodana" }
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }

View File

@ -1,5 +1,19 @@
package org.jetbrains.plugins.template.toolWindow package org.jetbrains.plugins.template.toolWindow
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.intellij.openapi.components.service import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.diagnostic.thisLogger
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
@ -8,6 +22,9 @@ import com.intellij.openapi.wm.ToolWindowFactory
import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBLabel
import com.intellij.ui.components.JBPanel import com.intellij.ui.components.JBPanel
import com.intellij.ui.content.ContentFactory import com.intellij.ui.content.ContentFactory
import org.jetbrains.jewel.bridge.JewelComposePanel
import org.jetbrains.jewel.ui.component.DefaultButton
import org.jetbrains.jewel.ui.component.Text
import org.jetbrains.plugins.template.MyBundle import org.jetbrains.plugins.template.MyBundle
import org.jetbrains.plugins.template.services.MyProjectService import org.jetbrains.plugins.template.services.MyProjectService
import javax.swing.JButton import javax.swing.JButton
@ -31,15 +48,17 @@ class MyToolWindowFactory : ToolWindowFactory {
private val service = toolWindow.project.service<MyProjectService>() private val service = toolWindow.project.service<MyProjectService>()
fun getContent() = JBPanel<JBPanel<*>>().apply { fun getContent() = JewelComposePanel {
val label = JBLabel(MyBundle.message("randomLabel", "?")) Column(Modifier.fillMaxWidth().padding(16.dp)) {
var param by remember { mutableStateOf("?") }
add(label) Text(MyBundle.message("randomLabel", param))
add(JButton(MyBundle.message("shuffle")).apply { Spacer(Modifier.height(8.dp))
addActionListener { DefaultButton(onClick = {
label.text = MyBundle.message("randomLabel", service.getRandomNumber()) param = service.getRandomNumber().toString()
} }) {
}) Text(MyBundle.message("shuffle"))
}
}
} }
} }
} }

View File

@ -4,7 +4,18 @@
<name>IntelliJ Platform Plugin Template</name> <name>IntelliJ Platform Plugin Template</name>
<vendor>JetBrains</vendor> <vendor>JetBrains</vendor>
<depends>com.intellij.modules.platform</depends> <dependencies>
<module name="intellij.libraries.skiko"></module>
<module name="intellij.libraries.compose.foundation.desktop"></module>
<module name="intellij.platform.jewel.foundation"></module>
<module name="intellij.platform.jewel.ui"></module>
<module name="intellij.platform.jewel.ideLafBridge"></module>
<module name="intellij.platform.jewel.markdown.core"></module>
<module name="intellij.platform.jewel.markdown.ideLafBridgeStyling"></module>
<module name="intellij.platform.jewel.markdown.extensions.gfmTables"></module>
<module name="intellij.platform.jewel.markdown.extensions.gfmStrikethrough"></module>
<module name="intellij.platform.jewel.markdown.extensions.gfmAlerts"></module>
</dependencies>
<resource-bundle>messages.MyBundle</resource-bundle> <resource-bundle>messages.MyBundle</resource-bundle>

View File

@ -1,3 +1,6 @@
projectService=Project service: {0} projectService=Project service: {0}
randomLabel=The random number is: {0} randomLabel=The random number is: {0}
shuffle=Shuffle shuffle=Shuffle
helloWorld=Hello world #{0}
increment=Moar
action.dev.sebastiano.jewel.ijplugin.demo.text=Jewel Demo Dialog