Skip to content

Commit 4b13d2b

Browse files
committed
Fixed bugs
- layout container references
1 parent c49cef2 commit 4b13d2b

11 files changed

+122
-114
lines changed

src/com/magento/idea/magento2plugin/php/util/PsiContextMatcherManager.java

-27
This file was deleted.

src/com/magento/idea/magento2plugin/xml/di/completion/DiCompletionContributor.java

+2-57
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.magento.idea.magento2plugin.xml.di.completion;
22

33
import com.intellij.codeInsight.completion.*;
4-
import com.intellij.openapi.project.Project;
54
import com.intellij.patterns.XmlPatterns;
65
import com.intellij.psi.PsiElement;
76
import com.intellij.psi.PsiReference;
@@ -13,18 +12,17 @@
1312
import com.jetbrains.php.PhpIndex;
1413
import com.jetbrains.php.lang.psi.elements.Parameter;
1514
import com.jetbrains.php.lang.psi.elements.PhpClass;
16-
import com.magento.idea.magento2plugin.util.PsiContextMatcherI;
1715
import com.magento.idea.magento2plugin.xml.completion.ClassCompletionProvider;
1816
import com.magento.idea.magento2plugin.xml.completion.CompletionProviderI;
1917
import com.magento.idea.magento2plugin.xml.completion.InterfaceCompletionProvider;
2018
import com.magento.idea.magento2plugin.xml.completion.VirtualTypeCompletionProvider;
2119
import com.magento.idea.magento2plugin.xml.di.XmlHelper;
22-
import com.magento.idea.magento2plugin.xml.di.index.VirtualTypesNamesFileBasedIndex;
20+
import com.magento.idea.magento2plugin.xml.util.ParentTypeMatcher;
21+
import com.magento.idea.magento2plugin.xml.util.VirtualTypeParentMatcher;
2322
import org.jetbrains.annotations.NotNull;
2423
import org.jetbrains.annotations.Nullable;
2524

2625
import java.util.ArrayList;
27-
import java.util.List;
2826

