File tree Expand file tree Collapse file tree 3 files changed +49
-0
lines changed
src/com/cedricziel/idea/typo3/provider Expand file tree Collapse file tree 3 files changed +49
-0
lines changed Original file line number Diff line number Diff line change 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" >
Original file line number Diff line number Diff line change 33## Features
44
55* TypeProvider for ` GeneralUtility::makeInstance `
6+ * TypeProvider for ` ObjectManager::get `
67
78# License
89
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments