Skip to content

Commit 9430337

Browse files
authored
Merge pull request #3 from cedricziel/object-manager
Add ObjectManagerTypeResolver
2 parents 08e3f72 + 0f494cc commit 9430337

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<extensions defaultExtensionNs="com.intellij">
2828
<!-- Add your extensions here -->
2929
<php.typeProvider2 implementation="com.cedricziel.idea.typo3.provider.GeneralUtilityTypeProvider" />
30+
<php.typeProvider2 implementation="com.cedricziel.idea.typo3.provider.ObjectManagerTypeProvider" />
3031
</extensions>
3132

3233
<extensions defaultExtensionNs="com.jetbrains.php">

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Features
44

55
* TypeProvider for `GeneralUtility::makeInstance`
6+
* TypeProvider for `ObjectManager::get`
67

78
# License
89

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.cedricziel.idea.typo3.provider;
2+
3+
import com.cedricziel.idea.typo3.psi.PhpElementsUtil;
4+
import com.intellij.openapi.project.DumbService;
5+
import com.intellij.psi.PsiElement;
6+
import com.jetbrains.php.PhpIndex;
7+
import com.jetbrains.php.lang.psi.elements.MethodReference;
8+
import com.jetbrains.php.lang.psi.elements.PhpReference;
9+
import org.jetbrains.annotations.Nullable;
10+
11+
/**
12+
* TypeProvider for `ObjectManager::get`
13+
*/
14+
public class ObjectManagerTypeProvider extends AbstractServiceLocatorTypeProvider {
15+
16+
@Override
17+
public char getKey() {
18+
return '\u0215';
19+
}
20+
21+
@Nullable
22+
@Override
23+
public String getType(PsiElement psiElement) {
24+
if (DumbService.getInstance(psiElement.getProject()).isDumb()) {
25+
return null;
26+
}
27+
28+
if (!(psiElement instanceof MethodReference) || !PhpElementsUtil.isMethodWithFirstStringOrFieldReference(psiElement, "get")) {
29+
return null;
30+
}
31+
32+
MethodReference methodReference = (MethodReference) psiElement;
33+
if (methodReference.getParameters().length == 0) {
34+
return null;
35+
}
36+
37+
PsiElement firstParam = methodReference.getParameters()[0];
38+
if (firstParam instanceof PhpReference) {
39+
PhpReference ref = (PhpReference) firstParam;
40+
if (ref.getText().toLowerCase().contains("::class")) {
41+
return methodReference.getSignature() + "%" + ref.getSignature();
42+
}
43+
}
44+
45+
return null;
46+
}
47+
}

0 commit comments

Comments
 (0)