Skip to content

Commit 07a3672

Browse files
committed
Merge branch '3.1.3-develop' of github.com:magento/magento2-phpstorm-plugin into fix-bug-invalid-check-setup-version
2 parents c48a75d + edcff33 commit 07a3672

File tree

2 files changed

+63
-41
lines changed

2 files changed

+63
-41
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0).
1111
- Require restart on plugin update due to using native libraries
1212

1313
### Fixed
14+
15+
- Class completion doesn't display interfaces
1416
- Fixed invalid check 'setup_version' in the etc/module.xml
1517

1618
## 3.1.2

src/com/magento/idea/magento2plugin/completion/provider/PhpClassCompletionProvider.java

+61-41
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright © Magento, Inc. All rights reserved.
33
* See COPYING.txt for license details.
44
*/
5+
56
package com.magento.idea.magento2plugin.completion.provider;
67

78
import com.intellij.codeInsight.completion.CompletionParameters;
@@ -18,87 +19,106 @@
1819
import com.jetbrains.php.lang.psi.elements.PhpNamespace;
1920
import com.magento.idea.magento2plugin.util.RegExUtil;
2021
import gnu.trove.THashSet;
21-
import org.jetbrains.annotations.NotNull;
2222
import java.util.ArrayList;
2323
import java.util.Collection;
24+
import java.util.Locale;
2425
import java.util.regex.Matcher;
2526
import java.util.regex.Pattern;
2627
import java.util.stream.Collectors;
28+
import org.jetbrains.annotations.NotNull;
2729

