|
1 |
| -/** |
| 1 | +/* |
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;
|
|
14 | 15 | import com.jetbrains.php.lang.psi.elements.PhpNamespace;
|
15 | 16 | import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase;
|
16 | 17 | import com.magento.idea.magento2plugin.util.RegExUtil;
|
17 |
| -import org.jetbrains.annotations.NotNull; |
18 | 18 | import java.util.ArrayList;
|
19 | 19 | import java.util.Collection;
|
20 | 20 | import java.util.List;
|
| 21 | +import java.util.Locale; |
21 | 22 | import java.util.regex.Matcher;
|
22 | 23 | import java.util.regex.Pattern;
|
| 24 | +import org.jetbrains.annotations.NotNull; |
23 | 25 |
|
| 26 | +@SuppressWarnings({"PMD.AvoidInstantiatingObjectsInLoops"}) |
24 | 27 | public class PhpClassReferenceProvider extends PsiReferenceProvider {
|
25 | 28 |
|
26 | 29 | @NotNull
|
27 | 30 | @Override
|
28 |
| - public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { |
29 |
| - List<PsiReference> psiReferences = new ArrayList<>(); |
| 31 | + public PsiReference[] getReferencesByElement( |
| 32 | + final @NotNull PsiElement element, |
| 33 | + final @NotNull ProcessingContext context |
| 34 | + ) { |
30 | 35 |
|
31 |
| - String origValue = element.getText(); |
| 36 | + final String origValue = element.getText(); |
32 | 37 |
|
33 |
| - Pattern pattern = Pattern.compile(RegExUtil.PhpRegex.FQN); |
34 |
| - Matcher matcher = pattern.matcher(origValue); |
| 38 | + final Pattern pattern = Pattern.compile(RegExUtil.PhpRegex.FQN); |
| 39 | + final Matcher matcher = pattern.matcher(origValue); |
35 | 40 | if (!matcher.find()) {
|
36 | 41 | return PsiReference.EMPTY_ARRAY;
|
37 | 42 | }
|
38 | 43 |
|
39 |
| - String classFQN = origValue.replaceAll("^\"|\"$", "");; |
40 |
| - String[] fqnParts = classFQN.split("\\\\"); |
| 44 | + final String classFQN = origValue.replaceAll("^\"|\"$", ""); |
| 45 | + final String[] fqnParts = classFQN.split("\\\\"); |
41 | 46 |
|
42 |
| - PhpIndex phpIndex = PhpIndex.getInstance(element.getProject()); |
| 47 | + final PhpIndex phpIndex = PhpIndex.getInstance(element.getProject()); |
43 | 48 |
|
44 |
| - StringBuilder namespace = new StringBuilder(); |
| 49 | + final StringBuilder namespace = new StringBuilder(); |
45 | 50 | String namespacePart;
|
| 51 | + final List<PsiReference> psiReferences = new ArrayList<>(); |
46 | 52 | for (int i = 0; i < fqnParts.length - 1; i++) {
|
47 | 53 | namespacePart = fqnParts[i];
|
48 | 54 |
|
49 | 55 | namespace.append("\\");
|
50 | 56 | namespace.append(namespacePart);
|
51 |
| - Collection<PhpNamespace> references = phpIndex.getNamespacesByName(namespace.toString().toLowerCase()); |
52 |
| - if (references.size() > 0) { |
53 |
| - TextRange range = new TextRange( |
| 57 | + final Collection<PhpNamespace> references = |
| 58 | + phpIndex.getNamespacesByName(namespace.toString().toLowerCase( |
| 59 | + new Locale("en","EN")) |
| 60 | + ); |
| 61 | + if (!references.isEmpty()) { |
| 62 | + final TextRange range = new TextRange( |
54 | 63 | origValue.indexOf(classFQN) + namespace.toString().lastIndexOf(92),
|
55 |
| - origValue.indexOf(classFQN) + namespace.toString().lastIndexOf(92) + namespacePart.length() |
| 64 | + origValue.indexOf(classFQN) + namespace.toString().lastIndexOf(92) |
| 65 | + + namespacePart.length() |
56 | 66 | );
|
57 | 67 | psiReferences.add(new PolyVariantReferenceBase(element, range, references));
|
58 | 68 | }
|
59 | 69 | }
|
60 | 70 |
|
61 |
| - String className = classFQN.substring(classFQN.lastIndexOf(92) + 1); |
62 |
| - Collection<PhpClass> classes = phpIndex.getAnyByFQN(classFQN); |
63 |
| - if (classes.size() > 0) { |
64 |
| - TextRange range = new TextRange( |
| 71 | + final String className = classFQN.substring(classFQN.lastIndexOf(92) + 1); |
| 72 | + final Collection<PhpClass> classes = phpIndex.getAnyByFQN(classFQN); |
| 73 | + if (!classes.isEmpty()) { |
| 74 | + final TextRange range = new TextRange( |
65 | 75 | origValue.lastIndexOf(92) + 1,
|
66 | 76 | origValue.lastIndexOf(92) + 1 + className.length()
|
67 | 77 | );
|
68 | 78 | psiReferences.add(new PolyVariantReferenceBase(element, range, classes));
|
69 | 79 | }
|
70 | 80 |
|
71 |
| - return psiReferences.toArray(new PsiReference[psiReferences.size()]); |
| 81 | + return psiReferences.toArray(new PsiReference[0]); |
72 | 82 | }
|
73 | 83 | }
|
0 commit comments