|
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 = matcher.group(); |
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 | | - namespace.append("\\"); |
50 | | - namespace.append(namespacePart); |
51 | | - Collection<PhpNamespace> references = phpIndex.getNamespacesByName(namespace.toString().toLowerCase()); |
52 | | - if (references.size() > 0) { |
53 | | - TextRange range = new TextRange( |
| 55 | + namespace.append("\\");//NOPMD |
| 56 | + namespace.append(namespacePart);//NOPMD |
| 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