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"/>
+