From 5eca487cfa26a3b6faa8cd85ea12b46494ab1581 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 18 Dec 2020 16:37:39 +0530 Subject: [PATCH 1/7] Added reference navigation for observer name --- .../magento2plugin/indexes/EventIndex.java | 42 +++++++++++++----- .../ObserverNameReferenceProvider.java | 43 ++++++++++++++++++ .../xml/XmlReferenceContributor.java | 10 +++++ .../util/xml/XmlPsiTreeUtil.java | 44 +++++++++++++++++++ 4 files changed, 128 insertions(+), 11 deletions(-) create mode 100644 src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java diff --git a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java index f0faf8de6..cd640b1ba 100644 --- a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java @@ -13,6 +13,7 @@ import com.intellij.psi.xml.XmlFile; import com.intellij.util.indexing.FileBasedIndex; import com.magento.idea.magento2plugin.stubs.indexes.EventNameIndex; +import com.magento.idea.magento2plugin.stubs.indexes.EventObserverIndex; import com.magento.idea.magento2plugin.util.xml.XmlPsiTreeUtil; import java.util.ArrayList; @@ -20,15 +21,11 @@ public class EventIndex { - private static EventIndex INSTANCE; - + private static EventIndex INSTANCE; //NOPMD private Project project; - private EventIndex() { - } - public static EventIndex getInstance(final Project project) { - if (null == INSTANCE) { + if (null == INSTANCE) { //NOPMD INSTANCE = new EventIndex(); } INSTANCE.project = project; @@ -37,17 +34,40 @@ public static EventIndex getInstance(final Project project) { } public Collection getEventElements(final String name, final GlobalSearchScope scope) { - Collection result = new ArrayList<>(); + final Collection result = new ArrayList<>(); - Collection virtualFiles = + final Collection virtualFiles = FileBasedIndex.getInstance().getContainingFiles(EventNameIndex.KEY, name, scope); - for (VirtualFile virtualFile : virtualFiles) { - XmlFile xmlFile = (XmlFile) PsiManager.getInstance(project).findFile(virtualFile); - Collection valueElements = XmlPsiTreeUtil + for (final VirtualFile virtualFile : virtualFiles) { + final XmlFile xmlFile = (XmlFile) PsiManager.getInstance(project).findFile(virtualFile); + final Collection valueElements = XmlPsiTreeUtil .findAttributeValueElements(xmlFile, "event", "name", name); result.addAll(valueElements); } return result; } + + public Collection getObserver( + final String eventName, + final String observerName, + final GlobalSearchScope scope + ) { + final Collection result = new ArrayList<>(); + final Collection virtualFiles = FileBasedIndex.getInstance().getContainingFiles( + EventObserverIndex.KEY, eventName, scope + ); + + for (final VirtualFile virtualFile: virtualFiles) { + final XmlFile eventsXmlFile + = (XmlFile) PsiManager.getInstance(project).findFile(virtualFile); + if (eventsXmlFile != null) { + result.addAll( + XmlPsiTreeUtil.findObserverTag(eventsXmlFile, eventName, observerName) + ); + } + } + + return result; + } } diff --git a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java new file mode 100644 index 000000000..a9478fa32 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java @@ -0,0 +1,43 @@ +package com.magento.idea.magento2plugin.reference.provider; + +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; +import com.intellij.psi.PsiReferenceProvider; +import com.intellij.psi.impl.source.xml.XmlAttributeValueImpl; +import com.intellij.psi.impl.source.xml.XmlTagImpl; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.ProcessingContext; +import com.magento.idea.magento2plugin.indexes.EventIndex; +import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.jetbrains.annotations.NotNull; + +public class ObserverNameReferenceProvider extends @NotNull PsiReferenceProvider { + @Override + public PsiReference @NotNull [] getReferencesByElement( + @NotNull final PsiElement element, + @NotNull final ProcessingContext context + ) { + final List psiReferences = new ArrayList<>(); + final XmlTagImpl eventTag = (XmlTagImpl) element.getParent().getParent().getParent(); + final String eventName = eventTag.getAttributeValue("name"); + + if (eventName == null) { + return psiReferences.toArray(new PsiReference[0]); + } + + final String observerName = ((XmlAttributeValueImpl) element).getValue(); + final Collection observers + = EventIndex.getInstance(element.getProject()).getObserver( + eventName, observerName, GlobalSearchScope.allScope(element.getProject()) + ); + + if (!observers.isEmpty()) { + psiReferences.add(new PolyVariantReferenceBase(element, observers)); + } + + return psiReferences.toArray(new PsiReference[0]); + } +} diff --git a/src/com/magento/idea/magento2plugin/reference/xml/XmlReferenceContributor.java b/src/com/magento/idea/magento2plugin/reference/xml/XmlReferenceContributor.java index e255e8704..e1eb7471a 100644 --- a/src/com/magento/idea/magento2plugin/reference/xml/XmlReferenceContributor.java +++ b/src/com/magento/idea/magento2plugin/reference/xml/XmlReferenceContributor.java @@ -153,6 +153,16 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) new EventNameReferenceProvider() ); + // + registrar.registerReferenceProvider( + XmlPatterns.xmlAttributeValue().withParent( + XmlPatterns.xmlAttribute().withName("name").withParent( + XmlPatterns.xmlTag().withName("observer") + ) + ), + new ObserverNameReferenceProvider() + ); + // registrar.registerReferenceProvider( XmlPatterns.xmlAttributeValue().withValue(string().matches(".*[A-Z][a-zA-Z0-9]+_[A-Z][a-zA-Z0-9]+.*")), diff --git a/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java b/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java index 870c823fd..febd264e0 100644 --- a/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java +++ b/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java @@ -29,6 +29,10 @@ "PMD.UseObjectForClearerAPI" }) public class XmlPsiTreeUtil { + public static final String EVENT_TAG_NAME = "event"; + public static final String OBSERVER_TAG_NAME = "observer"; + public static final String NAME_ATTRIBUTE = "name"; + /** * Get type tag of an argument. * @@ -47,6 +51,46 @@ public static XmlTag getTypeTagOfArgument(final XmlElement psiArgumentValueEleme return PsiTreeUtil.getParentOfType(argumentsTag, XmlTag.class); } + public static Collection findObserverTag( + final XmlFile xmlFile, + final String eventName, + final String observerName + ) { + Collection psiElements = new THashSet<>(); + final XmlTag configTag = xmlFile.getRootTag(); + + if (configTag == null) { + return psiElements; + } + + /* Loop through event tags */ + for (XmlTag eventTag: configTag.getSubTags()) { + XmlAttribute eventNameAttribute = eventTag.getAttribute(NAME_ATTRIBUTE); + + /* Check if event tag and name matches */ + if (EVENT_TAG_NAME.equals(eventTag.getName()) + && eventNameAttribute != null + && eventName.equals(eventNameAttribute.getValue()) + ) { + /* Loop through observer tags under matched event tag */ + for (XmlTag observerTag: eventTag.getSubTags()) { + XmlAttribute observerNameAttribute = observerTag.getAttribute(NAME_ATTRIBUTE); + + /* Check if observer tag and name matches */ + if (OBSERVER_TAG_NAME.equals(observerTag.getName()) + && observerNameAttribute != null + && observerNameAttribute.getValueElement() != null + && observerName.equals(observerNameAttribute.getValue()) + ) { + psiElements.add(observerNameAttribute.getValueElement()); + } + } + } + } + + return psiElements; + } + /** * Find attribute value elements based on the tag name. * From 0f26f952416ba746171191ca77b2a67d85c663fa Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 22 Dec 2020 19:08:33 +0530 Subject: [PATCH 2/7] Fixed CheckStyle issues --- .../magento2plugin/indexes/EventIndex.java | 27 ++++++++++++++----- .../ObserverNameReferenceProvider.java | 2 +- .../util/xml/XmlPsiTreeUtil.java | 5 +++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java index cd640b1ba..d98335005 100644 --- a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.indexes; import com.intellij.openapi.project.Project; @@ -15,7 +16,6 @@ import com.magento.idea.magento2plugin.stubs.indexes.EventNameIndex; import com.magento.idea.magento2plugin.stubs.indexes.EventObserverIndex; import com.magento.idea.magento2plugin.util.xml.XmlPsiTreeUtil; - import java.util.ArrayList; import java.util.Collection; @@ -24,6 +24,9 @@ public class EventIndex { private static EventIndex INSTANCE; //NOPMD private Project project; + /** + * Gets singleton instance. + */ public static EventIndex getInstance(final Project project) { if (null == INSTANCE) { //NOPMD INSTANCE = new EventIndex(); @@ -33,7 +36,13 @@ public static EventIndex getInstance(final Project project) { return INSTANCE; } - public Collection getEventElements(final String name, final GlobalSearchScope scope) { + /** + * Gets event elements by event name. + */ + public Collection getEventElements( + final String name, + final GlobalSearchScope scope + ) { final Collection result = new ArrayList<>(); final Collection virtualFiles = @@ -48,22 +57,26 @@ public Collection getEventElements(final String name, final GlobalSe return result; } - public Collection getObserver( + /** + * Gets observers by event-observer name combination. + */ + public Collection getObservers( final String eventName, final String observerName, final GlobalSearchScope scope ) { final Collection result = new ArrayList<>(); - final Collection virtualFiles = FileBasedIndex.getInstance().getContainingFiles( - EventObserverIndex.KEY, eventName, scope - ); + final Collection virtualFiles + = FileBasedIndex.getInstance().getContainingFiles( + EventObserverIndex.KEY, eventName, scope + ); for (final VirtualFile virtualFile: virtualFiles) { final XmlFile eventsXmlFile = (XmlFile) PsiManager.getInstance(project).findFile(virtualFile); if (eventsXmlFile != null) { result.addAll( - XmlPsiTreeUtil.findObserverTag(eventsXmlFile, eventName, observerName) + XmlPsiTreeUtil.findObserverTags(eventsXmlFile, eventName, observerName) ); } } diff --git a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java index a9478fa32..4633a92c6 100644 --- a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java +++ b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java @@ -30,7 +30,7 @@ public class ObserverNameReferenceProvider extends @NotNull PsiReferenceProvider final String observerName = ((XmlAttributeValueImpl) element).getValue(); final Collection observers - = EventIndex.getInstance(element.getProject()).getObserver( + = EventIndex.getInstance(element.getProject()).getObservers( eventName, observerName, GlobalSearchScope.allScope(element.getProject()) ); diff --git a/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java b/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java index febd264e0..b53524539 100644 --- a/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java +++ b/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java @@ -51,7 +51,10 @@ public static XmlTag getTypeTagOfArgument(final XmlElement psiArgumentValueEleme return PsiTreeUtil.getParentOfType(argumentsTag, XmlTag.class); } - public static Collection findObserverTag( + /** + * Finds observer tags by event-observer name combination. + */ + public static Collection findObserverTags( final XmlFile xmlFile, final String eventName, final String observerName From b2d9130ba788a01cd726a874cf774509da3ba63e Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 22 Dec 2020 19:12:02 +0530 Subject: [PATCH 3/7] Added test coverage for disabled observer reference navigation --- .../vendor/magento/module-catalog/etc/events.xml | 4 ++-- .../observerNameMustHaveReference/events.xml | 13 +++++++++++++ .../xml/ObserverReferenceRegistrarTest.java | 9 +++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml diff --git a/testData/project/magento2/vendor/magento/module-catalog/etc/events.xml b/testData/project/magento2/vendor/magento/module-catalog/etc/events.xml index aa2f68cd4..992a5dcde 100644 --- a/testData/project/magento2/vendor/magento/module-catalog/etc/events.xml +++ b/testData/project/magento2/vendor/magento/module-catalog/etc/events.xml @@ -5,8 +5,8 @@ * See COPYING.txt for license details. */ --> - - + diff --git a/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml b/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml new file mode 100644 index 000000000..133969f9c --- /dev/null +++ b/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/tests/com/magento/idea/magento2plugin/reference/xml/ObserverReferenceRegistrarTest.java b/tests/com/magento/idea/magento2plugin/reference/xml/ObserverReferenceRegistrarTest.java index 696dbc303..a35647b19 100644 --- a/tests/com/magento/idea/magento2plugin/reference/xml/ObserverReferenceRegistrarTest.java +++ b/tests/com/magento/idea/magento2plugin/reference/xml/ObserverReferenceRegistrarTest.java @@ -18,6 +18,15 @@ public void testObserverInstanceMustHaveReference() { assertHasReferencePhpClass("Magento\\Catalog\\Observer\\TestObserver"); } + /** + * Tests for observer name reference in events.xml. + */ + public void testObserverNameMustHaveReference() { + myFixture.configureByFile(this.getFixturePath(ModuleEventsXml.FILE_NAME)); + + assertHasReferenceToXmlAttributeValue("test_observer"); + } + /** * Tests for event name reference in events.xml. */ From df97f61a76255c08c60a3b432797a5462e4f2226 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Mon, 28 Dec 2020 16:17:03 +0530 Subject: [PATCH 4/7] Fixed test --- .../observerNameMustHaveReference/events.xml | 2 +- .../reference/BaseReferenceTestCase.java | 28 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml b/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml index 133969f9c..a7872e70f 100644 --- a/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml +++ b/testData/reference/xml/ObserverReferenceRegistrar/observerNameMustHaveReference/events.xml @@ -8,6 +8,6 @@ - + diff --git a/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java b/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java index b48c8b720..560e685bb 100644 --- a/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java +++ b/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java @@ -39,13 +39,29 @@ protected void setUp() throws Exception { protected void assertHasReferenceToXmlAttributeValue(final String reference) { final PsiElement element = getElementFromCaret(); for (final PsiReference psiReference: element.getReferences()) { - final PsiElement resolved = psiReference.resolve(); - if (!(resolved instanceof XmlAttributeValue)) { - continue; - } + if (psiReference instanceof PolyVariantReferenceBase) { + final ResolveResult[] resolveResults + = ((PolyVariantReferenceBase) psiReference).multiResolve(true); - if (((XmlAttributeValue) resolved).getValue().equals(reference)) { - return; + for (final ResolveResult resolveResult : resolveResults) { + final PsiElement resolved = resolveResult.getElement(); + if (!(resolved instanceof XmlAttributeValue)) { + continue; + } + + if (((XmlAttributeValue) resolved).getValue().equals(reference)) { + return; + } + } + } else { + final PsiElement resolved = psiReference.resolve(); + if (!(resolved instanceof XmlAttributeValue)) { + continue; + } + + if (((XmlAttributeValue) resolved).getValue().equals(reference)) { + return; + } } } final String referenceNotFound = From 08f3c1b5740c9782eb2ee7279f3df922e0ffeb64 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Mon, 15 Mar 2021 11:15:20 +0200 Subject: [PATCH 5/7] Removed redundant annotation --- resources/phpstorm.meta.php/di-autocomplete.php | 0 .../reference/provider/ObserverNameReferenceProvider.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 resources/phpstorm.meta.php/di-autocomplete.php diff --git a/resources/phpstorm.meta.php/di-autocomplete.php b/resources/phpstorm.meta.php/di-autocomplete.php deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java index 4633a92c6..8b33558ec 100644 --- a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java +++ b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java @@ -14,7 +14,7 @@ import java.util.List; import org.jetbrains.annotations.NotNull; -public class ObserverNameReferenceProvider extends @NotNull PsiReferenceProvider { +public class ObserverNameReferenceProvider extends PsiReferenceProvider { @Override public PsiReference @NotNull [] getReferencesByElement( @NotNull final PsiElement element, From 3f8a8e7aaed04aed753c89f135c0be5c8efdac45 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Mon, 15 Mar 2021 11:27:25 +0200 Subject: [PATCH 6/7] Removed singleton --- .../idea/magento2plugin/indexes/EventIndex.java | 12 +++--------- .../xml/ObserverDeclarationInspection.java | 12 +++++++----- .../magento/files/ModuleEventsXml.java | 4 ++++ .../provider/EventDispatchReferenceProvider.java | 2 +- .../provider/ObserverNameReferenceProvider.java | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java index d98335005..7c31b0046 100644 --- a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java @@ -21,19 +21,13 @@ public class EventIndex { - private static EventIndex INSTANCE; //NOPMD - private Project project; + private final Project project; /** * Gets singleton instance. */ - public static EventIndex getInstance(final Project project) { - if (null == INSTANCE) { //NOPMD - INSTANCE = new EventIndex(); - } - INSTANCE.project = project; - - return INSTANCE; + public EventIndex(final Project project) { + this.project = project; } /** diff --git a/src/com/magento/idea/magento2plugin/inspections/xml/ObserverDeclarationInspection.java b/src/com/magento/idea/magento2plugin/inspections/xml/ObserverDeclarationInspection.java index a489bef89..a687e7bbd 100644 --- a/src/com/magento/idea/magento2plugin/inspections/xml/ObserverDeclarationInspection.java +++ b/src/com/magento/idea/magento2plugin/inspections/xml/ObserverDeclarationInspection.java @@ -44,6 +44,7 @@ public class ObserverDeclarationInspection extends PhpInspection { @NotNull @Override + @SuppressWarnings({"PMD.AvoidInstantiatingObjectsInLoops"}) public PsiElementVisitor buildVisitor( final @NotNull ProblemsHolder problemsHolder, final boolean isOnTheFly @@ -66,12 +67,12 @@ public void visitFile(final PsiFile file) { return; } - final EventIndex eventIndex = EventIndex.getInstance(file.getProject()); + final EventIndex eventIndex = new EventIndex(file.getProject()); final HashMap targetObserversHash = new HashMap<>(); for (final XmlTag eventXmlTag: xmlTags) { final HashMap eventProblems = new HashMap<>(); - if (!eventXmlTag.getName().equals("event")) { + if (!eventXmlTag.getName().equals(ModuleEventsXml.EVENT_TAG)) { continue; } @@ -236,7 +237,7 @@ private List fetchObserverTagsFromEventTag(final XmlTag eventXmlTag) { } for (final XmlTag observerXmlTag: observerXmlTags) { - if (!observerXmlTag.getName().equals("observer")) { + if (!observerXmlTag.getName().equals(ModuleEventsXml.OBSERVER_TAG)) { continue; } @@ -257,10 +258,11 @@ private void addModuleNameWhereSameObserverUsed( return; } - if (!moduleDeclarationTag.getName().equals("module")) { + if (!moduleDeclarationTag.getName().equals(ModuleEventsXml.MODULE_TAG)) { return; } - final XmlAttribute moduleNameAttribute = moduleDeclarationTag.getAttribute("name"); + final XmlAttribute moduleNameAttribute + = moduleDeclarationTag.getAttribute(ModuleEventsXml.NAME_ATTRIBUTE); if (moduleNameAttribute == null) { return; } diff --git a/src/com/magento/idea/magento2plugin/magento/files/ModuleEventsXml.java b/src/com/magento/idea/magento2plugin/magento/files/ModuleEventsXml.java index ee87f3d6a..81df22cff 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/ModuleEventsXml.java +++ b/src/com/magento/idea/magento2plugin/magento/files/ModuleEventsXml.java @@ -19,6 +19,10 @@ public class ModuleEventsXml implements ModuleFileInterface { public static final String OBSERVER_TAG = "observer"; public static final String INSTANCE_ATTRIBUTE = "instance"; public static final String EVENT_TAG = "event"; + public static final String MODULE_TAG = "module"; + + //attributes + public static final String NAME_ATTRIBUTE = "name"; private static final ModuleEventsXml INSTANCE = new ModuleEventsXml(); diff --git a/src/com/magento/idea/magento2plugin/reference/provider/EventDispatchReferenceProvider.java b/src/com/magento/idea/magento2plugin/reference/provider/EventDispatchReferenceProvider.java index 59ee575af..dc1d5a292 100644 --- a/src/com/magento/idea/magento2plugin/reference/provider/EventDispatchReferenceProvider.java +++ b/src/com/magento/idea/magento2plugin/reference/provider/EventDispatchReferenceProvider.java @@ -29,7 +29,7 @@ public PsiReference[] getReferencesByElement( ) { final String value = StringUtil.unquoteString(element.getText()); final List psiReferences = new ArrayList<>(); - final Collection targets = EventIndex.getInstance(element.getProject()) + final Collection targets = new EventIndex(element.getProject()) .getEventElements( value, GlobalSearchScope.getScopeRestrictedByFileTypes( diff --git a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java index 8b33558ec..94e34c555 100644 --- a/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java +++ b/src/com/magento/idea/magento2plugin/reference/provider/ObserverNameReferenceProvider.java @@ -30,7 +30,7 @@ public class ObserverNameReferenceProvider extends PsiReferenceProvider { final String observerName = ((XmlAttributeValueImpl) element).getValue(); final Collection observers - = EventIndex.getInstance(element.getProject()).getObservers( + = new EventIndex(element.getProject()).getObservers( eventName, observerName, GlobalSearchScope.allScope(element.getProject()) ); From 94cac05730204709091c8095a7758ef7c1b5953a Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Mon, 15 Mar 2021 11:59:50 +0200 Subject: [PATCH 7/7] Static fixes --- src/com/magento/idea/magento2plugin/indexes/EventIndex.java | 2 +- .../magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java index 7c31b0046..0641e92e1 100644 --- a/src/com/magento/idea/magento2plugin/indexes/EventIndex.java +++ b/src/com/magento/idea/magento2plugin/indexes/EventIndex.java @@ -24,7 +24,7 @@ public class EventIndex { private final Project project; /** - * Gets singleton instance. + * Constructor. */ public EventIndex(final Project project) { this.project = project; diff --git a/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java b/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java index b53524539..8e3273a90 100644 --- a/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java +++ b/src/com/magento/idea/magento2plugin/util/xml/XmlPsiTreeUtil.java @@ -54,6 +54,9 @@ public static XmlTag getTypeTagOfArgument(final XmlElement psiArgumentValueEleme /** * Finds observer tags by event-observer name combination. */ + @SuppressWarnings({ + "PMD.CyclomaticComplexity" + }) public static Collection findObserverTags( final XmlFile xmlFile, final String eventName,