User: kyle wood Date: 29 Mar 26 20:02 Revision: 90ec4b099575785984e30b731ff8b63b9aaf135e Summary: Updates for 2026.1 TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10456&personal=false Index: build.gradle.kts =================================================================== --- build.gradle.kts (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ build.gradle.kts (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -116,6 +116,7 @@ bundledPlugin("com.intellij.java") bundledPlugin("org.jetbrains.idea.maven") bundledPlugin("com.intellij.gradle") + bundledPlugin("org.jetbrains.idea.reposearch") bundledPlugin("org.intellij.groovy") bundledPlugin("ByteCodeViewer") bundledModule("intellij.platform.langInjection") Index: gradle.properties =================================================================== --- gradle.properties (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ gradle.properties (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ # # https://mcdev.io/ # -# Copyright (C) 2025 minecraft-dev +# Copyright (C) 2026 minecraft-dev # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published @@ -21,7 +21,7 @@ # suppress inspection "UnusedProperty" for whole file org.gradle.jvmargs=-Xmx1g -ideaVersionName = 2025.3 +ideaVersionName = 2026.1 coreVersion = 1.8.12 Index: gradle/libs.versions.toml =================================================================== --- gradle/libs.versions.toml (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ gradle/libs.versions.toml (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -1,6 +1,6 @@ [versions] # https://github.com/JetBrains/intellij-community/blob//.idea/libraries/kotlin_stdlib.xml -kotlin = "2.2.20" +kotlin = "2.3.20-RC2" # https://github.com/JetBrains/intellij-community/blob//.idea/libraries/kotlinx_coroutines_core.xml coroutines = "1.10.2" junit = "6.0.3" @@ -14,7 +14,7 @@ intellij-plugin-repository-rest-client = "2.0.50" # https://www.jetbrains.com/intellij-repository/snapshots or https://www.jetbrains.com/intellij-repository/releases/ # Search for com.jetbrains.intellij.idea -intellij-ide = "253.29346.138" +intellij-ide = "261.22158.277" # https://github.com/JetBrains/gradle-idea-ext-plugin idea-ext = "1.4.1" Index: src/main/kotlin/creator/buildsystem/maven-steps.kt =================================================================== --- src/main/kotlin/creator/buildsystem/maven-steps.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/creator/buildsystem/maven-steps.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -195,7 +195,7 @@ val templateConfig = mavenConfigFactory.createTemplateConfiguration(project) val runConfiguration = mavenConfigFactory.createConfiguration(runConfigName, templateConfig) as MavenRunConfiguration - runConfiguration.runnerParameters.goals.add(task) + runConfiguration.runnerParameters.goals = listOf(task) runConfiguration.runnerParameters.workingDirPath = context.projectDirectory.toString() runConfiguration.isAllowRunningInParallel = false Index: src/main/kotlin/creator/custom/types/GradlePluginSelectorCreatorProperty.kt =================================================================== --- src/main/kotlin/creator/custom/types/GradlePluginSelectorCreatorProperty.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/creator/custom/types/GradlePluginSelectorCreatorProperty.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -43,7 +43,7 @@ import com.intellij.ui.dsl.builder.bindSelected import com.intellij.ui.dsl.builder.bindText import com.intellij.util.ui.AsyncProcessIcon -import fleet.multiplatform.shims.ConcurrentHashMap +import java.util.concurrent.ConcurrentHashMap import java.util.function.Function import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch Index: src/main/kotlin/creator/step/AbstractReformatFilesStep.kt =================================================================== --- src/main/kotlin/creator/step/AbstractReformatFilesStep.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/creator/step/AbstractReformatFilesStep.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -50,7 +50,7 @@ val rootDir = VfsUtil.findFile(Path.of(context.projectFileDirectory), true) ?: return val psiManager = PsiManager.getInstance(project) - val files = ReadAction.compute, Throwable> { + val files = ReadAction.computeBlocking, Throwable> { filesToReformat.mapNotNull { path -> VfsUtil.findRelativeFile(rootDir, *path.split('/').toTypedArray())?.let(psiManager::findFile) }.toTypedArray() Index: src/main/kotlin/facet/MinecraftFacet.kt =================================================================== --- src/main/kotlin/facet/MinecraftFacet.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/facet/MinecraftFacet.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -32,14 +32,12 @@ import com.google.common.collect.HashMultimap import com.intellij.facet.Facet import com.intellij.facet.FacetManager +import com.intellij.facet.FacetType import com.intellij.facet.FacetTypeId import com.intellij.facet.FacetTypeRegistry import com.intellij.ide.projectView.ProjectView -import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.module.Module -import com.intellij.openapi.module.ModuleGrouper -import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiClass @@ -220,14 +218,14 @@ fun findFile(path: String, type: SourceType): VirtualFile? { try { return findFile0(path, type) - } catch (ignored: RefreshRootsException) { + } catch (_: RefreshRootsException) { } updateRoots() return try { findFile0(path, type) - } catch (ignored: RefreshRootsException) { + } catch (_: RefreshRootsException) { // Well we tried our best null } @@ -261,32 +259,6 @@ fun getInstance(module: Module) = FacetManager.getInstance(module).getFacetByType(ID) - fun getChildInstances(module: Module) = runReadAction run@{ - val instance = getInstance(module) - if (instance != null) { - return@run setOf(instance) - } - - val project = module.project - val manager = ModuleManager.getInstance(project) - val grouper = ModuleGrouper.instanceFor(project) - - val result = mutableSetOf() - - val modulePath = grouper.getModuleAsGroupPath(module) ?: return@run result - - for (m in manager.modules) { - val path = grouper.getGroupPath(m) - if (modulePath != path) { - continue - } - - val facet = getInstance(m) ?: continue - result.add(facet) - } - return@run result - } - fun getInstance(module: Module, type: AbstractModuleType) = getInstance(module)?.getModuleOfType(type) Index: src/main/kotlin/insight/generation/EventGenHelper.kt =================================================================== --- src/main/kotlin/insight/generation/EventGenHelper.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/insight/generation/EventGenHelper.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -33,6 +33,7 @@ import com.intellij.psi.PsiFile import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.util.parentOfType +import org.jetbrains.kotlin.K1Deprecation import org.jetbrains.kotlin.analysis.api.KaIdeApi import org.jetbrains.kotlin.idea.base.analysis.api.utils.shortenReferences import org.jetbrains.kotlin.idea.base.analysis.api.utils.shortenReferencesInRange @@ -114,7 +115,7 @@ val entry = factory.createSuperTypeEntry(fqn) val insertedEntry = ktClass.addSuperTypeListEntry(entry) when (KotlinPluginModeProvider.currentPluginMode) { - KotlinPluginMode.K1 -> ShortenReferences.DEFAULT.process(insertedEntry) + KotlinPluginMode.K1 -> @OptIn(K1Deprecation::class) ShortenReferences.DEFAULT.process(insertedEntry) // TODO find a non-internal alternative to this... KotlinPluginMode.K2 -> @OptIn(KaIdeApi::class) shortenReferences(insertedEntry) } @@ -128,7 +129,7 @@ val marker = JvmEventGenHelper.doReformat(project, file, startOffset, endOffset) ?: return when (KotlinPluginModeProvider.currentPluginMode) { - KotlinPluginMode.K1 -> ShortenReferences.DEFAULT.process(file, marker.startOffset, marker.endOffset) + KotlinPluginMode.K1 -> @OptIn(K1Deprecation::class) ShortenReferences.DEFAULT.process(file, marker.startOffset, marker.endOffset) // TODO find a non-internal alternative to this... KotlinPluginMode.K2 -> @OptIn(KaIdeApi::class) shortenReferencesInRange(file, marker.textRange) } Index: src/main/kotlin/platform/fabric/reference/ResourceFileReference.kt =================================================================== --- src/main/kotlin/platform/fabric/reference/ResourceFileReference.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/fabric/reference/ResourceFileReference.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -27,7 +27,7 @@ import com.demonwav.mcdev.util.mapFirstNotNull import com.demonwav.mcdev.util.reference.InspectionReference import com.intellij.json.psi.JsonStringLiteral -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.module.ModuleUtilCore @@ -98,7 +98,7 @@ } val variants = mutableListOf() - runReadAction { + runReadActionBlocking { val relevantModules = getRelevantModules() val relevantRootTypes = mutableSetOf(JavaResourceRootType.RESOURCE) Index: src/main/kotlin/platform/mcp/ct/CtCompletionContributor.kt =================================================================== --- src/main/kotlin/platform/mcp/ct/CtCompletionContributor.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mcp/ct/CtCompletionContributor.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -32,7 +32,7 @@ import com.intellij.codeInsight.completion.CompletionType import com.intellij.codeInsight.completion.InsertionContext import com.intellij.codeInsight.lookup.LookupElementBuilder -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.patterns.PlatformPatterns import com.intellij.psi.PsiDocumentManager import com.intellij.psi.TokenType @@ -61,7 +61,7 @@ context.document.insertString(context.editor.caretModel.offset, " ") context.editor.caretModel.moveCaretRelatively(1, 0, false, false, false) context.setLaterRunnable { - runReadAction { + runReadActionBlocking { CodeCompletionHandlerBase.createHandler(CompletionType.BASIC) .invokeCompletion(context.project, context.editor) } Index: src/main/kotlin/platform/mcp/vanillagradle/VanillaGradleProjectResolverExtension.kt =================================================================== --- src/main/kotlin/platform/mcp/vanillagradle/VanillaGradleProjectResolverExtension.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mcp/vanillagradle/VanillaGradleProjectResolverExtension.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -21,7 +21,7 @@ package com.demonwav.mcdev.platform.mcp.vanillagradle import com.demonwav.mcdev.platform.mcp.gradle.tooling.vanillagradle.VanillaGradleModel -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.openapi.externalSystem.model.DataNode import com.intellij.openapi.externalSystem.model.project.ModuleData import org.gradle.tooling.model.idea.IdeaModule @@ -35,7 +35,7 @@ override fun getToolingExtensionsClasses() = extraProjectModelClasses override fun populateModuleExtraModels(gradleModule: IdeaModule, ideModule: DataNode) { - val vgData = runReadAction { + val vgData = runReadActionBlocking { resolverCtx.getExtraProject(gradleModule, VanillaGradleModel::class.java) } if (vgData != null && vgData.hasVanillaGradle()) { Index: src/main/kotlin/platform/mixin/action/FindMixinsAction.kt =================================================================== --- src/main/kotlin/platform/mixin/action/FindMixinsAction.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mixin/action/FindMixinsAction.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -33,7 +33,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys.PROJECT import com.intellij.openapi.actionSystem.CommonDataKeys.PSI_FILE import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.runBackgroundableTask import com.intellij.openapi.project.Project @@ -89,13 +89,13 @@ runBackgroundableTask("Searching for Mixins", project, true) run@{ indicator -> indicator.isIndeterminate = true - val classes = runReadAction { + val classes = runReadActionBlocking { if (!targetClass.isValid) { - return@runReadAction null + return@runReadActionBlocking null } val classes = findMixins(targetClass, project, indicator)?.filter(filter) - ?: return@runReadAction null + ?: return@runReadActionBlocking null when (classes.size) { 0 -> null Index: src/main/kotlin/platform/mixin/debug/MixinPositionManager.kt =================================================================== --- src/main/kotlin/platform/mixin/debug/MixinPositionManager.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mixin/debug/MixinPositionManager.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -33,7 +33,7 @@ import com.intellij.debugger.impl.DebuggerUtilsEx import com.intellij.debugger.requests.ClassPrepareRequestor import com.intellij.ide.highlighter.JavaFileType -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.openapi.fileTypes.FileType import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFileManager @@ -47,6 +47,7 @@ class MixinPositionManager(private val debugProcess: DebugProcess) : MultiRequestPositionManager { + @Deprecated("Deprecated in Java") override fun getAcceptedFileTypes(): Set = setOf(JavaFileType.INSTANCE) @Throws(NoDataException::class) @@ -106,7 +107,7 @@ } override fun getAllClasses(classPosition: SourcePosition): List { - return runReadAction { + return runReadActionBlocking { findMatchingClasses(classPosition) .flatMap { name -> debugProcess.virtualMachineProxy.classesByName(name).asSequence() } .toList() @@ -137,7 +138,7 @@ requestor: ClassPrepareRequestor, position: SourcePosition, ): List { - return runReadAction { + return runReadActionBlocking { findMatchingClasses(position) .mapNotNull { name -> debugProcess.requestsManager.createClassPrepareRequest(requestor, name) } .toList() Index: src/main/kotlin/platform/mixin/expression/MEExpressionCompletionContributor.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/MEExpressionCompletionContributor.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mixin/expression/MEExpressionCompletionContributor.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -126,7 +126,7 @@ BasicExpressionCompletionContributor.createKeywordLookupItem(parameters.position, keyword.name) if (keyword.tailType != TailTypes.noneType()) { lookupItem = object : TailTypeDecorator(lookupItem) { - override fun computeTailType(context: InsertionContext?) = keyword.tailType + override fun computeTailType(context: InsertionContext) = keyword.tailType } } lookupItem Index: src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -1063,7 +1063,7 @@ ) private fun LookupElement.withTail(tailType: TailType?) = object : TailTypeDecorator(this) { - override fun computeTailType(context: InsertionContext?) = tailType + override fun computeTailType(context: InsertionContext) = tailType } private fun LookupElementBuilder.withDefinition(id: String, definitionValue: String) = Index: src/main/kotlin/platform/mixin/expression/gui/FlowStrings.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/gui/FlowStrings.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mixin/expression/gui/FlowStrings.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -128,7 +128,7 @@ if (location.opcode in Opcodes.ISTORE..Opcodes.ASTORE) { location = location.next } - val localName = ReadAction.compute<_, Nothing> { + val localName = ReadAction.computeBlocking<_, Nothing> { runCatching { LocalVariables.getLocalVariableAt(project, clazz, method, location, index) }.getOrNull() Index: src/main/kotlin/platform/mixin/search/MixinSoftImplementMethodSuperSearcher.kt =================================================================== --- src/main/kotlin/platform/mixin/search/MixinSoftImplementMethodSuperSearcher.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/mixin/search/MixinSoftImplementMethodSuperSearcher.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -21,7 +21,7 @@ package com.demonwav.mcdev.platform.mixin.search import com.demonwav.mcdev.platform.mixin.util.forEachSoftImplementedMethods -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.psi.CommonClassNames import com.intellij.psi.PsiModifier import com.intellij.psi.search.searches.SuperMethodsSearch @@ -46,7 +46,7 @@ // This is very simple and probably doesn't handle all cases // Right now we simply check for @Implements annotation on the class and look // for a similar method in the interface - runReadAction run@{ + runReadActionBlocking run@{ if (!method.name.contains('$') || method.hasModifierProperty(PsiModifier.STATIC)) { return@run true } Index: src/main/kotlin/platform/sponge/inspection/SpongeInjectionInspection.kt =================================================================== --- src/main/kotlin/platform/sponge/inspection/SpongeInjectionInspection.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/platform/sponge/inspection/SpongeInjectionInspection.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -38,6 +38,7 @@ import com.intellij.codeInspection.ProblemDescriptor import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder +import com.intellij.codeInspection.options.OptPane import com.intellij.ide.util.PackageUtil import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.module.Module @@ -59,17 +60,12 @@ import com.intellij.psi.createSmartPointer import com.intellij.psi.impl.source.PsiClassReferenceType import com.siyeh.ig.BaseInspection -import com.siyeh.ig.BaseInspection.formatString -import com.siyeh.ig.ui.UiUtils -import javax.swing.JComponent import org.jdom.Element class SpongeInjectionInspection : AbstractBaseJavaLocalInspectionTool() { - private val injectableTypesList = Const.defaultInjectableTypes.toMutableList() - @JvmField - var injectableTypes: String = Const.serializedDefaultInjectableTypes + var injectableTypesList = Const.defaultInjectableTypes.toMutableList() override fun getStaticDescription() = "Invalid @Inject usage in Sponge plugin class." @@ -358,8 +354,6 @@ "org.bstats.sponge.MetricsLite2.Factory", "org.bstats.sponge.Metrics2.Factory", ) - - val serializedDefaultInjectableTypes: String = formatString(defaultInjectableTypes) } class RemoveAnnotationParameters(annotation: PsiAnnotation, val txt: String) : @@ -468,28 +462,23 @@ } } - override fun createOptionsPanel(): JComponent? { - val chooserList = UiUtils.createTreeClassChooserList( - injectableTypesList, - "Injectable types", - "Choose Injectable Type", + override fun getOptionsPane(): OptPane = OptPane.pane( + OptPane.stringList("injectableTypesList", "Injectable types") - ) + ) - UiUtils.setComponentSize(chooserList, 7, 25) - return chooserList - } override fun readSettings(node: Element) { + val hasNewFormat = node.getChildren("option").any { it.getAttributeValue("name") == "injectableTypesList" } super.readSettings(node) - BaseInspection.parseString(injectableTypes, injectableTypesList) + if (!hasNewFormat) { + for (child in node.getChildren("option")) { + if (child.getAttributeValue("name") == "injectableTypes") { + val value = child.getAttributeValue("value") + if (!value.isNullOrEmpty()) { + injectableTypesList.clear() + BaseInspection.parseString(value, injectableTypesList) - } + } - - override fun writeSettings(node: Element) { - injectableTypes = if (injectableTypesList.isEmpty()) { - Const.serializedDefaultInjectableTypes - } else { - formatString(injectableTypesList) - } + } - - super.writeSettings(node) - } -} + } + } + } +} Index: src/main/kotlin/translations/identification/TranslationExternalAnnotationsArtifactsResolver.kt =================================================================== --- src/main/kotlin/translations/identification/TranslationExternalAnnotationsArtifactsResolver.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/translations/identification/TranslationExternalAnnotationsArtifactsResolver.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -26,7 +26,7 @@ import com.intellij.codeInsight.externalAnnotation.location.AnnotationsLocation import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.PathManager -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project @@ -119,7 +119,7 @@ return false } - val annotationsPath = runReadAction { findAnnotationsPath(false) ?: findAnnotationsPath(true) } + val annotationsPath = runReadActionBlocking { findAnnotationsPath(false) ?: findAnnotationsPath(true) } ?: return false val editor = ExistingLibraryEditor(library, null) Index: src/main/kotlin/translations/reference/TranslationReferenceSearch.kt =================================================================== --- src/main/kotlin/translations/reference/TranslationReferenceSearch.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/translations/reference/TranslationReferenceSearch.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -3,7 +3,7 @@ * * https://mcdev.io/ * - * Copyright (C) 2025 minecraft-dev + * Copyright (C) 2026 minecraft-dev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -23,7 +23,7 @@ import com.demonwav.mcdev.translations.TranslationFiles import com.intellij.find.FindModel import com.intellij.find.impl.FindInProjectUtil -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.psi.PsiElement import com.intellij.psi.PsiReference import com.intellij.psi.search.searches.ReferencesSearch @@ -41,7 +41,7 @@ return true } - val key = runReadAction { + val key = runReadActionBlocking { val searchElement = parameters.elementToSearch.takeIf(PsiElement::isValid) searchElement?.let(TranslationFiles::toTranslation)?.key } ?: return true Index: src/main/kotlin/util/utils.kt =================================================================== --- src/main/kotlin/util/utils.kt (revision b6627179d3f414bcc79c538c98d7bcca6453421f) +++ src/main/kotlin/util/utils.kt (revision 90ec4b099575785984e30b731ff8b63b9aaf135e) @@ -26,7 +26,7 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ModalityState import com.intellij.openapi.application.WriteAction -import com.intellij.openapi.application.runReadAction +import com.intellij.openapi.application.runReadActionBlocking import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.progress.ProcessCanceledException @@ -118,7 +118,7 @@ fun runReadActionAsync(runnable: () -> T): Promise { return runAsync { - runReadAction(runnable) + runReadActionBlocking(runnable) } }