Skip to content

Commit 9c27b29

Browse files
committed
Merge branch 'dev' into 2024.1
2 parents 24f151b + 7954ba8 commit 9c27b29

File tree

9 files changed

+61
-50
lines changed

9 files changed

+61
-50
lines changed

changelog.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Minecraft Development for IntelliJ
22

3-
## [Unreleased]
3+
## [1.8.2]
44

55
### Added
66

@@ -13,6 +13,7 @@
1313
- Mixin injection signature fix preview
1414
- Loom 1.8 support
1515
- K2 mode compatibility
16+
- [#2385](https://github.com/minecraft-dev/MinecraftDev/issues/2385) ModDevGradle Vanilla-Mode support
1617

1718
### Changed
1819

@@ -28,6 +29,7 @@
2829
- [#2376](https://github.com/minecraft-dev/MinecraftDev/issues/2376) Error when generating event listeners in read only file
2930
- [#2308](https://github.com/minecraft-dev/MinecraftDev/issues/2308) Mixin Inject signature fix adds last parameter as first local
3031
- [#1813](https://github.com/minecraft-dev/MinecraftDev/issues/1813) Single character Accessor targets aren't inferred correctly
32+
- [#1886](https://github.com/minecraft-dev/MinecraftDev/issues/1886) Sync error in ForgeGradle composite builds
3133

3234
## [1.8.1] - 2024-08-10
3335

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
# suppress inspection "UnusedProperty" for whole file
2222
ideaVersionName = 2024.1
2323

24-
coreVersion = 1.8.1
24+
coreVersion = 1.8.2
2525

2626
# Silences a build-time warning because we are bundling our own kotlin library
2727
kotlin.stdlib.default.dependency = false

src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/neomoddev/NeoModDevGradleModelBuilderImpl.groovy

+3-5
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,8 @@ final class NeoModDevGradleModelBuilderImpl implements ModelBuilderService {
4747
return null
4848
}
4949

50-
def neoforgeVersion = extension.version.get()
51-
if (neoforgeVersion == null) {
52-
return null
53-
}
50+
def neoforgeVersion = extension.version.getOrNull()
51+
def neoFormVersion = extension.neoFormVersion.getOrNull()
5452

5553
def accessTransformersRaw = extension.accessTransformers
5654
List<File> accessTransformers
@@ -74,7 +72,7 @@ final class NeoModDevGradleModelBuilderImpl implements ModelBuilderService {
7472
}
7573

7674
//noinspection GroovyAssignabilityCheck
77-
return new NeoModDevGradleModelImpl(neoforgeVersion, mappingsFile, accessTransformers)
75+
return new NeoModDevGradleModelImpl(neoforgeVersion, neoFormVersion, mappingsFile, accessTransformers)
7876
}
7977

8078
@Override

src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/neomoddev/NeoModDevGradleModelImpl.groovy

+3-13
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,14 @@
2020

2121
package com.demonwav.mcdev.platform.mcp.gradle.tooling.neomoddev
2222

23-
2423
import com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelNMD
25-
import groovy.transform.CompileStatic
24+
import groovy.transform.Immutable
2625

27-
@CompileStatic
26+
@Immutable(knownImmutableClasses = [File])
2827
final class NeoModDevGradleModelImpl implements McpModelNMD, Serializable {
2928

3029
final String neoForgeVersion
30+
final String neoFormVersion
3131
final File mappingsFile
3232
final List<File> accessTransformers
33-
34-
NeoModDevGradleModelImpl(
35-
final String neoForgeVersion,
36-
final File mappingsFile,
37-
final List<File> accessTransformers
38-
) {
39-
this.neoForgeVersion = neoForgeVersion
40-
this.mappingsFile = mappingsFile
41-
this.accessTransformers = accessTransformers
42-
}
4333
}

src/gradle-tooling-extension/java/com/demonwav/mcdev/platform/mcp/gradle/tooling/McpModelNMD.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@
2020

2121
package com.demonwav.mcdev.platform.mcp.gradle.tooling;
2222

23+
import org.jetbrains.annotations.Nullable;
24+
2325
import java.io.File;
2426
import java.util.List;
2527

2628
public interface McpModelNMD {
27-
String getNeoForgeVersion();
29+
@Nullable String getNeoForgeVersion();
30+
@Nullable String getNeoFormVersion();
2831
File getMappingsFile();
2932
List<File> getAccessTransformers();
3033
}

src/main/kotlin/platform/mcp/gradle/McpProjectResolverExtension.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class McpProjectResolverExtension : AbstractProjectResolverExtension() {
5959

6060
val projectDirPath = Paths.get(projectDataNode.data.linkedExternalProjectPath)
6161
runGradleTask(project, projectDirPath) { settings ->
62-
settings.taskNames = allTaskNames
62+
settings.taskNames = allTaskNames.distinct()
6363
}
6464

6565
super.resolveFinished(projectDataNode)

src/main/kotlin/platform/mcp/gradle/datahandler/McpModelFG3Handler.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.intellij.openapi.vfs.LocalFileSystem
3434
import org.gradle.tooling.model.idea.IdeaModule
3535
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
3636
import org.jetbrains.plugins.gradle.service.project.ProjectResolverContext
37+
import org.jetbrains.plugins.gradle.util.gradleIdentityPath
3738

3839
object McpModelFG3Handler : McpModelDataHandler {
3940

@@ -68,9 +69,10 @@ object McpModelFG3Handler : McpModelDataHandler {
6869
forgeVersion,
6970
)
7071

71-
val gradleProjectPath = gradleModule.gradleProject.projectIdentifier.projectPath
72-
val suffix = if (gradleProjectPath.endsWith(':')) "" else ":"
73-
val taskName = gradleProjectPath + suffix + data.taskName
72+
// gradleIdentityPath makes it work with composite builds
73+
val identityPath = node.data.gradleIdentityPath
74+
// But ignore it if it is the root project, as taskName already starts with a colon
75+
val taskName = if (identityPath == ":") data.taskName else identityPath + ':' + data.taskName
7476

7577
val ats = data.accessTransformers
7678
if (ats != null && ats.isNotEmpty()) {

src/main/kotlin/platform/mcp/gradle/datahandler/McpModelNMDHandler.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,14 @@ object McpModelNMDHandler : McpModelDataHandler {
4444
) {
4545
val data = resolverCtx.getExtraProject(gradleModule, McpModelNMD::class.java) ?: return
4646

47+
val minecraftVersion = when {
48+
data.neoForgeVersion != null -> "1." + data.neoForgeVersion!!.substringBeforeLast('.').removeSuffix(".0")
49+
data.neoFormVersion != null -> data.neoFormVersion!!.substringBeforeLast('-').removeSuffix(".0")
50+
else -> null
51+
}
52+
4753
val state = McpModuleSettings.State(
48-
"1." + data.neoForgeVersion.substringBeforeLast('.').removeSuffix(".0"),
54+
minecraftVersion,
4955
null,
5056
data.mappingsFile?.absolutePath,
5157
SrgType.TSRG,

src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt

+34-24
Original file line numberDiff line numberDiff line change
@@ -330,16 +330,17 @@ class InvalidInjectorMethodSignatureInspection : MixinInspection() {
330330
}
331331
val method = startElement as PsiMethod
332332
fixParameters(project, method.parameterList, false)
333-
fixReturnType(method)
334-
fixIntLikeTypes(method, editor ?: return)
333+
fixReturnType(method, editor ?: return, file, false)
334+
fixIntLikeTypes(method, editor, false)
335335
}
336336

337337
override fun generatePreview(project: Project, editor: Editor, file: PsiFile): IntentionPreviewInfo {
338338
val method = PsiTreeUtil.findSameElementInCopy(startElement, file) as? PsiMethod
339339
?: return IntentionPreviewInfo.EMPTY
340340
fixParameters(project, method.parameterList, true)
341-
fixReturnType(method)
342-
fixIntLikeTypes(method, editor)
341+
// Pass the original startElement because the underlying fix gets the preview element itself
342+
fixReturnType(startElement as PsiMethod, editor, file, true)
343+
fixIntLikeTypes(method, editor, true)
343344
return IntentionPreviewInfo.DIFF
344345
}
345346

@@ -386,34 +387,43 @@ class InvalidInjectorMethodSignatureInspection : MixinInspection() {
386387
}
387388
}
388389

389-
private fun fixReturnType(method: PsiMethod) {
390+
private fun fixReturnType(method: PsiMethod, editor: Editor, file: PsiFile, preview: Boolean) {
390391
if (expectedReturnType == null) {
391392
return
392393
}
393-
QuickFixFactory.getInstance()
394-
.createMethodReturnFix(method, expectedReturnType, false)
395-
.applyFix()
394+
val fix = QuickFixFactory.getInstance().createMethodReturnFix(method, expectedReturnType, false)
395+
if (preview) {
396+
fix.generatePreview(file.project, editor, file)
397+
} else {
398+
fix.applyFix()
399+
}
396400
}
397401

398-
private fun fixIntLikeTypes(method: PsiMethod, editor: Editor) {
402+
private fun fixIntLikeTypes(method: PsiMethod, editor: Editor, preview: Boolean) {
399403
if (intLikeTypePositions.isEmpty()) {
400404
return
401405
}
402-
invokeLater {
403-
WriteCommandAction.runWriteCommandAction(
404-
method.project,
405-
"Choose Int-Like Type",
406-
null,
407-
{
408-
val template = makeIntLikeTypeTemplate(method, intLikeTypePositions)
409-
if (template != null) {
410-
editor.caretModel.moveToOffset(method.startOffset)
411-
TemplateManager.getInstance(method.project)
412-
.startTemplate(editor, template)
413-
}
414-
},
415-
method.parentOfType<PsiFile>()!!
416-
)
406+
val runnable = {
407+
val template = makeIntLikeTypeTemplate(method, intLikeTypePositions)
408+
if (template != null) {
409+
editor.caretModel.moveToOffset(method.startOffset)
410+
TemplateManager.getInstance(method.project)
411+
.startTemplate(editor, template)
412+
}
413+
}
414+
415+
if (preview) {
416+
runnable()
417+
} else {
418+
invokeLater {
419+
WriteCommandAction.runWriteCommandAction(
420+
method.project,
421+
"Choose Int-Like Type",
422+
null,
423+
runnable,
424+
method.parentOfType<PsiFile>()!!
425+
)
426+
}
417427
}
418428
}
419429

0 commit comments

Comments
 (0)