Skip to content

Commit eaa630f

Browse files
committed
Merge branch '2023.3' into 2024.1
2 parents 0e680c6 + bb41432 commit eaa630f

File tree

14 files changed

+80
-73
lines changed

14 files changed

+80
-73
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ license {
287287
style["bnf"] = HeaderStyle.BLOCK_COMMENT.format
288288

289289
val endings = listOf("java", "kt", "kts", "groovy", "gradle.kts", "xml", "properties", "html", "flex", "bnf")
290+
exclude("META-INF/plugin.xml") // https://youtrack.jetbrains.com/issue/IDEA-345026
290291
include(endings.map { "**/*.$it" })
291292

292293
exclude("com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/*.java")

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ kotlin.code.style=official
2424
ideaVersion = 241.10840-EAP-CANDIDATE-SNAPSHOT
2525
ideaVersionName = 2024.1
2626

27-
coreVersion = 1.7.1
27+
coreVersion = 1.7.2
2828
downloadIdeaSources = true
2929

3030
pluginTomlVersion = 241.10840.7

src/main/kotlin/creator/MinecraftModuleBuilder.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import com.demonwav.mcdev.creator.buildsystem.BuildSystemPropertiesStep
2626
import com.demonwav.mcdev.creator.platformtype.PlatformTypeStep
2727
import com.demonwav.mcdev.creator.step.NewProjectWizardChainStep.Companion.nextStep
2828
import com.demonwav.mcdev.creator.step.TemplateOutdatedStep
29-
import com.demonwav.mcdev.platform.MinecraftModuleType
3029
import com.intellij.ide.projectWizard.ProjectSettingsStep
3130
import com.intellij.ide.util.projectWizard.WizardContext
3231
import com.intellij.ide.wizard.AbstractNewProjectWizardBuilder
@@ -37,9 +36,9 @@ import com.intellij.openapi.roots.ModifiableRootModel
3736

3837
class MinecraftModuleBuilder : AbstractNewProjectWizardBuilder() {
3938

40-
override fun getPresentableName() = MinecraftModuleType.NAME
39+
override fun getPresentableName() = "Minecraft"
4140
override fun getNodeIcon() = PlatformAssets.MINECRAFT_ICON
42-
override fun getGroupName() = MinecraftModuleType.NAME
41+
override fun getGroupName() = "Minecraft"
4342
override fun getBuilderId() = "MINECRAFT_MODULE"
4443
override fun getDescription() = MCDevBundle("creator.ui.create_minecraft_project")
4544

@@ -51,7 +50,7 @@ class MinecraftModuleBuilder : AbstractNewProjectWizardBuilder() {
5150
}
5251
}
5352

54-
override fun getParentGroup() = MinecraftModuleType.NAME
53+
override fun getParentGroup() = "Minecraft"
5554

5655
override fun createStep(context: WizardContext) = RootNewProjectWizardStep(context)
5756
.nextStep(::NewProjectWizardBaseStep)

src/main/kotlin/facet/MinecraftFacet.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import com.demonwav.mcdev.platform.AbstractModuleType
2727
import com.demonwav.mcdev.platform.PlatformType
2828
import com.demonwav.mcdev.util.SourceType
2929
import com.demonwav.mcdev.util.filterNotNull
30-
import com.demonwav.mcdev.util.invokeAndWait
3130
import com.demonwav.mcdev.util.mapFirstNotNull
3231
import com.google.common.collect.HashMultimap
3332
import com.intellij.facet.Facet
@@ -36,6 +35,7 @@ import com.intellij.facet.FacetTypeId
3635
import com.intellij.facet.FacetTypeRegistry
3736
import com.intellij.ide.projectView.ProjectView
3837
import com.intellij.openapi.application.runReadAction
38+
import com.intellij.openapi.application.runWriteAction
3939
import com.intellij.openapi.application.runWriteActionAndWait
4040
import com.intellij.openapi.module.Module
4141
import com.intellij.openapi.module.ModuleGrouper
@@ -77,9 +77,9 @@ class MinecraftFacet(
7777
roots.clear()
7878
}
7979

80-
fun refresh() {
80+
fun refresh() = runWriteActionAndWait {
8181
if (module.isDisposed) {
82-
return
82+
return@runWriteActionAndWait
8383
}
8484

8585
// Don't allow parent types with child types in auto detected set
@@ -122,9 +122,9 @@ class MinecraftFacet(
122122
ProjectView.getInstance(module.project).refresh()
123123
}
124124

125-
private fun updateRoots() = invokeAndWait {
125+
private fun updateRoots() = runWriteAction {
126126
if (module.isDisposed) {
127-
return@invokeAndWait
127+
return@runWriteAction
128128
}
129129

130130
roots.clear()

src/main/kotlin/facet/MinecraftFacetDetector.kt

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,16 @@ import com.intellij.openapi.startup.ProjectActivity
5050
import com.intellij.openapi.util.Key
5151
import com.intellij.platform.ide.progress.withBackgroundProgress
5252
import com.intellij.platform.util.progress.forEachWithProgress
53+
import com.intellij.util.concurrency.NonUrgentExecutor
5354
import kotlinx.coroutines.CoroutineScope
5455
import kotlinx.coroutines.Dispatchers
5556
import kotlinx.coroutines.Job
57+
import kotlinx.coroutines.asCoroutineDispatcher
5658
import kotlinx.coroutines.cancelAndJoin
5759
import kotlinx.coroutines.job
5860
import kotlinx.coroutines.launch
61+
import kotlinx.coroutines.sync.Mutex
62+
import kotlinx.coroutines.sync.withLock
5963
import org.jetbrains.plugins.gradle.util.GradleUtil
6064

6165
class MinecraftFacetDetector : ProjectActivity {
@@ -69,15 +73,13 @@ class MinecraftFacetDetector : ProjectActivity {
6973

7074
override suspend fun execute(project: Project) {
7175
val detectorService = project.service<FacetDetectorScopeProvider>()
72-
detectorService.currentJob?.cancelAndJoin()
73-
withBackgroundProgress(project, "Detecting Minecraft Frameworks", cancellable = false) {
74-
detectorService.currentJob = coroutineContext.job
75-
MinecraftModuleRootListener.doCheck(project)
76-
}
76+
MinecraftModuleRootListener.doCheckUnderProgress(project, detectorService)
7777
}
7878

7979
@Service(Service.Level.PROJECT)
8080
private class FacetDetectorScopeProvider(val scope: CoroutineScope) {
81+
val dispatcher = NonUrgentExecutor.getInstance().asCoroutineDispatcher()
82+
val lock = Mutex()
8183
var currentJob: Job? = null
8284
}
8385

@@ -89,12 +91,18 @@ class MinecraftFacetDetector : ProjectActivity {
8991

9092
val project = event.source as? Project ?: return
9193
val detectorService = project.service<FacetDetectorScopeProvider>()
92-
detectorService.scope.launch {
93-
detectorService.currentJob?.cancelAndJoin()
94-
withBackgroundProgress(project, "Detecting Minecraft Frameworks", cancellable = false) {
94+
detectorService.scope.launch(detectorService.dispatcher) {
95+
doCheckUnderProgress(project, detectorService)
96+
}
97+
}
98+
99+
suspend fun doCheckUnderProgress(project: Project, detectorService: FacetDetectorScopeProvider) {
100+
withBackgroundProgress(project, "Detecting Minecraft Frameworks", cancellable = false) {
101+
detectorService.lock.withLock {
102+
detectorService.currentJob?.cancelAndJoin()
95103
detectorService.currentJob = coroutineContext.job
96-
doCheck(project)
97104
}
105+
doCheck(project)
98106
}
99107
}
100108

src/main/kotlin/platform/MinecraftModuleType.kt

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/main/kotlin/platform/forge/creator/gradle-steps.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import com.demonwav.mcdev.creator.step.LicenseStep
4141
import com.demonwav.mcdev.creator.step.NewProjectWizardChainStep.Companion.nextStep
4242
import com.demonwav.mcdev.creator.step.UseMixinsStep
4343
import com.demonwav.mcdev.util.MinecraftTemplates
44+
import com.demonwav.mcdev.util.MinecraftVersions
4445
import com.demonwav.mcdev.util.SemanticVersion
4546
import com.intellij.ide.wizard.NewProjectWizardStep
4647
import com.intellij.openapi.application.WriteAction
@@ -102,6 +103,7 @@ class ForgeGradleFilesStep(parent: NewProjectWizardStep) : AbstractLongRunningAs
102103
"AUTHOR_LIST" to authors.joinToString(", "),
103104
"LICENSE" to license.id,
104105
"HAS_DATA" to "true",
106+
"MERGE_RESOURCES_AND_CLASSES" to (mcVersion >= MinecraftVersions.MC1_20_3),
105107
)
106108

107109
if (javaVersion != null) {

src/main/kotlin/platform/mcp/actions/SrgActionBase.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.intellij.psi.PsiElement
3737
import com.intellij.psi.PsiIdentifier
3838
import com.intellij.psi.PsiMember
3939
import com.intellij.psi.PsiReference
40+
import com.intellij.psi.util.createSmartPointer
4041
import com.intellij.ui.LightColors
4142
import com.intellij.ui.awt.RelativePoint
4243
import java.awt.Point
@@ -88,9 +89,10 @@ abstract class SrgActionBase : AnAction() {
8889

8990
val project = e.project ?: return
9091

92+
val elementPointer = getDataFromActionEvent(e)?.element?.createSmartPointer()
93+
val editor = getDataFromActionEvent(e)?.editor
9194
invokeLater {
92-
val element = getDataFromActionEvent(e)?.element
93-
val editor = getDataFromActionEvent(e)?.editor
95+
val element = elementPointer?.element
9496
if (element != null && editor != null) {
9597
val pos = editor.offsetToVisualPosition(element.textRange.endOffset - element.textLength / 2)
9698
val at = RelativePoint(

src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,30 @@ class NewInsnSelectorParser : MixinSelectorParser {
219219
if (!at.hasQualifiedName(AT)) return null
220220
if (at.findAttributeValue("value")?.constantStringValue != "NEW") return null
221221

222-
return NewInsnSelector(value)
222+
val strippedValue = value.replace(" ", "")
223+
return if (strippedValue.startsWith('(')) {
224+
NewInsnDescriptorSelector(strippedValue)
225+
} else {
226+
NewInsnTypeSelector(strippedValue)
227+
}
223228
}
224229
}
225230

226-
private class NewInsnSelector(
231+
private class NewInsnTypeSelector(
232+
override val owner: String,
233+
) : MixinSelector {
234+
override fun matchField(owner: String, name: String, desc: String) = false
235+
236+
override fun matchMethod(owner: String, name: String, desc: String): Boolean {
237+
return name == "<init>" && owner == this.owner
238+
}
239+
240+
override val fieldDescriptor = null
241+
override val methodDescriptor = null
242+
override val displayName = owner
243+
}
244+
245+
private class NewInsnDescriptorSelector(
227246
override val methodDescriptor: String,
228247
) : MixinSelector {
229248
override fun matchField(owner: String, name: String, desc: String): Boolean = false

src/main/kotlin/platform/mixin/reference/MixinSelectors.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@ class MixinMemberParser : MixinSelectorParser {
240240
}
241241

242242
owner = internalOwner.replace('/', '.')
243+
244+
// if owner is all there is to the selector, match anything with the owner
245+
if (pos == reference.length - 1) {
246+
return MemberReference("", null, owner, matchAllNames = true, matchAllDescs = true)
247+
}
243248
} else {
244249
// No owner/qualifier specified
245250
pos = -1

0 commit comments

Comments
 (0)