diff --git a/src/com/magento/idea/magento2plugin/project/GenerateDebugStepFiltersListener.java b/src/com/magento/idea/magento2plugin/project/GenerateDebugStepFiltersListener.java new file mode 100644 index 000000000..03b229b2b --- /dev/null +++ b/src/com/magento/idea/magento2plugin/project/GenerateDebugStepFiltersListener.java @@ -0,0 +1,76 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.project; + +import com.intellij.ide.util.PropertiesComponent; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiManager; +import com.intellij.psi.search.FilenameIndex; +import org.jetbrains.annotations.NotNull; + +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collection; +import java.util.Stack; + +class GenerateDebugStepFiltersListener extends MouseAdapter { + protected final Project project; + + + public GenerateDebugStepFiltersListener(final @NotNull Project project) { + super(); + this.project = project; + } + + /** + * Handler for mouse click. + * + * @param event MouseEvent + */ + @Override + public void mouseClicked(final MouseEvent event) { + final PsiManager psiManager = PsiManager.getInstance(project); + // There might be a more efficient way to grab all Interceptors and Proxies in the generated folder + // But with my limited Java knowledge, I can't find it. + final Collection phpFiles = FilenameIndex.getAllFilesByExt(project, "php"); + + ApplicationManager.getApplication().runWriteAction( + new Runnable() { + @Override + public void run() { + final Stack skippedPaths = new Stack<>(); + for (final VirtualFile virtualFile: phpFiles) { + final PsiFile psiFile = psiManager.findFile(virtualFile); + if (psiFile == null) { + continue; + } + + // If we have a more efficient way to find these files, this check hopefully + // wouldn't be necessary + if (!psiFile.getName().contains("Interceptor") && !psiFile.getName().contains("Proxy")) { + continue; + } + + skippedPaths.push(psiFile.getName()); + } + + // At this point we should have a stack with all paths to the interceptors and proxies + // However, it is unclear to me how (or even if) we can place these in the Skipped Paths + // list in the configuration under Settings > PHP > Debug > Step Filters > Skipped Paths + // since the code below doesn't work. We might have to resort to appending the data + // to .idea/php.xml manually. + PropertiesComponent.getInstance() + .setValue("settings.php.debug.skipped.paths", skippedPaths.toString()); + } + } + ); + + super.mouseClicked(event); + } +} diff --git a/src/com/magento/idea/magento2plugin/project/SettingsForm.form b/src/com/magento/idea/magento2plugin/project/SettingsForm.form index 58fc6561b..6310367e7 100644 --- a/src/com/magento/idea/magento2plugin/project/SettingsForm.form +++ b/src/com/magento/idea/magento2plugin/project/SettingsForm.form @@ -9,6 +9,8 @@ + + @@ -38,7 +40,7 @@ - + @@ -47,7 +49,7 @@ - + @@ -59,7 +61,7 @@ - + @@ -68,7 +70,7 @@ - + @@ -85,7 +87,7 @@ - + @@ -94,13 +96,32 @@ - + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/magento/idea/magento2plugin/project/SettingsForm.java b/src/com/magento/idea/magento2plugin/project/SettingsForm.java index 6bd5386c3..c79b0a5e6 100644 --- a/src/com/magento/idea/magento2plugin/project/SettingsForm.java +++ b/src/com/magento/idea/magento2plugin/project/SettingsForm.java @@ -47,6 +47,7 @@ public class SettingsForm implements PhpFrameworkConfigurable { private JButton buttonReindex; private JPanel panel; private JButton regenerateUrnMapButton; + private JButton generateDebugStepFiltersButton; private JTextField magentoVersion; private JTextField moduleDefaultLicenseName; private JCheckBox mftfSupportEnabled; @@ -88,6 +89,10 @@ public void mouseClicked(final MouseEvent event) { new RegenerateUrnMapListener(project) ); + generateDebugStepFiltersButton.addMouseListener( + new GenerateDebugStepFiltersListener(project) + ); + refreshFormStatus(getSettings().pluginEnabled); pluginEnabled.addActionListener(e -> refreshFormStatus(pluginEnabled.isSelected())); @@ -106,6 +111,7 @@ public void mouseClicked(final MouseEvent event) { private void refreshFormStatus(final boolean isEnabled) { buttonReindex.setEnabled(isEnabled); regenerateUrnMapButton.setEnabled(isEnabled); + generateDebugStepFiltersButton.setEnabled(isEnabled); magentoVersion.setEnabled(isEnabled); mftfSupportEnabled.setEnabled(isEnabled); magentoPath.setEnabled(isEnabled); @@ -163,6 +169,7 @@ private void saveSettings() { getSettings().magentoPath = getMagentoPath(); buttonReindex.setEnabled(getSettings().pluginEnabled); regenerateUrnMapButton.setEnabled(getSettings().pluginEnabled); + generateDebugStepFiltersButton.setEnabled(getSettings().pluginEnabled); } @NotNull