Skip to content

Commit

Permalink
Merge pull request #2321 from Haehnchen/feature/form-new
Browse files Browse the repository at this point in the history
migrate new Symfony formtype action
  • Loading branch information
Haehnchen authored Mar 31, 2024
2 parents 0fbd632 + 7bf2589 commit 5f33549
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static PsiDirectory getSelectedDirectoryFromAction(@NotNull AnActionEvent

}

public static boolean isInGivenDirectoryScope(@NotNull AnActionEvent event, @NotNull String directoryName) {
public static boolean isInGivenDirectoryScope(@NotNull AnActionEvent event, @NotNull String... directoryName) {
DataContext dataContext = event.getDataContext();
IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext);
if (view == null) {
Expand All @@ -46,12 +46,14 @@ public static boolean isInGivenDirectoryScope(@NotNull AnActionEvent event, @Not
return false;
}

if (directoryName.equals(directories[0].getName())) {
List<@NotNull String> list = Arrays.asList(directoryName);

if (list.contains(directories[0].getName())) {
return true;
}

PsiDirectory parent = directories[0].getParent();
if (parent != null && directoryName.equals(parent.getName())) {
if (parent != null && list.contains(parent.getName())) {
return true;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package fr.adrienbrault.idea.symfony2plugin.action;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.jetbrains.php.refactoring.PhpNameUtil;
import com.jetbrains.php.roots.PhpNamespaceCompositeProvider;
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
import fr.adrienbrault.idea.symfony2plugin.util.psi.PhpBundleFileFactory;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

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

/**
* @author Daniel Espendiller <[email protected]>
*/
public class NewFormTypeAction extends AbstractProjectDumbAwareAction {
public NewFormTypeAction() {
super("Form", "Create FormType Class", Symfony2Icons.SYMFONY);
}

public void update(AnActionEvent event) {
this.setStatus(event, false);
Project project = getEventProject(event);
if (!Symfony2ProjectComponent.isEnabled(project)) {
return;
}

if (NewFileActionUtil.getSelectedDirectoryFromAction(event) != null) {
this.setStatus(event, true);
}
}

@Override
public void actionPerformed(@NotNull AnActionEvent event) {
PsiDirectory directory = NewFileActionUtil.getSelectedDirectoryFromAction(event);
if (directory == null) {
return;
}

Project project = getEventProject(event);
String className = Messages.showInputDialog(project, "New class name:", "New File", Symfony2Icons.SYMFONY);
if (StringUtils.isBlank(className)) {
return;
}

if (!PhpNameUtil.isValidClassName(className)) {
JOptionPane.showMessageDialog(null, "Invalid class name");
return;
}

List<String> strings = PhpNamespaceCompositeProvider.INSTANCE.suggestNamespaces(directory);
if (strings.isEmpty()) {
JOptionPane.showMessageDialog(null, "No namespace found");
return;
}

ApplicationManager.getApplication().runWriteAction(() -> {
HashMap<String, String> hashMap = new HashMap<>() {{
put("class", className);
put("namespace", strings.get(0));
}};

PsiElement commandAttributes = PhpBundleFileFactory.createFile(
project,
directory.getVirtualFile(),
"form_type",
className,
hashMap
);

new OpenFileDescriptor(project, commandAttributes.getContainingFile().getVirtualFile(), 0).navigate(true);
});
}

public static class Shortcut extends NewFormTypeAction {
@Override
public void update(AnActionEvent event) {
Project project = getEventProject(event);
if (!Symfony2ProjectComponent.isEnabled(project)) {
return;
}

this.setStatus(event, NewFileActionUtil.isInGivenDirectoryScope(event, "Form", "Type"));
}
}
}

This file was deleted.

3 changes: 2 additions & 1 deletion src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -780,19 +780,20 @@
<group id="SymfonyNewFile" class="com.intellij.ide.actions.NonTrivialActionGroup" text="Symfony" popup="true" icon="SymfonyIcons.Symfony">
<action id="SymfonyNewCommandAction" class="fr.adrienbrault.idea.symfony2plugin.action.NewCommandAction"/>
<action id="SymfonyNewControllerAction" class="fr.adrienbrault.idea.symfony2plugin.action.NewControllerAction"/>
<action id="SymfonyNewFormTypeAction" class="fr.adrienbrault.idea.symfony2plugin.action.NewFormTypeAction"/>
<separator/>
<action id="Symfony2NewXmlService" class="fr.adrienbrault.idea.symfony2plugin.action.NewXmlServiceAction"/>
<action id="Symfony2NewYamlService" class="fr.adrienbrault.idea.symfony2plugin.action.NewYamlServiceAction"/>
</group>
<action id="SymfonyBundleCompilerPass" class="fr.adrienbrault.idea.symfony2plugin.action.bundle.NewBundleCompilerPass"/>
<action id="SymfonyBundleFormAction" class="fr.adrienbrault.idea.symfony2plugin.action.bundle.NewBundleFormAction"/>
<action id="SymfonyBundleTwigExtensionAction" class="fr.adrienbrault.idea.symfony2plugin.action.bundle.NewBundleTwigExtensionAction"/>
<add-to-group group-id="NewGroup" anchor="after" relative-to-action="PhpNewGroup"/>
</group>

<group id="SymfonyGroupShortcut" text="Symfony" popup="false">
<action id="SymfonyNewCommandActionShortcut" class="fr.adrienbrault.idea.symfony2plugin.action.NewCommandAction$Shortcut"/>
<action id="SymfonyNewControllerActionShortcut" class="fr.adrienbrault.idea.symfony2plugin.action.NewControllerAction$Shortcut"/>
<action id="SymfonyFormTypeActionShortcut" class="fr.adrienbrault.idea.symfony2plugin.action.NewFormTypeAction$Shortcut"/>
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="SymfonyGroup" />
</group>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<?php

namespace {{ ns }};
declare(strict_types=1);

namespace {{ namespace }};

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
Expand All @@ -10,16 +12,9 @@ class {{ class }} extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{

}

public function configureOptions(OptionsResolver $resolver)
{

}

public function getBlockPrefix()
{
return '{{ name }}';
}
}
24 changes: 0 additions & 24 deletions src/main/resources/fileTemplates/form_type_defaults.php

This file was deleted.

0 comments on commit 5f33549

Please sign in to comment.