JComponent (@NotNull Project project, @NotNull TerminalOptionsProvider provider, @NotNull TerminalProjectOptionsProvider projectOptionsProvider) { myProject = project; myOptionsProvider = provider; myProjectOptionsProvider = projectOptionsProvider; myProjectSettingsPanel.setBorder(IdeBorderFactory.createTitledBorder(TerminalBundle.message("settings.terminal.project.settings"))); myGlobalSettingsPanel.setBorder(IdeBorderFactory.createTitledBorder(TerminalBundle.message("settings.terminal.application.settings"))); configureShellPathField(); configureStartDirectoryField(); List<Component> customComponents = new ArrayList<>(); for (LocalTerminalCustomizer c : LocalTerminalCustomizer.EP_NAME.getExtensions()) { UnnamedConfigurable configurable = c.getConfigurable(projectOptionsProvider.getProject()); if (configurable != null) { myConfigurables.add(configurable); JComponent component = configurable.createComponent(); if (component != null) { customComponents.add(component); } } } if (!customComponents.isEmpty()) { myConfigurablesPanel.setLayout(new GridLayoutManager(customComponents.size(), 1)); int i = 0; for (Component component : customComponents) { myConfigurablesPanel.add(component, new GridConstraints( i++, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, 0, 0, new Dimension(-1, -1), new Dimension(-1, -1), new Dimension(-1, -1), 0, false )); } } myUseOptionAsMetaKey.getParent().setVisible(SystemInfo.isMac); return myWholePanel; }