User: rednesto Date: 25 Apr 23 15:34 Revision: 2270a96cfa71903027394fac01e31d5fee1b14ca Summary: Fix #1953 Fabric split env references TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=8445&personal=false Index: src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModelBuilderImpl.groovy =================================================================== --- src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModelBuilderImpl.groovy (revision 192a6dfecd34d673e9a5adb4a2de497d6b9e41fa) +++ src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModelBuilderImpl.groovy (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -52,8 +52,15 @@ decompilers << ["single": getDecompilers(loomExtension, false)] } + def modSourceSets = [:] + + for (def mod in loomExtension.getMods()) { + def modName = mod.getName() + modSourceSets[modName] = mod.getModSourceSets().getOrNull()?.collect { it.sourceSet().getName() } + } + //noinspection GroovyAssignabilityCheck - return new FabricLoomModelImpl(tinyMappings, decompilers, splitMinecraftJar) + return new FabricLoomModelImpl(tinyMappings, decompilers, splitMinecraftJar, modSourceSets) } List getDecompilers(Object loomExtension, boolean client) { @@ -73,7 +80,7 @@ } //noinspection GroovyAssignabilityCheck - return new FabricLoomModelImpl(tinyMappings, ["single": decompilers], false) + return new FabricLoomModelImpl(tinyMappings, ["single": decompilers], false, [:]) } @Override Index: src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModelImpl.groovy =================================================================== --- src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModelImpl.groovy (revision 192a6dfecd34d673e9a5adb4a2de497d6b9e41fa) +++ src/gradle-tooling-extension/groovy/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModelImpl.groovy (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -17,6 +17,7 @@ File tinyMappings Map> decompilers boolean splitMinecraftJar + Map> modSourceSets @Immutable static class DecompilerModelImpl implements DecompilerModel, Serializable { Index: src/gradle-tooling-extension/java/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModel.java =================================================================== --- src/gradle-tooling-extension/java/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModel.java (revision 192a6dfecd34d673e9a5adb4a2de497d6b9e41fa) +++ src/gradle-tooling-extension/java/com/demonwav/mcdev/platform/mcp/gradle/tooling/fabricloom/FabricLoomModel.java (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -22,6 +22,8 @@ boolean getSplitMinecraftJar(); + Map> getModSourceSets(); + interface DecompilerModel { String getName(); Index: src/main/kotlin/platform/fabric/reference/FabricClientUseScopeEnlarger.kt =================================================================== --- src/main/kotlin/platform/fabric/reference/FabricClientUseScopeEnlarger.kt (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) +++ src/main/kotlin/platform/fabric/reference/FabricClientUseScopeEnlarger.kt (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -0,0 +1,41 @@ +/* + * Minecraft Dev for IntelliJ + * + * https://minecraftdev.org + * + * Copyright (c) 2023 minecraft-dev + * + * MIT License + */ + +package com.demonwav.mcdev.platform.fabric.reference + +import com.demonwav.mcdev.platform.fabric.util.FabricConstants +import com.demonwav.mcdev.platform.mcp.fabricloom.FabricLoomData +import com.demonwav.mcdev.util.findModule +import com.intellij.psi.PsiElement +import com.intellij.psi.search.FilenameIndex +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.search.SearchScope +import com.intellij.psi.search.UseScopeEnlarger +import org.jetbrains.plugins.gradle.util.GradleUtil + +class FabricClientUseScopeEnlarger : UseScopeEnlarger() { + + override fun getAdditionalUseScope(element: PsiElement): SearchScope? { + val module = element.findModule() + ?: return null + val loomData = GradleUtil.findGradleModuleData(module)?.children + ?.find { it.key == FabricLoomData.KEY }?.data as? FabricLoomData + ?: return null + + if (loomData.splitMinecraftJar) { + return GlobalSearchScope.filesScope(element.project) { + val moduleWithDeps = GlobalSearchScope.moduleWithDependenciesScope(module) + FilenameIndex.getVirtualFilesByName(FabricConstants.FABRIC_MOD_JSON, moduleWithDeps) + } + } + + return null + } +} Index: src/main/kotlin/platform/fabric/reference/FabricModJsonResolveScopeEnlarger.kt =================================================================== --- src/main/kotlin/platform/fabric/reference/FabricModJsonResolveScopeEnlarger.kt (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) +++ src/main/kotlin/platform/fabric/reference/FabricModJsonResolveScopeEnlarger.kt (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -0,0 +1,55 @@ +/* + * Minecraft Dev for IntelliJ + * + * https://minecraftdev.org + * + * Copyright (c) 2023 minecraft-dev + * + * MIT License + */ + +package com.demonwav.mcdev.platform.fabric.reference + +import com.demonwav.mcdev.platform.fabric.util.FabricConstants +import com.demonwav.mcdev.platform.mcp.fabricloom.FabricLoomData +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.module.ModuleUtilCore +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.ResolveScopeEnlarger +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.search.SearchScope +import org.jetbrains.plugins.gradle.util.GradleUtil + +class FabricModJsonResolveScopeEnlarger : ResolveScopeEnlarger() { + + override fun getAdditionalResolveScope(file: VirtualFile, project: Project): SearchScope? { + if (file.name != FabricConstants.FABRIC_MOD_JSON) { + return null + } + + val module = ModuleUtilCore.findModuleForFile(file, project) + ?: return null + val loomData = GradleUtil.findGradleModuleData(module)?.children + ?.find { it.key == FabricLoomData.KEY }?.data as? FabricLoomData + ?: return null + + val moduleScopes = mutableListOf() + val moduleManager = ModuleManager.getInstance(project) + val parentPath = module.name.substringBeforeLast('.') + for ((_, sourceSets) in loomData.modSourceSets) { + for (sourceSet in sourceSets) { + val childModule = moduleManager.findModuleByName("$parentPath.$sourceSet") + if (childModule != null) { + moduleScopes.add(childModule.getModuleScope(false)) + } + } + } + + if (moduleScopes.isEmpty()) { + return null + } + + return GlobalSearchScope.union(moduleScopes) + } +} Index: src/main/kotlin/platform/mcp/fabricloom/FabricLoomData.kt =================================================================== --- src/main/kotlin/platform/mcp/fabricloom/FabricLoomData.kt (revision 192a6dfecd34d673e9a5adb4a2de497d6b9e41fa) +++ src/main/kotlin/platform/mcp/fabricloom/FabricLoomData.kt (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -21,6 +21,7 @@ val tinyMappings: File?, val decompileTasks: Map>, val splitMinecraftJar: Boolean, + val modSourceSets: Map> ) : AbstractExternalEntityData(module.owner) { data class Decompiler(val name: String, val taskName: String, val sourcesPath: String) Index: src/main/kotlin/platform/mcp/fabricloom/FabricLoomProjectResolverExtension.kt =================================================================== --- src/main/kotlin/platform/mcp/fabricloom/FabricLoomProjectResolverExtension.kt (revision 192a6dfecd34d673e9a5adb4a2de497d6b9e41fa) +++ src/main/kotlin/platform/mcp/fabricloom/FabricLoomProjectResolverExtension.kt (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -32,7 +32,13 @@ } } - val data = FabricLoomData(ideModule.data, loomData.tinyMappings, decompilers, loomData.splitMinecraftJar) + val data = FabricLoomData( + ideModule.data, + loomData.tinyMappings, + decompilers, + loomData.splitMinecraftJar, + loomData.modSourceSets + ) ideModule.createChild(FabricLoomData.KEY, data) } Index: src/main/resources/META-INF/plugin.xml =================================================================== --- src/main/resources/META-INF/plugin.xml (revision 192a6dfecd34d673e9a5adb4a2de497d6b9e41fa) +++ src/main/resources/META-INF/plugin.xml (revision 2270a96cfa71903027394fac01e31d5fee1b14ca) @@ -314,6 +314,8 @@ + +