Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import java.util.List;

/**
* @author Daniel Espendiller <daniel@espendiller.net>
Expand All @@ -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<String> commandNameFromClass = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass);
if (!commandNameFromClass.isEmpty()) {
// first name; on alias
String commandName = commandNameFromClass.iterator().next();
configuration.setCommandName(commandName);
configuration.setName(commandName);
return true;
}
}
Expand All @@ -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();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 <daniel@espendiller.net>
*/
Expand All @@ -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<String> 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");
}
Expand All @@ -50,16 +54,20 @@ public static PhpClass getCommandContext(@NotNull PsiElement leaf) {
return null;
}

@Nullable
public static String getCommandNameFromClass(@NotNull PhpClass phpClass) {
@NotNull
public static List<String> getCommandNameFromClass(@NotNull PhpClass phpClass) {
if (PhpElementsUtil.isInstanceOf(phpClass, "\\Symfony\\Component\\Console\\Command\\Command")) {
// lazy naming:
// protected static $defaultName = 'app:create-user'
Field defaultName = phpClass.findFieldByName("defaultName", false);
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();
}
}

Expand All @@ -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<String> names = new ArrayList<>();

if (name != null) {
return name;
names.add(name);
}

names.addAll(PhpPsiAttributesUtil.getAttributeValueByNameAsArray(attribute, "aliases"));

return names;
}

// @TODO: provide tag resolving here
Expand Down Expand Up @@ -98,11 +112,11 @@ public static String getCommandNameFromClass(@NotNull PhpClass phpClass) {
continue;
}

return stringValue;
return Collections.singletonList(stringValue);
}
}
}

return null;
return Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 <daniel@espendiller.net>
Expand All @@ -36,8 +33,7 @@ public static Collection<SymfonyCommand> getCommands(@NotNull Project project) {
continue;
}

String commandName = SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass);
if (commandName != null) {
for (String commandName : SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass)) {
symfonyCommands.put(commandName, phpClass.getFQN());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 <daniel@espendiller.net>
* @see SymfonyCommandTestRunLineMarkerProvider
Expand All @@ -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, "<?php\n" +
"class FoobarCommand extends \\Symfony\\Component\\Console\\Command\\Command {\n" +
" protected static $defaultName = 'app:create-user|foobar|car';\n" +
"}"
);

assertEquals(List.of("app:create-user", "foobar", "car"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass1));
}

public void testCommandNameFromDefaultPhpProperty() {
Expand All @@ -37,13 +47,13 @@ public void testCommandNameFromDefaultPhpProperty() {
" name: 'app:create-user',\n" +
" description: 'Creates a new user.',\n" +
" hidden: false,\n" +
" aliases: ['app:add-user']\n" +
" aliases: ['app:add-user', 'foo']\n" +
")]\n" +
"class FoobarCommand extends \\Symfony\\Component\\Console\\Command\\Command {\n" +
"}"
);

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

public void testCommandNameFromDefaultPhpPropertyAsDefault() {
Expand All @@ -55,7 +65,7 @@ public void testCommandNameFromDefaultPhpPropertyAsDefault() {
"}"
);

assertEquals("app:create-user", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
assertEquals(List.of("app:create-user"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
}

public void testCommandNameFromSetName() {
Expand All @@ -69,6 +79,6 @@ public void testCommandNameFromSetName() {
"}"
);

assertEquals("set-const-command", SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
assertEquals(List.of("set-const-command"), SymfonyCommandTestRunLineMarkerProvider.getCommandNameFromClass(phpClass));
}
}