28
28
import org .jetbrains .annotations .NotNull ;
29
29
30
30
public class CreateAnObserverAction extends DumbAwareAction {
31
+
31
32
public static final String ACTION_NAME = "Create a new Observer for this event" ;
32
33
public static final String ACTION_DESCRIPTION = "Create a new Magento 2 Observer" ;
33
34
public String targetEvent ;
@@ -40,19 +41,24 @@ public CreateAnObserverAction() {
40
41
* Updates the state of action.
41
42
*/
42
43
@ Override
43
- public void update (final AnActionEvent event ) {
44
+ public void update (final @ NotNull AnActionEvent event ) {
44
45
final Project project = event .getData (PlatformDataKeys .PROJECT );
46
+ if (project == null ) {
47
+ return ;
48
+ }
49
+
45
50
if (!Settings .isEnabled (project )) {
46
51
this .setStatus (event , false );
47
52
return ;
48
53
}
49
54
final PsiFile psiFile = event .getData (PlatformDataKeys .PSI_FILE );
55
+
50
56
if (!(psiFile instanceof PhpFile )) {
51
57
this .setStatus (event , false );
52
58
return ;
53
59
}
54
-
55
60
final PsiElement element = getElement (event );
61
+
56
62
if (element == null ) {
57
63
this .setStatus (event , false );
58
64
return ;
@@ -67,21 +73,36 @@ public void update(final AnActionEvent event) {
67
73
this .setStatus (event , false );
68
74
}
69
75
70
- private PsiElement getElement (@ NotNull final AnActionEvent event ) {
76
+ @ Override
77
+ public void actionPerformed (final @ NotNull AnActionEvent event ) {
78
+ if (event .getProject () == null ) {
79
+ return ;
80
+ }
81
+ CreateAnObserverDialog .open (event .getProject (), this .targetEvent );
82
+ }
83
+
84
+ @ Override
85
+ public boolean isDumbAware () {
86
+ return false ;
87
+ }
88
+
89
+ private PsiElement getElement (final @ NotNull AnActionEvent event ) {
71
90
final Caret caret = event .getData (PlatformDataKeys .CARET );
91
+
72
92
if (caret == null ) {
73
93
return null ;
74
94
}
75
- final int offset = caret .getOffset ();
76
95
final PsiFile psiFile = event .getData (PlatformDataKeys .PSI_FILE );
77
- final PsiElement element = psiFile . findElementAt ( offset );
78
- if (element == null ) {
96
+
97
+ if (psiFile == null ) {
79
98
return null ;
80
99
}
81
- return element ;
100
+ final int offset = caret .getOffset ();
101
+
102
+ return psiFile .findElementAt (offset );
82
103
}
83
104
84
- private boolean isObserverEventNameClicked (@ NotNull final PsiElement element ) {
105
+ private boolean isObserverEventNameClicked (final @ NotNull PsiElement element ) {
85
106
return checkIsElementStringLiteral (element )
86
107
&& checkIsParametersList (element .getParent ().getParent ())
87
108
&& checkIsMethodReference (element .getParent ().getParent ().getParent ())
@@ -90,11 +111,11 @@ && checkIsEventDispatchMethod(
90
111
);
91
112
}
92
113
93
- private boolean checkIsParametersList (@ NotNull final PsiElement element ) {
114
+ private boolean checkIsParametersList (final @ NotNull PsiElement element ) {
94
115
return element instanceof ParameterList ;
95
116
}
96
117
97
- private boolean checkIsMethodReference (@ NotNull final PsiElement element ) {
118
+ private boolean checkIsMethodReference (final @ NotNull PsiElement element ) {
98
119
return element instanceof MethodReference ;
99
120
}
100
121
@@ -107,40 +128,34 @@ private boolean checkIsEventDispatchMethod(final MethodReference element) {
107
128
if (!(method instanceof Method )) {
108
129
return false ;
109
130
}
110
- if (!(( Method ) method ).getName (). equals ( Observer . DISPATCH_METHOD )) {
131
+ if (!Observer . DISPATCH_METHOD . equals ((( Method ) method ).getName ())) {
111
132
return false ;
112
133
}
113
134
final PsiElement phpClass = method .getParent ();
114
135
if (!(phpClass instanceof PhpClass )) {
115
136
return false ;
116
137
}
117
138
final String fqn = ((PhpClass ) phpClass ).getPresentableFQN ();
118
- return fqn .equals (Observer .INTERFACE );
139
+
140
+ return Observer .INTERFACE .equals (fqn )
141
+ || Observer .IMPLEMENTATION .equals (fqn )
142
+ || Observer .ENTITY_IMPL .equals (fqn )
143
+ || Observer .STAGING_IMPL .equals (fqn );
119
144
}
120
145
121
- private boolean checkIsElementStringLiteral (@ NotNull final PsiElement element ) {
146
+ private boolean checkIsElementStringLiteral (final @ NotNull PsiElement element ) {
122
147
final ASTNode astNode = element .getNode ();
123
148
if (astNode == null ) {
124
149
return false ;
125
150
}
126
151
final IElementType elementType = astNode .getElementType ();
127
152
128
- return elementType == PhpTokenTypes .STRING_LITERAL
129
- || elementType == PhpTokenTypes .STRING_LITERAL_SINGLE_QUOTE ;
153
+ return elementType . equals ( PhpTokenTypes .STRING_LITERAL )
154
+ || elementType . equals ( PhpTokenTypes .STRING_LITERAL_SINGLE_QUOTE ) ;
130
155
}
131
156
132
157
private void setStatus (final AnActionEvent event , final boolean status ) {
133
158
event .getPresentation ().setVisible (status );
134
159
event .getPresentation ().setEnabled (status );
135
160
}
136
-
137
- @ Override
138
- public void actionPerformed (@ NotNull final AnActionEvent event ) {
139
- CreateAnObserverDialog .open (event .getProject (), this .targetEvent );
140
- }
141
-
142
- @ Override
143
- public boolean isDumbAware () {
144
- return false ;
145
- }
146
161
}
0 commit comments