Skip to content

Commit 09fa030

Browse files
committed
add for alias names of commands
1 parent db70972 commit 09fa030

File tree

4 files changed

+47
-24
lines changed

4 files changed

+47
-24
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandRunConfigurationProducer.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.jetbrains.annotations.NotNull;
1919

2020
import javax.swing.*;
21+
import java.util.List;
2122

2223
/**
2324
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -36,10 +37,12 @@ protected boolean setupConfigurationFromContext(@NotNull SymfonyCommandRunConfig
3637
if (location instanceof PsiLocation) {
3738
PhpClass phpClass = SymfonyCommandTestRunLineMarkerProvider.getCommandContext(location.getPsiElement());
3839
if (phpClass != null) {
39-
String commandNameFromClass = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass);
40-
if (commandNameFromClass != null) {
41-
configuration.setCommandName(commandNameFromClass);
42-
configuration.setName(commandNameFromClass);
40+
List<String> commandNameFromClass = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass);
41+
if (!commandNameFromClass.isEmpty()) {
42+
// first name; on alias
43+
String commandName = commandNameFromClass.iterator().next();
44+
configuration.setCommandName(commandName);
45+
configuration.setName(commandName);
4346
return true;
4447
}
4548
}
@@ -54,7 +57,7 @@ public boolean isConfigurationFromContext(@NotNull SymfonyCommandRunConfiguratio
5457
if (location instanceof PsiLocation) {
5558
PhpClass phpClass = SymfonyCommandTestRunLineMarkerProvider.getCommandContext(location.getPsiElement());
5659
if (phpClass != null) {
57-
return SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass) != null;
60+
return !SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass).isEmpty();
5861
}
5962
}
6063

src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/command/SymfonyCommandTestRunLineMarkerProvider.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
import org.jetbrains.annotations.NotNull;
1919
import org.jetbrains.annotations.Nullable;
2020

21+
import java.util.ArrayList;
22+
import java.util.Collections;
23+
import java.util.List;
24+
2125
/**
2226
* @author Daniel Espendiller <daniel@espendiller.net>
2327
*/
@@ -26,8 +30,8 @@ public class SymfonyCommandTestRunLineMarkerProvider extends RunLineMarkerContri
2630
public @Nullable Info getInfo(@NotNull PsiElement leaf) {
2731
PhpClass phpClass = getCommandContext(leaf);
2832
if (phpClass != null) {
29-
String commandNameFromClass = getCommandNameFromClass(phpClass);
30-
if (commandNameFromClass != null) {
33+
List<String> commandNameFromClass = getCommandNameFromClass(phpClass);
34+
if (!commandNameFromClass.isEmpty()) {
3135
BaseRunConfigurationAction baseRunConfigurationAction = new RunContextAction(DefaultRunExecutor.getRunExecutorInstance());
3236
return new Info(AllIcons.RunConfigurations.TestState.Run, new AnAction[]{baseRunConfigurationAction}, (psiElement) -> "Run Command");
3337
}
@@ -50,16 +54,20 @@ public static PhpClass getCommandContext(@NotNull PsiElement leaf) {
5054
return null;
5155
}
5256

53-
@Nullable
54-
public static String getCommandNameFromClass(@NotNull PhpClass phpClass) {
57+
@NotNull
58+
public static List<String> getCommandNameFromClass(@NotNull PhpClass phpClass) {
5559
if (PhpElementsUtil.isInstanceOf(phpClass, "\\Symfony\\Component\\Console\\Command\\Command")) {
5660
// lazy naming:
5761
// protected static $defaultName = 'app:create-user'
5862
Field defaultName = phpClass.findFieldByName("defaultName", false);
5963
if (defaultName != null) {
6064
PsiElement defaultValue = defaultName.getDefaultValue();
6165
if (defaultValue != null) {
62-
return PhpElementsUtil.getStringValue(defaultValue);
66+
String stringValue = PhpElementsUtil.getStringValue(defaultValue);
67+
68+
return stringValue != null
69+
? List.of(stringValue.split("\\|"))
70+
: Collections.emptyList();
6371
}
6472
}
6573

@@ -68,9 +76,15 @@ public static String getCommandNameFromClass(@NotNull PhpClass phpClass) {
6876
// #[AsCommand(name: 'app:create-user')]
6977
for (PhpAttribute attribute : phpClass.getAttributes("\\Symfony\\Component\\Console\\Attribute\\AsCommand")) {
7078
String name = PhpPsiAttributesUtil.getAttributeValueByNameAsStringWithDefaultParameterFallback(attribute, "name");
79+
List<String> names = new ArrayList<>();
80+
7181
if (name != null) {
72-
return name;
82+
names.add(name);
7383
}
84+
85+
names.addAll(PhpPsiAttributesUtil.getAttributeValueByNameAsArray(attribute, "aliases"));
86+
87+
return names;
7488
}
7589

7690
// @TODO: provide tag resolving here
@@ -98,11 +112,11 @@ public static String getCommandNameFromClass(@NotNull PhpClass phpClass) {
98112
continue;
99113
}
100114

101-
return stringValue;
115+
return Collections.singletonList(stringValue);
102116
}
103117
}
104118
}
105119

106-
return null;
120+
return Collections.emptyList();
107121
}
108122
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/SymfonyCommandUtil.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212
import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyCommand;
1313
import org.jetbrains.annotations.NotNull;
1414

15-
import java.util.ArrayList;
16-
import java.util.Collection;
17-
import java.util.HashMap;
18-
import java.util.Map;
15+
import java.util.*;
1916

2017
/**
2118
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -36,8 +33,7 @@ public static Collection<SymfonyCommand> getCommands(@NotNull Project project) {
3633
continue;
3734
}
3835

39-
String commandName = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass);
40-
if (commandName != null) {
36+
for (String commandName : SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass)) {
4137
symfonyCommands.put(commandName, phpClass.getFQN());
4238
}
4339
}

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/command/SymfonyCommandTestRunLineMarkerProviderTest.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import fr.adrienbrault.idea.symfony2plugin.dic.command.SymfonyCommandTestRunLineMarkerProvider;
66
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
77

8+
import java.util.List;
9+
810
/**
911
* @author Daniel Espendiller <daniel@espendiller.net>
1012
* @see SymfonyCommandTestRunLineMarkerProvider
@@ -26,7 +28,15 @@ public void testCommandNameFromDefaultNameProperty() {
2628
"}"
2729
);
2830

29-
assertEquals("app:create-user", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
31+
assertEquals(List.of("app:create-user"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
32+
33+
PhpClass phpClass1 = PhpPsiElementFactory.createFromText(getProject(), PhpClass.class, "<?php\n" +
34+
"class FoobarCommand extends \\Symfony\\Component\\Console\\Command\\Command {\n" +
35+
" protected static $defaultName = 'app:create-user|foobar|car';\n" +
36+
"}"
37+
);
38+
39+
assertEquals(List.of("app:create-user", "foobar", "car"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass1));
3040
}
3141

3242
public void testCommandNameFromDefaultPhpProperty() {
@@ -37,13 +47,13 @@ public void testCommandNameFromDefaultPhpProperty() {
3747
" name: 'app:create-user',\n" +
3848
" description: 'Creates a new user.',\n" +
3949
" hidden: false,\n" +
40-
" aliases: ['app:add-user']\n" +
50+
" aliases: ['app:add-user', 'foo']\n" +
4151
")]\n" +
4252
"class FoobarCommand extends \\Symfony\\Component\\Console\\Command\\Command {\n" +
4353
"}"
4454
);
4555

46-
assertEquals("app:create-user", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
56+
assertEquals(List.of("app:create-user", "app:add-user", "foo"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
4757
}
4858

4959
public void testCommandNameFromDefaultPhpPropertyAsDefault() {
@@ -55,7 +65,7 @@ public void testCommandNameFromDefaultPhpPropertyAsDefault() {
5565
"}"
5666
);
5767

58-
assertEquals("app:create-user", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
68+
assertEquals(List.of("app:create-user"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
5969
}
6070

6171
public void testCommandNameFromSetName() {
@@ -69,6 +79,6 @@ public void testCommandNameFromSetName() {
6979
"}"
7080
);
7181

72-
assertEquals("set-const-command", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
82+
assertEquals(List.of("set-const-command"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
7383
}
7484
}

0 commit comments

Comments
 (0)