diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/intention/PhpServiceArgumentIntention.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/intention/PhpServiceArgumentIntention.java index 345b03033..ac98cc52d 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/intention/PhpServiceArgumentIntention.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/intention/PhpServiceArgumentIntention.java @@ -30,57 +30,62 @@ public class PhpServiceArgumentIntention extends PsiElementBaseIntentionAction { @Override public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement psiElement) throws IncorrectOperationException { PhpClass phpClass = PsiTreeUtil.getParentOfType(psiElement, PhpClass.class); - if(phpClass != null) { - Set serviceNames = ContainerCollectionResolver.ServiceCollector.create(project).convertClassNameToServices(phpClass.getFQN()); - if(serviceNames.size() > 0) { - Collection psiElements = new ArrayList<>(); - for(String serviceName: serviceNames) { - psiElements.addAll(ServiceIndexUtil.findServiceDefinitions(project, serviceName)); - } - - if(psiElements.size() > 0) { - Map map = new HashMap<>(); - - for (PsiElement element : psiElements) { - map.put(VfsUtil.getRelativePath(element.getContainingFile().getVirtualFile(), element.getProject().getBaseDir()), element); - } - - final JBList list = new JBList<>(map.keySet()); - - JBPopupFactory.getInstance().createListPopupBuilder(list) - .setTitle("Symfony: Services Definitions") - .setItemChoosenCallback(() -> new WriteCommandAction.Simple(editor.getProject(), "Service Update") { - @Override - protected void run() { - String selectedValue = list.getSelectedValue(); - - PsiElement target = map.get(selectedValue); - invokeByScope(target, editor); - } - }.execute()) - .createPopup() - .showInBestPositionFor(editor); - } - } + if (phpClass == null) { + + return; + } + + Set serviceNames = ContainerCollectionResolver.ServiceCollector.create(project).convertClassNameToServices(phpClass.getFQN()); + if (serviceNames.isEmpty()) { + + return; + } + + Collection psiElements = new ArrayList<>(); + for (String serviceName : serviceNames) { + psiElements.addAll(ServiceIndexUtil.findServiceDefinitions(project, serviceName)); } + + if (psiElements.isEmpty()) { + + return; + } + + Map map = new HashMap<>(); + + for (PsiElement element : psiElements) { + map.put(VfsUtil.getRelativePath(element.getContainingFile().getVirtualFile(), element.getProject().getBaseDir()), element); + } + + final JBList list = new JBList<>(map.keySet()); + JBPopupFactory.getInstance().createListPopupBuilder(list) + .setTitle("Symfony: Services Definitions") + .setItemChoosenCallback(() -> { + WriteCommandAction.writeCommandAction(project).withName("Service Update").run(() -> { + invokeByScope(map.get(list.getSelectedValue()), editor); + }); + }) + .createPopup() + .showInBestPositionFor(editor) + ; } private void invokeByScope(@NotNull PsiElement psiElement, @NotNull Editor editor) { boolean success = false; - if(psiElement instanceof XmlTag) { + if (psiElement instanceof XmlTag) { List args = ServiceActionUtil.getXmlMissingArgumentTypes((XmlTag) psiElement, true, new ContainerCollectionResolver.LazyServiceCollector(psiElement.getProject())); success = args.size() > 0; if (success) { ServiceActionUtil.fixServiceArgument(args, (XmlTag) psiElement); } - } else if(psiElement instanceof YAMLKeyValue) { + } else if (psiElement instanceof YAMLKeyValue) { List args = ServiceActionUtil.getYamlMissingArgumentTypes( - psiElement.getProject(), - ServiceActionUtil.ServiceYamlContainer.create((YAMLKeyValue) psiElement), - false, - new ContainerCollectionResolver.LazyServiceCollector(psiElement.getProject()) + psiElement.getProject(), + ServiceActionUtil.ServiceYamlContainer.create((YAMLKeyValue) psiElement), + false, + new ContainerCollectionResolver.LazyServiceCollector(psiElement.getProject()) ); success = args.size() > 0; @@ -89,13 +94,14 @@ private void invokeByScope(@NotNull PsiElement psiElement, @NotNull Editor edito } } - if(!success) { + if (!success) { HintManager.getInstance().showErrorHint(editor, "No argument update needed"); + return; } String relativePath = VfsUtil.getRelativePath(psiElement.getContainingFile().getVirtualFile(), psiElement.getProject().getBaseDir()); - if(relativePath == null) { + if (relativePath == null) { relativePath = "n/a"; } @@ -125,7 +131,7 @@ private Set getServicesInScope(@NotNull PsiElement psiElement) { PhpClass phpClass = PsiTreeUtil.getParentOfType(psiElement, PhpClass.class); return phpClass == null - ? Collections.emptySet() - : ContainerCollectionResolver.ServiceCollector.create(psiElement.getProject()).convertClassNameToServices(phpClass.getFQN()); + ? Collections.emptySet() + : ContainerCollectionResolver.ServiceCollector.create(psiElement.getProject()).convertClassNameToServices(phpClass.getFQN()); } }