2828import org .jetbrains .annotations .NotNull ;
2929
3030public class CreateAnObserverAction extends DumbAwareAction {
31+
3132 public static final String ACTION_NAME = "Create a new Observer for this event" ;
3233 public static final String ACTION_DESCRIPTION = "Create a new Magento 2 Observer" ;
3334 public String targetEvent ;
@@ -40,19 +41,24 @@ public CreateAnObserverAction() {
4041 * Updates the state of action.
4142 */
4243 @ Override
43- public void update (final AnActionEvent event ) {
44+ public void update (final @ NotNull AnActionEvent event ) {
4445 final Project project = event .getData (PlatformDataKeys .PROJECT );
46+ if (project == null ) {
47+ return ;
48+ }
49+
4550 if (!Settings .isEnabled (project )) {
4651 this .setStatus (event , false );
4752 return ;
4853 }
4954 final PsiFile psiFile = event .getData (PlatformDataKeys .PSI_FILE );
55+
5056 if (!(psiFile instanceof PhpFile )) {
5157 this .setStatus (event , false );
5258 return ;
5359 }
54-
5560 final PsiElement element = getElement (event );
61+
5662 if (element == null ) {
5763 this .setStatus (event , false );
5864 return ;
@@ -67,21 +73,36 @@ public void update(final AnActionEvent event) {
6773 this .setStatus (event , false );
6874 }
6975
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 ) {
7190 final Caret caret = event .getData (PlatformDataKeys .CARET );
91+
7292 if (caret == null ) {
7393 return null ;
7494 }
75- final int offset = caret .getOffset ();
7695 final PsiFile psiFile = event .getData (PlatformDataKeys .PSI_FILE );
77- final PsiElement element = psiFile . findElementAt ( offset );
78- if (element == null ) {
96+
97+ if (psiFile == null ) {
7998 return null ;
8099 }
81- return element ;
100+ final int offset = caret .getOffset ();
101+
102+ return psiFile .findElementAt (offset );
82103 }
83104
84- private boolean isObserverEventNameClicked (@ NotNull final PsiElement element ) {
105+ private boolean isObserverEventNameClicked (final @ NotNull PsiElement element ) {
85106 return checkIsElementStringLiteral (element )
86107 && checkIsParametersList (element .getParent ().getParent ())
87108 && checkIsMethodReference (element .getParent ().getParent ().getParent ())
@@ -90,11 +111,11 @@ && checkIsEventDispatchMethod(
90111 );
91112 }
92113
93- private boolean checkIsParametersList (@ NotNull final PsiElement element ) {
114+ private boolean checkIsParametersList (final @ NotNull PsiElement element ) {
94115 return element instanceof ParameterList ;
95116 }
96117
97- private boolean checkIsMethodReference (@ NotNull final PsiElement element ) {
118+ private boolean checkIsMethodReference (final @ NotNull PsiElement element ) {
98119 return element instanceof MethodReference ;
99120 }
100121
@@ -107,40 +128,34 @@ private boolean checkIsEventDispatchMethod(final MethodReference element) {
107128 if (!(method instanceof Method )) {
108129 return false ;
109130 }
110- if (!(( Method ) method ).getName (). equals ( Observer . DISPATCH_METHOD )) {
131+ if (!Observer . DISPATCH_METHOD . equals ((( Method ) method ).getName ())) {
111132 return false ;
112133 }
113134 final PsiElement phpClass = method .getParent ();
114135 if (!(phpClass instanceof PhpClass )) {
115136 return false ;
116137 }
117138 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 );
119144 }
120145
121- private boolean checkIsElementStringLiteral (@ NotNull final PsiElement element ) {
146+ private boolean checkIsElementStringLiteral (final @ NotNull PsiElement element ) {
122147 final ASTNode astNode = element .getNode ();
123148 if (astNode == null ) {
124149 return false ;
125150 }
126151 final IElementType elementType = astNode .getElementType ();
127152
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 ) ;
130155 }
131156
132157 private void setStatus (final AnActionEvent event , final boolean status ) {
133158 event .getPresentation ().setVisible (status );
134159 event .getPresentation ().setEnabled (status );
135160 }
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- }
146161}
0 commit comments