|
2 | 2 | * Copyright © Magento, Inc. All rights reserved.
|
3 | 3 | * See COPYING.txt for license details.
|
4 | 4 | */
|
| 5 | + |
5 | 6 | package com.magento.idea.magento2plugin.reference.provider;
|
6 | 7 |
|
7 | 8 | import com.intellij.openapi.util.TextRange;
|
|
16 | 17 | import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase;
|
17 | 18 | import com.magento.idea.magento2plugin.util.RegExUtil;
|
18 | 19 | import gnu.trove.THashSet;
|
19 |
| -import org.jetbrains.annotations.NotNull; |
20 | 20 | import java.util.ArrayList;
|
21 | 21 | import java.util.Collection;
|
22 | 22 | import java.util.List;
|
23 | 23 | import java.util.regex.Matcher;
|
24 | 24 | import java.util.regex.Pattern;
|
| 25 | +import org.jetbrains.annotations.NotNull; |
25 | 26 |
|
26 | 27 | public class PhpClassMemberReferenceProvider extends PsiReferenceProvider {
|
27 | 28 |
|
28 | 29 | @NotNull
|
29 | 30 | @Override
|
30 |
| - public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { |
31 |
| - List<PsiReference> psiReferences = new ArrayList<>(); |
32 |
| - final Collection<PhpClassMember> members = new THashSet<>(); |
| 31 | + public PsiReference[] getReferencesByElement( |
| 32 | + @NotNull final PsiElement element, |
| 33 | + @NotNull final ProcessingContext context |
| 34 | + ) { |
| 35 | + final String value = StringUtil.unquoteString(element.getText()); |
| 36 | + final Matcher matcher |
| 37 | + = Pattern.compile(RegExUtil.XmlRegex.CLASS_MEMBER_NAME).matcher(value); |
33 | 38 |
|
34 |
| - String origValue = element.getText(); |
35 |
| - String value = StringUtil.unquoteString(element.getText()); |
36 |
| - |
37 |
| - Matcher matcher = Pattern.compile(RegExUtil.XmlRegex.CLASS_MEMBER_NAME).matcher(value); |
38 | 39 | if (!matcher.find()) {
|
39 | 40 | return PsiReference.EMPTY_ARRAY;
|
40 | 41 | }
|
41 | 42 |
|
42 |
| - String elementName = matcher.group(1); |
43 |
| - String classFQN = value.substring(0, value.lastIndexOf("::")); |
| 43 | + final List<PsiReference> psiReferences = new ArrayList<>(); |
| 44 | + final Collection<PhpClassMember> members = new THashSet<>(); |
| 45 | + final String elementName = matcher.group(1); |
| 46 | + final String classFQN = value.substring(0, value.lastIndexOf("::")); |
| 47 | + final PhpIndex phpIndex = PhpIndex.getInstance(element.getProject()); |
44 | 48 |
|
45 |
| - PhpIndex phpIndex = PhpIndex.getInstance(element.getProject()); |
46 | 49 | for (final PhpClass phpClass : phpIndex.getAnyByFQN(classFQN)) {
|
47 | 50 | members.addAll(phpClass.getFields());
|
48 | 51 | members.addAll(phpClass.getMethods());
|
49 | 52 | members.removeIf(c -> !c.getName().equals(elementName));
|
50 | 53 | }
|
51 | 54 |
|
52 |
| - if (members.size() > 0) { |
53 |
| - TextRange range = new TextRange( |
| 55 | + if (!members.isEmpty()) { |
| 56 | + final String origValue = element.getText(); |
| 57 | + final TextRange range = new TextRange( |
54 | 58 | origValue.indexOf(elementName),
|
55 | 59 | origValue.indexOf(elementName) + elementName.length()
|
56 | 60 | );
|
57 | 61 | psiReferences.add(new PolyVariantReferenceBase(element, range, members));
|
58 | 62 | }
|
59 |
| - return psiReferences.toArray(new PsiReference[psiReferences.size()]); |
| 63 | + |
| 64 | + return psiReferences.toArray(new PsiReference[0]); |
60 | 65 | }
|
61 | 66 | }
|
0 commit comments