Skip to content

Commit 3e44c6e

Browse files
authored
Merge pull request #936 from bohdan-harniuk/853-fix-observer-action-visibility
853: Fix observer action visibility
2 parents bfb3a63 + 1b44e22 commit 3e44c6e

File tree

2 files changed

+43
-25
lines changed

2 files changed

+43
-25
lines changed

src/com/magento/idea/magento2plugin/actions/generation/CreateAnObserverAction.java

+40-25
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.jetbrains.annotations.NotNull;
2929

3030
public 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
}

src/com/magento/idea/magento2plugin/magento/files/Observer.java

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ public class Observer implements ModuleFileInterface {
1212

1313
private final String fileName;
1414
public static final String INTERFACE = "Magento\\Framework\\Event\\ManagerInterface";
15+
public static final String IMPLEMENTATION = "Magento\\Framework\\Event\\Manager";
16+
public static final String ENTITY_IMPL = "Magento\\Framework\\EntityManager\\EventManager";
17+
public static final String STAGING_IMPL = "Magento\\Staging\\Model\\Event\\Manager";
1518
public static final String DISPATCH_METHOD = "dispatch";
1619
public static final String NAME_ATTRIBUTE = "name";
1720
public static final String OBSERVER_EXECUTE_TEMPLATE_NAME = "Magento Observer Execute Method";

0 commit comments

Comments
 (0)