Skip to content

Commit 0549e5a

Browse files
committed
Merge branch '2023.1' into 2023.2
2 parents f8030a1 + 1717901 commit 0549e5a

15 files changed

+87
-69
lines changed

build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ license {
285285
style["bnf"] = HeaderStyle.BLOCK_COMMENT.format
286286

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

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

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ kotlin.code.style=official
2424
ideaVersion = 2023.2.2
2525
ideaVersionName = 2023.2.2
2626

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

3030
pluginTomlVersion = 232.8660.88

src/main/kotlin/creator/MinecraftModuleBuilder.kt

+3-4
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

+6-6
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,8 @@ 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
39+
import com.intellij.openapi.application.runWriteActionAndWait
3940
import com.intellij.openapi.module.Module
4041
import com.intellij.openapi.module.ModuleGrouper
4142
import com.intellij.openapi.module.ModuleManager
@@ -75,9 +76,9 @@ class MinecraftFacet(
7576
roots.clear()
7677
}
7778

78-
fun refresh() {
79+
fun refresh() = runWriteActionAndWait {
7980
if (module.isDisposed) {
80-
return
81+
return@runWriteActionAndWait
8182
}
8283

8384
// Don't allow parent types with child types in auto detected set
@@ -120,14 +121,13 @@ class MinecraftFacet(
120121
ProjectView.getInstance(module.project).refresh()
121122
}
122123

123-
private fun updateRoots() = invokeAndWait {
124+
private fun updateRoots() = runWriteAction {
124125
if (module.isDisposed) {
125-
return@invokeAndWait
126+
return@runWriteAction
126127
}
127128

128129
roots.clear()
129130
val rootManager = ModuleRootManager.getInstance(module)
130-
131131
rootManager.contentEntries.asSequence()
132132
.flatMap { entry -> entry.sourceFolders.asSequence() }
133133
.filterNotNull { it.file }

src/main/kotlin/facet/MinecraftFacetDetector.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ import com.intellij.openapi.roots.libraries.LibraryDetectionManager
4141
import com.intellij.openapi.roots.libraries.LibraryKind
4242
import com.intellij.openapi.roots.libraries.LibraryProperties
4343
import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager
44-
import com.intellij.openapi.startup.StartupActivity
44+
import com.intellij.openapi.startup.ProjectActivity
4545
import com.intellij.openapi.util.Key
4646
import org.jetbrains.plugins.gradle.util.GradleUtil
4747

48-
class MinecraftFacetDetector : StartupActivity {
48+
class MinecraftFacetDetector : ProjectActivity {
4949
companion object {
5050
private val libraryVersionsKey = Key<MutableMap<LibraryKind, String>>("mcdev.libraryVersions")
5151

@@ -54,7 +54,7 @@ class MinecraftFacetDetector : StartupActivity {
5454
}
5555
}
5656

57-
override fun runActivity(project: Project) {
57+
override suspend fun execute(project: Project) {
5858
MinecraftModuleRootListener.doCheck(project)
5959
}
6060

src/main/kotlin/facet/ProjectReimporter.kt

+20-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
package com.demonwav.mcdev.facet
2222

23+
import com.demonwav.mcdev.asset.MCDevBundle
24+
import com.intellij.notification.Notification
25+
import com.intellij.notification.NotificationType
2326
import com.intellij.openapi.actionSystem.ActionManager
2427
import com.intellij.openapi.actionSystem.ActionPlaces
2528
import com.intellij.openapi.diagnostic.logger
@@ -57,7 +60,23 @@ object ProjectReimporter {
5760
true
5861
)
5962
callback.doWhenRejected { error ->
60-
log.error("Rejected refresh all projects: $error")
63+
if (error == null) {
64+
Notification(
65+
"Minecraft facet",
66+
MCDevBundle("facet.reimport.failed.title"),
67+
MCDevBundle("facet.reimport.failed.content.no_error"),
68+
NotificationType.WARNING
69+
).notify(project)
70+
log.warn("Rejected refresh all projects, no details provided")
71+
} else {
72+
Notification(
73+
"Minecraft facet",
74+
MCDevBundle("facet.reimport.failed.title"),
75+
MCDevBundle("facet.reimport.failed.content.with_error", error),
76+
NotificationType.WARNING
77+
).notify(project)
78+
log.error("Rejected refresh all projects: $error")
79+
}
6180
}
6281
}
6382
}

src/main/kotlin/platform/MinecraftModuleType.kt

-43
This file was deleted.

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

+2
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

+4-2
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

+21-2
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

+5
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

src/main/kotlin/platform/sponge/reference/SpongeReferenceContributor.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private class GetterReference(element: PsiLanguageInjectionHost) : PsiReferenceB
7878
}
7979

8080
override fun getVariants(): Array<Any> {
81-
val literal = element.toUElementOfType<ULiteralExpression>() ?: return ArrayUtil.EMPTY_OBJECT_ARRAY
81+
val literal = element.toUElement() ?: return ArrayUtil.EMPTY_OBJECT_ARRAY
8282
val (eventClass, _) = literal.uastEventListener
8383
?: return ArrayUtil.EMPTY_OBJECT_ARRAY
8484
val methodByClass = mutableMapOf<String, Pair<PsiMethod, PsiClass>>()

src/main/resources/META-INF/plugin.xml

+5-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
GNU General Public License for more details.
1616
1717
You should have received a copy of the GNU Lesser General Public License
18-
along with this program. If not, see <https://www.gnu.org/licenses/>.
18+
along with this program. If not, see https://www.gnu.org/licenses/.
1919
-->
2020

2121
<idea-plugin require-restart="true">
@@ -81,7 +81,7 @@
8181
<extensionPoint name="injectionPoint" beanClass="com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.InjectionPointInfo" dynamic="true">
8282
<with attribute="implementation" implements="com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.InjectionPoint"/>
8383
</extensionPoint>
84-
<extensionPoint name="injectionPointAnnotation" beanClass="com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.InjectionPointAnnotation" />
84+
<extensionPoint name="injectionPointAnnotation" beanClass="com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.InjectionPointAnnotation" dynamic="true" />
8585
</extensionPoints>
8686

8787
<extensions defaultExtensionNs="com.demonwav.minecraft-dev">
@@ -181,11 +181,11 @@
181181
<!--region NO PLATFORM-->
182182
<!---->
183183

184-
<moduleType id="MINECRAFT_MODULE_TYPE" implementationClass="com.demonwav.mcdev.platform.MinecraftModuleType"/>
185184
<moduleBuilder id="MINECRAFT_MODULE" builderClass="com.demonwav.mcdev.creator.MinecraftModuleBuilder"/>
186185
<facetType implementation="com.demonwav.mcdev.facet.MinecraftFacetType" />
187186
<postStartupActivity implementation="com.demonwav.mcdev.facet.MinecraftFacetDetector"/>
188187
<notificationGroup id="Minecraft project creator" displayType="STICKY_BALLOON"/>
188+
<notificationGroup id="Minecraft facet" displayType="STICKY_BALLOON"/>
189189

190190
<!-- File templates are for project creations -->
191191
<fileTemplateGroup implementation="com.demonwav.mcdev.util.MinecraftTemplates"/>
@@ -266,6 +266,7 @@
266266
<annotator language="MCLang" implementationClass="com.demonwav.mcdev.translations.intentions.TranslationFileAnnotator"/>
267267
<annotator language="JSON" implementationClass="com.demonwav.mcdev.translations.intentions.TranslationFileAnnotator"/>
268268
<intentionAction>
269+
<language>JAVA</language>
269270
<className>com.demonwav.mcdev.translations.intentions.ConvertToTranslationIntention</className>
270271
<category>Minecraft</category>
271272
<descriptionDirectoryName>convertToTranslation</descriptionDirectoryName>
@@ -354,7 +355,7 @@
354355
<!--endregion-->
355356

356357
<!--region NEOFORGE-->
357-
<dependencySupport coordinate="net.neoforge:neoforge" kind="java"/>
358+
<dependencySupport coordinate="net.neoforged:neoforge" kind="java"/>
358359

359360
<fileIconProvider implementation="com.demonwav.mcdev.platform.neoforge.NeoForgeFileIconProvider"/>
360361
<implicitUsageProvider implementation="com.demonwav.mcdev.platform.neoforge.insight.NeoForgeImplicitUsageProvider" />

src/main/resources/fileTemplates/j2ee/forge/Forge (1.13+) build.gradle.ft

+12-2
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,22 @@ minecraft {
9090
// You can set various levels here.
9191
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
9292
property 'forge.logging.console.level', 'debug'
93+
#if (!${MERGE_RESOURCES_AND_CLASSES})
94+
95+
mods {
96+
"${mod_id}" {
97+
source sourceSets.main
98+
}
99+
}
100+
#end
93101
}
94102

95-
#if (${GAME_TEST_FRAMEWORK})
96103
client {
104+
#if (${GAME_TEST_FRAMEWORK})
97105
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
98106
property 'forge.enabledGameTestNamespaces', mod_id
99-
}
100107
#end
108+
}
101109

102110
server {
103111
#if (${GAME_TEST_FRAMEWORK})
@@ -217,6 +225,7 @@ tasks.named('jar', Jar).configure {
217225
tasks.withType(JavaCompile).configureEach {
218226
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
219227
}
228+
#if (${MERGE_RESOURCES_AND_CLASSES})
220229

221230
// Merge the resources and classes into the same directory.
222231
// This is done because java expects modules to be in a single directory.
@@ -227,3 +236,4 @@ sourceSets.each {
227236
it.output.resourcesDir = dir
228237
it.java.destinationDirectory = dir
229238
}
239+
#end

src/main/resources/messages/MinecraftDevelopment.properties

+3
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ error_reporter.report.error=Error Submitting Issue: {0}.
9292
error_reporter.report.error.action=Open an issue on the GitHub issue tracker
9393

9494
facet.editor.name=Minecraft Module Settings
95+
facet.reimport.failed.title=Minecraft facet refresh
96+
facet.reimport.failed.content.no_error=Failed to start project refresh, please refresh your project manually.
97+
facet.reimport.failed.content.with_error=Failed to start project refresh, please refresh your project manually. Cause: {0}
9598

9699
generate.event_listener.title=Generate Event Listener
97100
generate.event_listener.settings=Event Listener Settings

0 commit comments

Comments
 (0)