User: joe Date: 22 Jun 25 23:38 Revision: d3b4dc9a89638ad2da3bd0404f5e455e76a524bb Summary: Add custom searcher for ME definition references TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=10084&personal=false Index: src/main/kotlin/platform/mixin/expression/reference/MEDefinitionReferencesSearcher.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/reference/MEDefinitionReferencesSearcher.kt (revision d3b4dc9a89638ad2da3bd0404f5e455e76a524bb) +++ src/main/kotlin/platform/mixin/expression/reference/MEDefinitionReferencesSearcher.kt (revision d3b4dc9a89638ad2da3bd0404f5e455e76a524bb) @@ -0,0 +1,73 @@ +/* + * Minecraft Development for IntelliJ + * + * https://mcdev.io/ + * + * Copyright (C) 2025 minecraft-dev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, version 3.0 only. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.demonwav.mcdev.platform.mixin.expression.reference + +import com.demonwav.mcdev.platform.mixin.expression.gen.psi.MEDeclaration +import com.demonwav.mcdev.platform.mixin.expression.gen.psi.MEName +import com.intellij.lang.injection.InjectedLanguageManager +import com.intellij.openapi.application.QueryExecutorBase +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiReference +import com.intellij.psi.search.LocalSearchScope +import com.intellij.psi.search.RequestResultProcessor +import com.intellij.psi.search.UsageSearchContext +import com.intellij.psi.search.searches.ReferencesSearch +import com.intellij.psi.util.parentOfType +import com.intellij.psi.util.startOffset +import com.intellij.util.Processor + +/** + * Custom searcher for ME definition references, as ReferencesSearch doesn't seem to work for injected files + */ +class MEDefinitionReferencesSearcher : QueryExecutorBase(true) { + override fun processQuery( + params: ReferencesSearch.SearchParameters, + consumer: Processor + ) { + val declaration = params.elementToSearch as? MEDeclaration ?: return + val declName = declaration.name ?: return + val injectedLanguageManager = InjectedLanguageManager.getInstance(params.project) + val hostFile = injectedLanguageManager.getInjectionHost(declaration)?.containingFile ?: return + params.optimizer.searchWord( + declName, + LocalSearchScope(hostFile), + UsageSearchContext.IN_STRINGS, + true, + declaration, + object : RequestResultProcessor() { + override fun processTextOccurrence( + element: PsiElement, + offsetInElement: Int, + consumer: Processor + ): Boolean { + val injectedElement = injectedLanguageManager.findInjectedElementAt(hostFile, element.startOffset + offsetInElement) + ?: return true + val meName = injectedElement.parentOfType(true) ?: return true + val reference = meName.reference ?: return true + if (!reference.isReferenceTo(declaration)) { + return true + } + return consumer.process(reference) + } + } + ) + } +} Index: src/main/resources/META-INF/plugin.xml =================================================================== --- src/main/resources/META-INF/plugin.xml (revision 9cd279d90e768ecb380f71058ea608bfabea9f13) +++ src/main/resources/META-INF/plugin.xml (revision d3b4dc9a89638ad2da3bd0404f5e455e76a524bb) @@ -780,6 +780,7 @@ implementationClass="com.demonwav.mcdev.platform.mixin.expression.psi.MENameElementManipulator"/> +