diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandRunConfigurationProducer.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandRunConfigurationProducer.java index 5a63d671c..bd3c1dcf7 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandRunConfigurationProducer.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandRunConfigurationProducer.java @@ -18,6 +18,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.util.List; /** * @author Daniel Espendiller @@ -36,10 +37,12 @@ protected boolean setupConfigurationFromContext(@NotNull SymfonyCommandRunConfig if (location instanceof PsiLocation) { PhpClass phpClass = SymfonyCommandTestRunLineMarkerProvider.getCommandContext(location.getPsiElement()); if (phpClass != null) { - String commandNameFromClass = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass); - if (commandNameFromClass != null) { - configuration.setCommandName(commandNameFromClass); - configuration.setName(commandNameFromClass); + List commandNameFromClass = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass); + if (!commandNameFromClass.isEmpty()) { + // first name; on alias + String commandName = commandNameFromClass.iterator().next(); + configuration.setCommandName(commandName); + configuration.setName(commandName); return true; } } @@ -54,7 +57,7 @@ public boolean isConfigurationFromContext(@NotNull SymfonyCommandRunConfiguratio if (location instanceof PsiLocation) { PhpClass phpClass = SymfonyCommandTestRunLineMarkerProvider.getCommandContext(location.getPsiElement()); if (phpClass != null) { - return SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass) != null; + return !SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass).isEmpty(); } } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandTestRunLineMarkerProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandTestRunLineMarkerProvider.java index 58950f1f6..683dbc2bc 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandTestRunLineMarkerProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandTestRunLineMarkerProvider.java @@ -18,6 +18,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * @author Daniel Espendiller */ @@ -26,8 +30,8 @@ public class SymfonyCommandTestRunLineMarkerProvider extends RunLineMarkerContri public @Nullable Info getInfo(@NotNull PsiElement leaf) { PhpClass phpClass = getCommandContext(leaf); if (phpClass != null) { - String commandNameFromClass = getCommandNameFromClass(phpClass); - if (commandNameFromClass != null) { + List commandNameFromClass = getCommandNameFromClass(phpClass); + if (!commandNameFromClass.isEmpty()) { BaseRunConfigurationAction baseRunConfigurationAction = new RunContextAction(DefaultRunExecutor.getRunExecutorInstance()); return new Info(AllIcons.RunConfigurations.TestState.Run, new AnAction[]{baseRunConfigurationAction}, (psiElement) -> "Run Command"); } @@ -50,8 +54,8 @@ public static PhpClass getCommandContext(@NotNull PsiElement leaf) { return null; } - @Nullable - public static String getCommandNameFromClass(@NotNull PhpClass phpClass) { + @NotNull + public static List getCommandNameFromClass(@NotNull PhpClass phpClass) { if (PhpElementsUtil.isInstanceOf(phpClass, "\\Symfony\\Component\\Console\\Command\\Command")) { // lazy naming: // protected static $defaultName = 'app:create-user' @@ -59,7 +63,11 @@ public static String getCommandNameFromClass(@NotNull PhpClass phpClass) { if (defaultName != null) { PsiElement defaultValue = defaultName.getDefaultValue(); if (defaultValue != null) { - return PhpElementsUtil.getStringValue(defaultValue); + String stringValue = PhpElementsUtil.getStringValue(defaultValue); + + return stringValue != null + ? List.of(stringValue.split("\\|")) + : Collections.emptyList(); } } @@ -68,9 +76,15 @@ public static String getCommandNameFromClass(@NotNull PhpClass phpClass) { // #[AsCommand(name: 'app:create-user')] for (PhpAttribute attribute : phpClass.getAttributes("\\Symfony\\Component\\Console\\Attribute\\AsCommand")) { String name = PhpPsiAttributesUtil.getAttributeValueByNameAsStringWithDefaultParameterFallback(attribute, "name"); + List names = new ArrayList<>(); + if (name != null) { - return name; + names.add(name); } + + names.addAll(PhpPsiAttributesUtil.getAttributeValueByNameAsArray(attribute, "aliases")); + + return names; } // @TODO: provide tag resolving here @@ -98,11 +112,11 @@ public static String getCommandNameFromClass(@NotNull PhpClass phpClass) { continue; } - return stringValue; + return Collections.singletonList(stringValue); } } } - return null; + return Collections.emptyList(); } } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/SymfonyCommandUtil.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/SymfonyCommandUtil.java index 3cc295069..7389a6dc1 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/SymfonyCommandUtil.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/SymfonyCommandUtil.java @@ -12,10 +12,7 @@ import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyCommand; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * @author Daniel Espendiller @@ -36,8 +33,7 @@ public static Collection getCommands(@NotNull Project project) { continue; } - String commandName = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass); - if (commandName != null) { + for (String commandName : SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass)) { symfonyCommands.put(commandName, phpClass.getFQN()); } } diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/command/SymfonyCommandTestRunLineMarkerProviderTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/command/SymfonyCommandTestRunLineMarkerProviderTest.java index 3bde08c13..4298e4567 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/command/SymfonyCommandTestRunLineMarkerProviderTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/command/SymfonyCommandTestRunLineMarkerProviderTest.java @@ -5,6 +5,8 @@ import fr.adrienbrault.idea.symfony2plugin.dic.command.SymfonyCommandTestRunLineMarkerProvider; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; +import java.util.List; + /** * @author Daniel Espendiller * @see SymfonyCommandTestRunLineMarkerProvider @@ -26,7 +28,15 @@ public void testCommandNameFromDefaultNameProperty() { "}" ); - assertEquals("app:create-user", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass)); + assertEquals(List.of("app:create-user"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass)); + + PhpClass phpClass1 = PhpPsiElementFactory.createFromText(getProject(), PhpClass.class, "