User: rednesto Date: 01 Jan 24 18:18 Revision: 7de13ba5f87c9b2d4950641cb3fca57919cc1840 Summary: Search for file references in module dependencies Helps with finding references to mixin configs for architectury TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=8939&personal=false Index: src/main/kotlin/platform/fabric/reference/ResourceFileReference.kt =================================================================== --- src/main/kotlin/platform/fabric/reference/ResourceFileReference.kt (revision 174d757c762122db8deba8066454890931c40cb3) +++ src/main/kotlin/platform/fabric/reference/ResourceFileReference.kt (revision 7de13ba5f87c9b2d4950641cb3fca57919cc1840) @@ -24,8 +24,11 @@ import com.demonwav.mcdev.util.SourceType import com.demonwav.mcdev.util.findModule import com.demonwav.mcdev.util.manipulator +import com.demonwav.mcdev.util.mapFirstNotNull import com.demonwav.mcdev.util.reference.InspectionReference import com.intellij.json.psi.JsonStringLiteral +import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.ModuleRootManager import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager @@ -47,12 +50,19 @@ override val unresolved = resolve() == null override fun resolve(): PsiElement? { - val module = element.findModule() ?: return null + fun findFileIn(module: Module): PsiFile? { - val facet = MinecraftFacet.getInstance(module) ?: return null - val virtualFile = facet.findFile(element.value, SourceType.RESOURCE) ?: return null - return PsiManager.getInstance(element.project).findFile(virtualFile) - } + val facet = MinecraftFacet.getInstance(module) ?: return null + val virtualFile = facet.findFile(element.value, SourceType.RESOURCE) ?: return null + return PsiManager.getInstance(element.project).findFile(virtualFile) + } + val module = element.findModule() ?: return null + return findFileIn(module) + ?: ModuleRootManager.getInstance(module) + .getDependencies(false) + .mapFirstNotNull(::findFileIn) + } + override fun bindToElement(newTarget: PsiElement): PsiElement? { if (newTarget !is PsiFile) { throw IncorrectOperationException("Cannot target $newTarget")