2830
public class PhpClassCompletionProvider extends CompletionProvider<CompletionParameters> {
2931

30-
final private static String PHP_CLASS_COMPLETION_REGEX
32+
private static final String PHP_CLASS_COMPLETION_REGEX
3133
= "\\\\?" + RegExUtil.PhpRegex.FQN + "\\\\?";
3234

35+
@SuppressWarnings({
36+
"PMD.CyclomaticComplexity",
37+
"PMD.NPathComplexity"
38+
})
3339
@Override
34-
protected void addCompletions(@NotNull CompletionParameters parameters,
35-
ProcessingContext context,
36-
@NotNull CompletionResultSet result) {
37-
PsiElement position = parameters.getPosition().getOriginalElement();
40+
protected void addCompletions(
41+
final @NotNull CompletionParameters parameters,
42+
final ProcessingContext context,
43+
final @NotNull CompletionResultSet result
44+
) {
45+
final PsiElement position = parameters.getPosition().getOriginalElement();
3846
if (position == null) {
3947
return;
4048
}
41-
String prefix = result.getPrefixMatcher().getPrefix();
42-
Matcher matcher = Pattern.compile(PHP_CLASS_COMPLETION_REGEX).matcher(prefix);
49+
final String prefix = result.getPrefixMatcher().getPrefix();
50+
final Matcher matcher = Pattern.compile(PHP_CLASS_COMPLETION_REGEX)
51+
.matcher(prefix);
4352
if (!matcher.matches()) {
4453
return;
4554
}
4655

47-
String className = prefix.lastIndexOf(92) < 0 ? prefix : prefix.substring(prefix.lastIndexOf(92) + 1);
48-
String namespace = prefix.lastIndexOf(92) < 0 ? "" : prefix.substring(0, prefix.lastIndexOf(92));
56+
final String className = prefix.lastIndexOf(92) < 0 ? prefix : prefix
57+
.substring(prefix.lastIndexOf(92) + 1);
58+
final String namespace = prefix.lastIndexOf(92) < 0 ? "" : prefix
59+
.substring(0, prefix.lastIndexOf(92));
4960

50-
PhpIndex phpIndex = PhpIndex.getInstance(parameters.getPosition().getProject());
61+
final PhpIndex phpIndex = PhpIndex.getInstance(
62+
parameters.getPosition().getProject()
63+
);
5164

5265
final Collection<PhpClass> phpClasses = new THashSet<>();
5366
Collection<String> namespaceNames = new ArrayList<>();
5467

55-
if (!className.isEmpty()) {
56-
// case for input: "SomeClassOrNamespace"
57-
58-
// add classes
59-
Collection<String> classNames = phpIndex.getAllClassNames(new CamelHumpMatcher(className));
60-
for (String cName: classNames) {
61-
phpClasses.addAll(phpIndex.getClassesByName(cName));
68+
if (className.isEmpty()) {
69+
// add namespaces
70+
final Collection<PhpNamespace> namespaces
71+
= phpIndex.getNamespacesByName(("\\" + namespace)
72+
.toLowerCase(Locale.ROOT));
73+
for (final PhpNamespace nsp: namespaces) {
74+
phpClasses.addAll(PsiTreeUtil.getChildrenOfTypeAsList(
75+
nsp.getStatements(),
76+
PhpClass.class
77+
)
78+
);
6279
}
80+
81+
// add namespaces and classes (string representation)
82+
namespaceNames
83+
= phpIndex.getChildNamespacesByParentName("\\".concat(namespace)
84+
.concat("\\").toLowerCase(Locale.ROOT));
85+
namespaceNames
86+
= namespaceNames.stream().map(n -> namespace.concat("\\")
87+
.concat(n)).collect(Collectors.toList());
88+
} else {
6389
// add interfaces
64-
Collection<String> interfaceNames = phpIndex.getAllInterfaceNames();
65-
interfaceNames.removeIf(i -> !i.contains(className));
66-
for (String iName: interfaceNames) {
90+
final Collection<String> interfaceNames = phpIndex.getAllInterfaceNames();
91+
interfaceNames.removeIf(i -> !i.contains(className.toLowerCase(Locale.ROOT)));
92+
for (final String iName: interfaceNames) {
6793
phpClasses.addAll(phpIndex.getInterfacesByName(iName));
6894
}
69-
if (!namespace.isEmpty()) {
70-
phpClasses.removeIf(c -> !c.getPresentableFQN().startsWith(namespace));
71-
} else {
95+
// add classes
96+
final Collection<String> classNames = phpIndex.getAllClassNames(
97+
new CamelHumpMatcher(className)
98+
);
99+
for (final String cName: classNames) {
100+
phpClasses.addAll(phpIndex.getClassesByName(cName));
101+
}
102+
if (namespace.isEmpty()) {
72103
namespaceNames = phpIndex.getChildNamespacesByParentName("\\");
73104
namespaceNames.removeIf(n -> !n.contains(prefix));
105+
} else {
106+
phpClasses.removeIf(c -> !c.getPresentableFQN().startsWith(namespace));
74107
}
75-
} else {
76-
// case for input: "Some\Namespace\ + ^+<Space>"
77-
78-
// add namespaces
79-
Collection<PhpNamespace> namespaces = phpIndex.getNamespacesByName(("\\" + namespace).toLowerCase());
80-
for (PhpNamespace nsp: namespaces) {
81-
phpClasses.addAll(PsiTreeUtil.getChildrenOfTypeAsList(nsp.getStatements(), PhpClass.class));
82-
}
83-
84-
// add namespaces and classes (string representation)
85-
namespaceNames
86-
= phpIndex.getChildNamespacesByParentName("\\".concat(namespace).concat("\\").toLowerCase());
87-
namespaceNames
88-
= namespaceNames.stream().map(n -> namespace.concat("\\").concat(n)).collect(Collectors.toList());
89108
}
90109

91110
// add all above founded items to lookup builder
92-
// order is important (items with the same name override each other), add classes first
93-
for (PhpClass phpClass : phpClasses) {
111+
// order is important (items with the same name override each other),
112+
// add classes first
113+
for (final PhpClass phpClass : phpClasses) {
94114
result.addElement(
95115
LookupElementBuilder
96116
.create(phpClass.getPresentableFQN())
97117
.withIcon(phpClass.getIcon())
98118
);
99119
}
100120

101-
for (String nsName : namespaceNames) {
121+
for (final String nsName : namespaceNames) {
102122
result.addElement(
103123
LookupElementBuilder
104124
.create(nsName)

0 commit comments

Comments
 (0)