User: rednesto Date: 14 Jul 24 10:43 Revision: ccc0c772454386a91ec2b893cd9bc2671bf4d3a2 Summary: Merge branch '2023.2' into 2023.3 # Conflicts: # src/main/kotlin/insight/generation/ui/EventListenerWizard.kt TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9436&personal=false Index: build.gradle.kts =================================================================== --- build.gradle.kts (revision ee7b9aca652564ca47a6da9b2fc1912c5db56200) +++ build.gradle.kts (revision ccc0c772454386a91ec2b893cd9bc2671bf4d3a2) @@ -21,6 +21,7 @@ import org.cadixdev.gradle.licenser.header.HeaderStyle import org.cadixdev.gradle.licenser.tasks.LicenseUpdate import org.gradle.internal.jvm.Jvm +import org.jetbrains.changelog.Changelog import org.jetbrains.gradle.ext.settings import org.jetbrains.gradle.ext.taskTriggers import org.jetbrains.intellij.tasks.PrepareSandboxTask @@ -37,6 +38,7 @@ id("org.jetbrains.intellij") version "1.17.2" id("org.cadixdev.licenser") id("org.jlleitschuh.gradle.ktlint") version "10.3.0" + id("org.jetbrains.changelog") version "2.2.0" } val ideaVersionName: String by project @@ -72,6 +74,26 @@ archiveClassifier.set("gradle-tooling-extension") } +val templatesSourceSet: SourceSet = sourceSets.create("templates") { + resources { + srcDir("templates") + compileClasspath += sourceSets.main.get().output + } +} + +val templateSourceSets: List = (file("templates").listFiles() ?: emptyArray()).mapNotNull { file -> + if (file.isDirectory() && (file.listFiles() ?: emptyArray()).any { it.name.endsWith(".mcdev.template.json") }) { + sourceSets.create("templates-${file.name}") { + resources { + srcDir(file) + compileClasspath += sourceSets.main.get().output + } + } + } else { + null + } +} + val externalAnnotationsJar = tasks.register("externalAnnotationsJar") { from("externalAnnotations") destinationDirectory.set(layout.buildDirectory.dir("externalAnnotations")) @@ -83,15 +105,21 @@ maven("https://maven.fabricmc.net/") { content { includeModule("net.fabricmc", "mapping-io") + includeModule("net.fabricmc", "fabric-loader") } } mavenCentral() + maven("https://repo.spongepowered.org/maven/") } dependencies { // Add tools.jar for the JDI API implementation(files(Jvm.current().toolsJar)) + implementation(libs.mixinExtras.expressions) + testLibs(libs.mixinExtras.common) + implementation("org.ow2.asm:asm-util:9.3") + // Kotlin implementation(kotlin("stdlib-jdk8")) implementation(kotlin("reflect")) @@ -121,6 +149,7 @@ classifier = "shaded" } } + testLibs(libs.test.fabricloader) testLibs(libs.test.nbt) { artifact { extension = "nbt" @@ -166,6 +195,12 @@ attributes.attribute(filtered, true) } +changelog { + version = coreVersion + groups.empty() + path = "changelog.md" +} + intellij { // IntelliJ IDEA dependency version.set(providers.gradleProperty("ideaVersion")) @@ -178,6 +213,7 @@ "Kotlin", "org.toml.lang:$pluginTomlVersion", "ByteCodeViewer", + "org.intellij.intelliLang", "properties", // needed dependencies for unit tests "junit" @@ -191,6 +227,11 @@ sandboxDir.set(layout.projectDirectory.dir(".sandbox").toString()) } +tasks.patchPluginXml { + val changelog = project.changelog + changeNotes = changelog.render(Changelog.OutputType.HTML) +} + tasks.publishPlugin { // Build numbers are used for properties["buildNumber"]?.let { buildNumber -> @@ -343,8 +384,14 @@ val generateLangLexer by lexer("LangLexer", "com/demonwav/mcdev/translations/lang/gen") val generateLangParser by parser("LangParser", "com/demonwav/mcdev/translations/lang/gen") -val generateTranslationTemplateLexer by lexer("TranslationTemplateLexer", "com/demonwav/mcdev/translations/lang/gen") +val generateMEExpressionLexer by lexer("MEExpressionLexer", "com/demonwav/mcdev/platform/mixin/expression/gen") +val generateMEExpressionParser by parser("MEExpressionParser", "com/demonwav/mcdev/platform/mixin/expression/gen") +val generateTranslationTemplateLexer by lexer( + "TranslationTemplateLexer", + "com/demonwav/mcdev/translations/template/gen" +) + val generate by tasks.registering { group = "minecraft" description = "Generates sources needed to compile the plugin." @@ -358,6 +405,8 @@ generateNbttParser, generateLangLexer, generateLangParser, + generateMEExpressionLexer, + generateMEExpressionParser, generateTranslationTemplateLexer, ) } @@ -374,10 +423,15 @@ } tasks.withType { + pluginJar.set(tasks.jar.get().archiveFile) from(externalAnnotationsJar) { into("Minecraft Development/lib/resources") } + from("templates") { + exclude(".git") + into("Minecraft Development/lib/resources/builtin-templates") -} + } +} tasks.runIde { maxHeapSize = "4G" @@ -387,11 +441,19 @@ systemProperty("idea.debug.mode", "true") } // Set these properties to test different languages - // systemProperty("user.language", "en") - // systemProperty("user.country", "US") + // systemProperty("user.language", "fr") + // systemProperty("user.country", "FR") } tasks.buildSearchableOptions { // not working atm enabled = false } + +tasks.instrumentCode { + enabled = false +} + +tasks.instrumentedJar { + enabled = false +} Index: gradle.properties =================================================================== --- gradle.properties (revision ee7b9aca652564ca47a6da9b2fc1912c5db56200) +++ gradle.properties (revision ccc0c772454386a91ec2b893cd9bc2671bf4d3a2) @@ -24,7 +24,7 @@ ideaVersion = 2023.3 ideaVersionName = 2023.3 -coreVersion = 1.7.6 +coreVersion = 1.8.0 downloadIdeaSources = true pluginTomlVersion = 233.11799.172 Index: gradle/libs.versions.toml =================================================================== --- gradle/libs.versions.toml (revision ee7b9aca652564ca47a6da9b2fc1912c5db56200) +++ gradle/libs.versions.toml (revision ccc0c772454386a91ec2b893cd9bc2671bf4d3a2) @@ -11,6 +11,7 @@ coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" } mappingIo = "net.fabricmc:mapping-io:0.2.1" +mixinExtras-expressions = "io.github.llamalad7:mixinextras-expressions:0.0.1" # GrammarKit jflex-lib = "org.jetbrains.idea:jflex:1.7.0-b7f882a" @@ -33,12 +34,15 @@ test-mockJdk = "org.jetbrains.idea:mock-jdk:1.7-4d76c50" test-mixin = "org.spongepowered:mixin:0.8.5" test-spongeapi = "org.spongepowered:spongeapi:7.4.0" +test-fabricloader = "net.fabricmc:fabric-loader:0.15.11" test-nbt = "com.demonwav.mcdev:all-types-nbt:1.0" junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" } junit-entine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform" } +mixinExtras-common = "io.github.llamalad7:mixinextras-common:0.5.0-beta.1" + [bundles] coroutines = ["coroutines-swing"] asm = ["asm", "asm-tree", "asm-analysis"] Index: src/main/kotlin/insight/generation/ui/EventListenerWizard.kt =================================================================== --- src/main/kotlin/insight/generation/ui/EventListenerWizard.kt (revision ee7b9aca652564ca47a6da9b2fc1912c5db56200) +++ src/main/kotlin/insight/generation/ui/EventListenerWizard.kt (revision ccc0c772454386a91ec2b893cd9bc2671bf4d3a2) @@ -22,60 +22,62 @@ import com.intellij.ide.highlighter.JavaHighlightingColors import com.intellij.openapi.editor.ex.util.EditorUtil -import com.intellij.openapi.wm.ex.IdeFocusTraversalPolicy +import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.ui.JBColor -import com.intellij.uiDesigner.core.GridConstraints -import javax.swing.JLabel +import com.intellij.ui.dsl.builder.AlignX +import com.intellij.ui.dsl.builder.COLUMNS_LARGE +import com.intellij.ui.dsl.builder.bindText +import com.intellij.ui.dsl.builder.columns +import com.intellij.ui.dsl.builder.panel +import com.intellij.ui.dsl.builder.text import javax.swing.JPanel -import javax.swing.JSeparator -import javax.swing.JTextField class EventListenerWizard(panel: JPanel?, className: String, defaultListenerName: String) { - lateinit var panel: JPanel - private lateinit var classNameTextField: JTextField - private lateinit var listenerNameTextField: JTextField - private lateinit var publicVoidLabel: JLabel - private lateinit var contentPanel: JPanel - private lateinit var separator: JSeparator - init { - classNameTextField.font = EditorUtil.getEditorFont() - listenerNameTextField.font = EditorUtil.getEditorFont() - publicVoidLabel.font = EditorUtil.getEditorFont() + private val graph = PropertyGraph("EventListenerWizard graph") + + private val listenerNameProperty = graph.property(defaultListenerName) + val chosenClassName: String by listenerNameProperty + + val panel: JPanel by lazy { + panel { + row { + textField() + .text(className) + .align(AlignX.FILL) + .apply { + component.font = EditorUtil.getEditorFont() + component.isEditable = false + } + } + + row { + label("public void").apply { + component.font = EditorUtil.getEditorFont() - if (!JBColor.isBright()) { + if (!JBColor.isBright()) { - publicVoidLabel.foreground = JavaHighlightingColors.KEYWORD.defaultAttributes.foregroundColor + component.foreground = JavaHighlightingColors.KEYWORD.defaultAttributes.foregroundColor - } else { + } else { - publicVoidLabel.foreground = + component.foreground = - JavaHighlightingColors.KEYWORD.fallbackAttributeKey!!.defaultAttributes.foregroundColor - } + JavaHighlightingColors.KEYWORD.fallbackAttributeKey!!.defaultAttributes.foregroundColor + } - - if (panel != null) { - separator.isVisible = true - contentPanel.add(panel, innerContentPanelConstraints) - } + } - classNameTextField.text = className - listenerNameTextField.text = defaultListenerName - - IdeFocusTraversalPolicy.getPreferredFocusedComponent(listenerNameTextField).requestFocus() - listenerNameTextField.requestFocus() + textField() + .bindText(listenerNameProperty) + .columns(COLUMNS_LARGE) + .focused() + .apply { + component.font = EditorUtil.getEditorFont() - } + } + } - val chosenClassName: String - get() = listenerNameTextField.text + if (panel != null) { + separator() - companion object { - private val innerContentPanelConstraints = GridConstraints() - - init { - innerContentPanelConstraints.row = 0 - innerContentPanelConstraints.column = 0 - innerContentPanelConstraints.rowSpan = 1 - innerContentPanelConstraints.colSpan = 1 - innerContentPanelConstraints.anchor = GridConstraints.ANCHOR_CENTER - innerContentPanelConstraints.fill = GridConstraints.FILL_BOTH - innerContentPanelConstraints.hSizePolicy = GridConstraints.SIZEPOLICY_FIXED - innerContentPanelConstraints.vSizePolicy = GridConstraints.SIZEPOLICY_FIXED + row { + cell(panel) - } - } -} + } + } + } + } +}