2927
/**
3028
* Created by dkvashnin on 10/15/15.
@@ -129,59 +127,6 @@ public void addCompletions(@NotNull CompletionParameters parameters,
129127
);
130128
}
131129

132-
private class ParentTypeMatcher implements PsiContextMatcherI<PsiElement> {
133-
134-
private PhpClass parentType;
135-
136-
public ParentTypeMatcher(PhpClass parentType) {
137-
this.parentType = parentType;
138-
}
139-
140-
@Override
141-
public boolean match(PsiElement psiElement) {
142-
if (!(psiElement instanceof PhpClass)) {
143-
return false;
144-
}
145-
146-
return parentType.equals(psiElement)
147-
|| match(((PhpClass)psiElement).getImplementedInterfaces())
148-
|| match(((PhpClass) psiElement).getSuperClass());
149-
}
150-
151-
public boolean match(@Nullable PhpClass[] probableMistakes) {
152-
if (probableMistakes == null) {
153-
return false;
154-
}
155-
156-
boolean result = false;
157-
158-
for (PhpClass probableMistake : probableMistakes) {
159-
result = parentType.equals(probableMistake) || match(probableMistake.getImplementedInterfaces());
160-
}
161-
162-
return result;
163-
}
164-
}
165-
166-
private class VirtualTypeParentMatcher implements PsiContextMatcherI<String> {
167-
private ParentTypeMatcher parentTypeMatcher;
168-
private Project project;
169-
170-
public VirtualTypeParentMatcher(ParentTypeMatcher parentTypeMatcher, Project project) {
171-
this.parentTypeMatcher = parentTypeMatcher;
172-
this.project = project;
173-
}
174-
175-
@Override
176-
public boolean match(String virtualType) {
177-
List<PhpClass> superParentTypes = VirtualTypesNamesFileBasedIndex.getSuperParentTypes(project, virtualType);
178-
179-
return parentTypeMatcher.match(
180-
superParentTypes.toArray(new PhpClass[superParentTypes.size()])
181-
);
182-
}
183-
}
184-
185130
@Nullable
186131
private PhpClass getPreferenceClass(PsiElement psiElement) {
187132
XmlAttribute parentAttribute = PsiTreeUtil.getParentOfType(psiElement, XmlAttribute.class);

src/com/magento/idea/magento2plugin/xml/layout/LayoutUtility.java

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public static boolean isLayoutFile(VirtualFile virtualFile) {
2323
return virtualFile.getFileType() == XmlFileType.INSTANCE && parent.isDirectory() && parent.getName().endsWith("layout");
2424
}
2525

26+
public static boolean isLayoutFile(PsiFile psiFile) {
27+
VirtualFile virtualFile = psiFile.getVirtualFile();
28+
return isLayoutFile(virtualFile);
29+
}
30+
2631
public static List<XmlFile> getLayoutFiles(Project project, @Nullable String fileName) {
2732
List<XmlFile> results = new ArrayList<XmlFile>();
2833
Collection<VirtualFile> xmlFiles = FilenameIndex.getAllFilesByExt(project, "xml");

src/com/magento/idea/magento2plugin/xml/layout/completion/LayoutCompletionContributor.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,8 @@
99
import com.intellij.util.ProcessingContext;
1010
import com.magento.idea.magento2plugin.php.util.ImplementationMatcher;
1111
import com.magento.idea.magento2plugin.php.util.MagentoTypes;
12-
import com.magento.idea.magento2plugin.php.util.PsiContextMatcherManager;
13-
import com.magento.idea.magento2plugin.util.PsiContextMatcherI;
1412
import com.magento.idea.magento2plugin.xml.XmlHelperUtility;
1513
import com.magento.idea.magento2plugin.xml.completion.ClassCompletionProvider;
16-
import com.magento.idea.magento2plugin.xml.completion.CompletionProviderI;
1714
import com.magento.idea.magento2plugin.xml.completion.VirtualTypeCompletionProvider;
1815
import com.magento.idea.magento2plugin.xml.layout.LayoutUtility;
1916
import com.magento.idea.magento2plugin.xml.layout.index.BlockFileBasedIndex;
@@ -36,8 +33,7 @@ public LayoutCompletionContributor() {
3633
@Override
3734
protected void addCompletions(@NotNull CompletionParameters completionParameters, ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
3835
PsiElement psiElement = completionParameters.getOriginalPosition();
39-
ImplementationMatcher completionContext = PsiContextMatcherManager.getInstance()
40-
.getImplementationMatcherForType(MagentoTypes.BLOCK_TYPE);
36+
ImplementationMatcher completionContext = new ImplementationMatcher(MagentoTypes.BLOCK_TYPE);
4137
completionResultSet.addAllElements(
4238
ClassCompletionProvider.INSTANCE.collectCompletionResult(psiElement, completionContext)
4339
);

src/com/magento/idea/magento2plugin/xml/layout/index/ContainerFileBasedIndex.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public ID<String, Void> getName() {
1818
@NotNull
1919
@Override
2020
public DataIndexer<String, Void, FileContent> getIndexer() {
21-
return new LayoutDataIndexer("block", "name");
21+
return new LayoutDataIndexer("container", "name");
22+
}
23+
24+
@Override
25+
public int getVersion() {
26+
return 1;
2227
}
2328
}

src/com/magento/idea/magento2plugin/xml/layout/index/util/LayoutIndexUtility.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.jetbrains.php.lang.psi.elements.PhpClass;
1212
import com.magento.idea.magento2plugin.xml.layout.index.BlockClassFileBasedIndex;
1313
import com.magento.idea.magento2plugin.xml.layout.index.BlockFileBasedIndex;
14+
import com.magento.idea.magento2plugin.xml.layout.index.ContainerFileBasedIndex;
1415

1516
import java.util.ArrayList;
1617
import java.util.Collection;
@@ -65,7 +66,7 @@ public static List<XmlTag> getBlockDeclarations(String componentName, Project pr
6566
}
6667

6768
public static List<XmlTag> getContainerDeclarations(String componentName, Project project) {
68-
return getComponentDeclarations(componentName, "container", BlockFileBasedIndex.NAME, project, new NameComponentMatcher());
69+
return getComponentDeclarations(componentName, "container", ContainerFileBasedIndex.NAME, project, new NameComponentMatcher());
6970
}
7071

7172
public static List<XmlTag> getBlockClassDeclarations(PhpClass phpClass, Project project) {

src/com/magento/idea/magento2plugin/xml/layout/reference/LayoutReferenceContributor.java

+28-11
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@
22

33
import com.intellij.patterns.XmlPatterns;
44
import com.intellij.psi.*;
5-
import com.magento.idea.magento2plugin.php.util.ImplementationMatcher;
6-
import com.magento.idea.magento2plugin.php.util.MagentoTypes;
5+
import com.intellij.util.ProcessingContext;
76
import com.magento.idea.magento2plugin.xml.XmlHelperUtility;
87
import com.magento.idea.magento2plugin.xml.di.reference.provider.XmlReferenceProvider;
98
import com.magento.idea.magento2plugin.xml.layout.LayoutUtility;
109
import com.magento.idea.magento2plugin.xml.layout.reference.fill.BlockResultsFiller;
1110
import com.magento.idea.magento2plugin.xml.layout.reference.fill.ContainerResultsFiller;
11+
import com.magento.idea.magento2plugin.xml.reference.TypeReference;
1212
import com.magento.idea.magento2plugin.xml.reference.util.ClassesResultsFiller;
13-
import com.magento.idea.magento2plugin.xml.reference.util.ImplementationContextDecorator;
1413
import com.magento.idea.magento2plugin.xml.reference.util.ReferenceResultsFiller;
1514
import com.magento.idea.magento2plugin.xml.reference.util.VirtualTypesResultsFiller;
1615
import org.jetbrains.annotations.NotNull;
@@ -27,12 +26,9 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar psiReferen
2726
// <block class="\BlockClass" />
2827
psiReferenceRegistrar.registerReferenceProvider(
2928
XmlHelperUtility.getTagAttributeValuePattern("block", "class"),
30-
new XmlReferenceProvider(
29+
new LayoutReferenceProvider(
3130
new ReferenceResultsFiller[]{
32-
new ImplementationContextDecorator(
33-
ClassesResultsFiller.INSTANCE,
34-
new ImplementationMatcher(MagentoTypes.BLOCK_TYPE)
35-
),
31+
ClassesResultsFiller.INSTANCE,
3632
VirtualTypesResultsFiller.INSTANCE
3733
}
3834
)
@@ -49,7 +45,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar psiReferen
4945
XmlHelperUtility.getTagAttributeValuePattern("move", "before"),
5046
XmlHelperUtility.getTagAttributeValuePattern("move", "after")
5147
),
52-
new XmlReferenceProvider(
48+
new LayoutReferenceProvider(
5349
new ReferenceResultsFiller[]{
5450
new BlockResultsFiller()
5551
}
@@ -58,7 +54,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar psiReferen
5854

5955
psiReferenceRegistrar.registerReferenceProvider(
6056
XmlHelperUtility.getTagAttributeValuePattern("referenceContainer", "name"),
61-
new XmlReferenceProvider(
57+
new LayoutReferenceProvider(
6258
new ReferenceResultsFiller[]{
6359
new ContainerResultsFiller()
6460
}
@@ -67,7 +63,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar psiReferen
6763

6864
psiReferenceRegistrar.registerReferenceProvider(
6965
XmlHelperUtility.getTagAttributeValuePattern("update", "handle"),
70-
new XmlReferenceProvider(
66+
new LayoutReferenceProvider(
7167
new ReferenceResultsFiller[]{
7268
new ReferenceResultsFiller() {
7369
@Override
@@ -85,4 +81,25 @@ public void fillResolveResults(PsiElement psiElement, List<ResolveResult> result
8581
)
8682
);
8783
}
84+
85+
private class LayoutReferenceProvider extends PsiReferenceProvider {
86+
private final ReferenceResultsFiller[] resultsFillers;
87+
88+
public LayoutReferenceProvider(ReferenceResultsFiller[] resultsFillers) {
89+
super();
90+
this.resultsFillers = resultsFillers;
91+
}
92+
93+
@NotNull
94+
@Override
95+
public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) {
96+
PsiFile containingFile = psiElement.getContainingFile();
97+
if (!LayoutUtility.isLayoutFile(containingFile)) {
98+
return new PsiReference[0];
99+
}
100+
101+
return new PsiReference[]{new TypeReference(psiElement, resultsFillers)};
102+
}
103+
}
104+
88105
}

src/com/magento/idea/magento2plugin/xml/observer/completion/EventCompletionContributor.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
import com.intellij.util.ProcessingContext;
77
import com.intellij.util.indexing.FileBasedIndex;
88
import com.magento.idea.magento2plugin.php.util.MagentoTypes;
9-
import com.magento.idea.magento2plugin.php.util.PsiContextMatcherManager;
109
import com.magento.idea.magento2plugin.xml.XmlHelperUtility;
1110
import com.magento.idea.magento2plugin.xml.completion.ClassCompletionProvider;
12-
import com.magento.idea.magento2plugin.xml.completion.CompletionProviderI;
1311
import com.magento.idea.magento2plugin.xml.completion.VirtualTypeCompletionProvider;
1412
import com.magento.idea.magento2plugin.php.util.ImplementationMatcher;
1513
import com.magento.idea.magento2plugin.xml.observer.XmlHelper;
@@ -29,11 +27,12 @@ public EventCompletionContributor() {
2927
new CompletionProvider<CompletionParameters>() {
3028
@Override
3129
protected void addCompletions(@NotNull CompletionParameters completionParameters, ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
32-
ImplementationMatcher completionContext = PsiContextMatcherManager.getInstance()
33-
.getImplementationMatcherForType(MagentoTypes.OBSERVER_TYPE);
30+
ImplementationMatcher completionContext = new ImplementationMatcher(MagentoTypes.OBSERVER_TYPE);
3431
PsiElement psiElement = completionParameters.getOriginalPosition();
3532

36-
completionResultSet.addAllElements(ClassCompletionProvider.INSTANCE.collectCompletionResult(psiElement, completionContext));
33+
completionResultSet.addAllElements(
34+
ClassCompletionProvider.INSTANCE.collectCompletionResult(psiElement, completionContext)
35+
);
3736
completionResultSet.addAllElements(VirtualTypeCompletionProvider.INSTANCE.collectCompletionResult(psiElement));
3837
}
3938
}

src/com/magento/idea/magento2plugin/xml/observer/reference/ObserverReferenceContributor.java

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package com.magento.idea.magento2plugin.xml.observer.reference;
22

33
import com.intellij.psi.*;
4-
import com.magento.idea.magento2plugin.php.util.ImplementationMatcher;
5-
import com.magento.idea.magento2plugin.php.util.MagentoTypes;
64
import com.magento.idea.magento2plugin.xml.di.reference.provider.XmlReferenceProvider;
75
import com.magento.idea.magento2plugin.xml.observer.XmlHelper;
86
import com.magento.idea.magento2plugin.xml.observer.reference.util.EventsDeclarationsFilesResultsFiller;
97
import com.magento.idea.magento2plugin.xml.reference.util.ClassesResultsFiller;
10-
import com.magento.idea.magento2plugin.xml.reference.util.ImplementationContextDecorator;
118
import com.magento.idea.magento2plugin.xml.reference.util.ReferenceResultsFiller;
129
import com.magento.idea.magento2plugin.xml.reference.util.VirtualTypesResultsFiller;
1310
import org.jetbrains.annotations.NotNull;
@@ -24,10 +21,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar psiReferen
2421
XmlHelper.getTagAttributeValuePattern(XmlHelper.OBSERVER_TAG, XmlHelper.INSTANCE_ATTRIBUTE),
2522
new XmlReferenceProvider(
2623
new ReferenceResultsFiller[]{
27-
new ImplementationContextDecorator(
28-
ClassesResultsFiller.INSTANCE,
29-
new ImplementationMatcher(MagentoTypes.OBSERVER_TYPE)
30-
),
24+
ClassesResultsFiller.INSTANCE,
3125
VirtualTypesResultsFiller.INSTANCE
3226
}
3327
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.magento.idea.magento2plugin.xml.util;
2+
3+
import com.intellij.psi.PsiElement;
4+
import com.jetbrains.php.lang.psi.elements.PhpClass;
5+
import com.magento.idea.magento2plugin.util.PsiContextMatcherI;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
/**
9+
* Created by dkvashnin on 12/25/15.
10+
*/
11+
public class ParentTypeMatcher implements PsiContextMatcherI<PsiElement> {
12+
private PhpClass parentType;
13+
14+
public ParentTypeMatcher(PhpClass parentType) {
15+
this.parentType = parentType;
16+
}
17+
18+
@Override
19+
public boolean match(PsiElement psiElement) {
20+
if (!(psiElement instanceof PhpClass)) {
21+
return false;
22+
}
23+
24+
return parentType.equals(psiElement)
25+
|| match(((PhpClass)psiElement).getImplementedInterfaces())
26+
|| match(((PhpClass) psiElement).getSuperClass());
27+
}
28+
29+
public boolean match(@Nullable PhpClass[] probableMistakes) {
30+
if (probableMistakes == null) {
31+
return false;
32+
}
33+
34+
boolean result = false;
35+
36+
for (PhpClass probableMistake : probableMistakes) {
37+
result = parentType.equals(probableMistake) || match(probableMistake.getImplementedInterfaces());
38+
}
39+
40+
return result;
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.magento.idea.magento2plugin.xml.util;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.jetbrains.php.lang.psi.elements.PhpClass;
5+
import com.magento.idea.magento2plugin.util.PsiContextMatcherI;
6+
import com.magento.idea.magento2plugin.xml.di.completion.DiCompletionContributor;
7+
import com.magento.idea.magento2plugin.xml.di.index.VirtualTypesNamesFileBasedIndex;
8+
9+
import java.util.List;
10+
11+
/**
12+
* Created by dkvashnin on 12/25/15.
13+
*/
14+
public class VirtualTypeParentMatcher implements PsiContextMatcherI<String> {
15+
private ParentTypeMatcher parentTypeMatcher;
16+
private Project project;
17+
18+
public VirtualTypeParentMatcher(ParentTypeMatcher parentTypeMatcher, Project project) {
19+
this.parentTypeMatcher = parentTypeMatcher;
20+
this.project = project;
21+
}
22+
23+
@Override
24+
public boolean match(String virtualType) {
25+
List<PhpClass> superParentTypes = VirtualTypesNamesFileBasedIndex.getSuperParentTypes(project, virtualType);
26+
27+
return parentTypeMatcher.match(
28+
superParentTypes.toArray(new PhpClass[superParentTypes.size()])
29+
);
30+
}
31+
}

0 commit comments

Comments
 (0)