Skip to content

Commit 2993a51

Browse files
committed
Address set entries as per string value
1 parent 6410b06 commit 2993a51

File tree

10 files changed

+387
-248
lines changed

10 files changed

+387
-248
lines changed

META-INF/plugin.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ It is a great inspiration for possible solutions and parts of the code.</p>
4545
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
4646
<idea-version since-build="145.0"/>
4747

48+
<depends>com.intellij.modules.platform</depends>
4849
<depends>com.jetbrains.php</depends>
4950

5051
<extensions defaultExtensionNs="com.intellij">
@@ -54,7 +55,7 @@ It is a great inspiration for possible solutions and parts of the code.</p>
5455
<php.typeProvider2 implementation="com.cedricziel.idea.typo3.provider.ObjectManagerTypeProvider" />
5556

5657
<!-- indexes -->
57-
<fileBasedIndex implementation="com.cedricziel.idea.typo3.index.ServiceIndex"/>
58+
<fileBasedIndex implementation="com.cedricziel.idea.typo3.index.CoreServiceMapStubIndex"/>
5859
</extensions>
5960

6061
<extensions defaultExtensionNs="com.jetbrains.php">
@@ -65,4 +66,9 @@ It is a great inspiration for possible solutions and parts of the code.</p>
6566
<!-- Add your actions here -->
6667
</actions>
6768

69+
<project-components>
70+
<component>
71+
<implementation-class>TYPO3CMSProjectComponent</implementation-class>
72+
</component>
73+
</project-components>
6874
</idea-plugin>

src/TYPO3CMSProjectComponent.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import com.intellij.openapi.components.ProjectComponent;
2+
import com.intellij.openapi.diagnostic.Logger;
3+
import com.intellij.openapi.project.Project;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
public class TYPO3CMSProjectComponent implements ProjectComponent {
7+
8+
final private static Logger LOG = Logger.getInstance("TYPO3-CMS-Plugin");
9+
10+
private Project project;
11+
12+
public TYPO3CMSProjectComponent(Project project) {
13+
this.project = project;
14+
}
15+
16+
@Override
17+
public void initComponent() {
18+
}
19+
20+
@Override
21+
public void disposeComponent() {
22+
}
23+
24+
@Override
25+
@NotNull
26+
public String getComponentName() {
27+
return "TYPO3CMSProjectComponent";
28+
}
29+
30+
@Override
31+
public void projectOpened() {
32+
// called when project is opened
33+
}
34+
35+
@Override
36+
public void projectClosed() {
37+
// called when project is being closed
38+
}
39+
40+
public static Logger getLogger() {
41+
return LOG;
42+
}
43+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.cedricziel.idea.typo3.container;
2+
3+
import com.cedricziel.idea.typo3.domain.TYPO3ServiceDefinition;
4+
import com.cedricziel.idea.typo3.psi.visitor.CoreServiceDefinitionParserVisitor;
5+
import com.intellij.openapi.project.Project;
6+
import com.intellij.openapi.vfs.VirtualFile;
7+
import com.intellij.psi.PsiFile;
8+
import com.intellij.psi.PsiManager;
9+
import com.intellij.psi.search.FileTypeIndex;
10+
import com.intellij.psi.search.GlobalSearchScope;
11+
import com.intellij.util.indexing.FileBasedIndex;
12+
import com.jetbrains.php.lang.PhpFileType;
13+
14+
import java.util.*;
15+
16+
/**
17+
* Parses the core services to a map. Core Services are not traditional
18+
* services in a DIC, but rather named elements in a service locator.
19+
*/
20+
public class CoreServiceParser {
21+
22+
private HashMap<String, ArrayList<TYPO3ServiceDefinition>> serviceMap;
23+
24+
public CoreServiceParser() {
25+
this.serviceMap = new HashMap<>();
26+
}
27+
28+
private void collectServices(Project project) {
29+
FileBasedIndex index = FileBasedIndex.getInstance();
30+
Collection<VirtualFile> containingFiles = index.getContainingFiles(
31+
FileTypeIndex.NAME,
32+
PhpFileType.INSTANCE,
33+
GlobalSearchScope.allScope(project)
34+
);
35+
containingFiles.removeIf(virtualFile -> !(virtualFile.getName().contains("ext_localconf.php")));
36+
37+
for (VirtualFile projectFile : containingFiles) {
38+
PsiFile psiFile = PsiManager.getInstance(project).findFile(projectFile);
39+
if (psiFile != null) {
40+
psiFile.accept(new CoreServiceDefinitionParserVisitor(serviceMap));
41+
}
42+
}
43+
}
44+
45+
public Boolean has(Project project, String serviceId) {
46+
return this.serviceMap.containsKey(serviceId);
47+
}
48+
49+
public List<TYPO3ServiceDefinition> resolve(Project project, String serviceId) {
50+
return this.serviceMap.get(serviceId);
51+
}
52+
53+
public void collect(Project project) {
54+
collectServices(project);
55+
}
56+
}

src/com/cedricziel/idea/typo3/domain/TYPO3ServiceDefinition.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,43 @@ public String getSignature() {
120120
public void setSignature(String signature) {
121121
this.signature = signature;
122122
}
123+
124+
@Override
125+
public boolean equals(Object o) {
126+
if (this == o) return true;
127+
if (o == null || getClass() != o.getClass()) return false;
128+
129+
TYPO3ServiceDefinition that = (TYPO3ServiceDefinition) o;
130+
131+
if (!id.equals(that.id)) return false;
132+
if (extensionName != null ? !extensionName.equals(that.extensionName) : that.extensionName != null)
133+
return false;
134+
if (className != null ? !className.equals(that.className) : that.className != null) return false;
135+
if (title != null ? !title.equals(that.title) : that.title != null) return false;
136+
if (description != null ? !description.equals(that.description) : that.description != null) return false;
137+
if (subType != null ? !subType.equals(that.subType) : that.subType != null) return false;
138+
if (available != null ? !available.equals(that.available) : that.available != null) return false;
139+
if (priority != null ? !priority.equals(that.priority) : that.priority != null) return false;
140+
if (quality != null ? !quality.equals(that.quality) : that.quality != null) return false;
141+
if (os != null ? !os.equals(that.os) : that.os != null) return false;
142+
if (exec != null ? !exec.equals(that.exec) : that.exec != null) return false;
143+
return signature != null ? signature.equals(that.signature) : that.signature == null;
144+
}
145+
146+
@Override
147+
public int hashCode() {
148+
int result = id.hashCode();
149+
result = 31 * result + (extensionName != null ? extensionName.hashCode() : 0);
150+
result = 31 * result + (className != null ? className.hashCode() : 0);
151+
result = 31 * result + (title != null ? title.hashCode() : 0);
152+
result = 31 * result + (description != null ? description.hashCode() : 0);
153+
result = 31 * result + (subType != null ? subType.hashCode() : 0);
154+
result = 31 * result + (available != null ? available.hashCode() : 0);
155+
result = 31 * result + (priority != null ? priority.hashCode() : 0);
156+
result = 31 * result + (quality != null ? quality.hashCode() : 0);
157+
result = 31 * result + (os != null ? os.hashCode() : 0);
158+
result = 31 * result + (exec != null ? exec.hashCode() : 0);
159+
result = 31 * result + (signature != null ? signature.hashCode() : 0);
160+
return result;
161+
}
123162
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.cedricziel.idea.typo3.index;
2+
3+
import com.cedricziel.idea.typo3.domain.TYPO3ServiceDefinition;
4+
import com.cedricziel.idea.typo3.index.externalizer.StringSetDataExternalizer;
5+
import com.cedricziel.idea.typo3.psi.visitor.CoreServiceDefinitionParserVisitor;
6+
import com.intellij.psi.PsiFile;
7+
import com.intellij.util.indexing.*;
8+
import com.intellij.util.io.DataExternalizer;
9+
import com.intellij.util.io.EnumeratorStringDescriptor;
10+
import com.intellij.util.io.KeyDescriptor;
11+
import com.jetbrains.php.lang.PhpFileType;
12+
import com.jetbrains.php.lang.psi.PhpFile;
13+
import gnu.trove.THashMap;
14+
import org.jetbrains.annotations.NotNull;
15+
16+
import java.util.*;
17+
18+
public class CoreServiceMapStubIndex extends FileBasedIndexExtension<String, Set<String>> {
19+
20+
public static final ID<String, Set<String>> KEY = ID.create("com.cedricziel.idea.typo3.index.core_service_map");
21+
public static final String EXT_LOCALCONF_PHP_FILENAME = "ext_localconf.php";
22+
23+
private final KeyDescriptor<String> myKeyDescriptor = new EnumeratorStringDescriptor();
24+
25+
@NotNull
26+
@Override
27+
public DataIndexer<String, Set<String>, FileContent> getIndexer() {
28+
29+
return inputData -> {
30+
31+
final Map<String, Set<String>> map = new THashMap<>();
32+
33+
PsiFile psiFile = inputData.getPsiFile();
34+
35+
if (psiFile instanceof PhpFile) {
36+
Map<String, ArrayList<TYPO3ServiceDefinition>> serviceMap = new THashMap<>();
37+
psiFile.accept(new CoreServiceDefinitionParserVisitor(serviceMap));
38+
39+
serviceMap.forEach((serviceId, definitionList) -> {
40+
Set<String> implementations = new HashSet<>();
41+
definitionList.forEach(typo3ServiceDefinition -> implementations.add(typo3ServiceDefinition.getClassName()));
42+
map.put(serviceId, implementations);
43+
});
44+
}
45+
46+
return map;
47+
};
48+
}
49+
50+
@NotNull
51+
@Override
52+
public ID<String, Set<String>> getName() {
53+
return KEY;
54+
}
55+
56+
@NotNull
57+
@Override
58+
public KeyDescriptor<String> getKeyDescriptor() {
59+
return this.myKeyDescriptor;
60+
}
61+
62+
@NotNull
63+
public DataExternalizer<Set<String>> getValueExternalizer() {
64+
return new StringSetDataExternalizer();
65+
}
66+
67+
@NotNull
68+
@Override
69+
public FileBasedIndex.InputFilter getInputFilter() {
70+
return file -> file.getFileType() == PhpFileType.INSTANCE && file.getName().equals(EXT_LOCALCONF_PHP_FILENAME);
71+
}
72+
73+
@Override
74+
public boolean dependsOnFileContent() {
75+
return true;
76+
}
77+
78+
@Override
79+
public int getVersion() {
80+
return 1;
81+
}
82+
83+
}

0 commit comments

Comments
 (0)