From 05c45c0bae9c85b917309712306aadee052f3d8f Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Thu, 13 Aug 2020 17:30:18 -0400 Subject: [PATCH] Bug 565142 - Support using CDT in Eclipse flatpak - modify ProcessFactory to prefix commands with flatpak-spawn when running under Eclipse flatpak - add new FlatpakLaunch class to dsf.gdb to do a prelaunch of gdbserver and set up remote port settings when debugging local C/C++ application under Eclipse flatpak - add new tab to gdb when running under Eclipse flatpak to allow user to specify gdbserver and port number - add new org.eclipse.cdt.flatpak.launcher plug-in which contains a FlatpakCommandLauncherFactory to handle copying header files from host to workspace when developing under Eclipse flatpak - add new FlatpakCommandLauncher class which simply extends CommandLauncher and can be used for debugging purposes to distinguish from regular command launcher - also add new FlatpakHeaderPreferencePage to allow C/C++ users to delete copied headers if needed - dynamically add the headers preference page from FlatpakCommandLaunchFactory if running under Eclipse flatpak - add new ICommandLaunchFactory3 to add an interface to check if headers have been modified/removed and scanner info refresh is required - add new org.eclipse.cdt.flatpak.launcher-feature - give higher priority to ContainerCommandLauncherFactory so if running on Eclipse flatpak, the flatpak factory won't be chosen if both apply (i.e. building in a container but running on Eclipse flatpak) Change-Id: Id68e60c4dd37c4494af10440231ac7b7bbec8d17 --- .../cdt/utils/spawner/ProcessFactory.java | 30 +- .../cdt/core/CommandLauncherManager.java | 8 + .../cdt/core/ICommandLauncherFactory3.java | 33 ++ .../cdt/core/build/CBuildConfiguration.java | 24 +- .../ui/launching/GdbDebuggerPage.java | 132 ++++- .../ui/launching/LaunchUIMessages.properties | 9 +- .../dsf/gdb/IGDBFlatpakLaunchConstants.java | 32 ++ .../gdb/internal/launching/FlatpakLaunch.java | 310 +++++++++++ .../dsf/gdb/launching/GdbLaunchDelegate.java | 11 +- .../gdb/launching/LaunchMessages.properties | 4 +- .../plugin.xml | 5 +- .../.project | 17 + .../build.properties | 2 + .../feature.properties | 22 + .../feature.xml | 29 ++ .../pom.xml | 17 + .../.classpath | 7 + .../.gitignore | 1 + .../org.eclipse.cdt.flatpak.launcher/.project | 34 ++ .../.settings/org.eclipse.jdt.core.prefs | 486 ++++++++++++++++++ .../.settings/org.eclipse.jdt.launching.prefs | 3 + .../.settings/org.eclipse.jdt.ui.prefs | 133 +++++ .../.settings/org.eclipse.pde.api.tools.prefs | 184 +++++++ .../.settings/org.eclipse.pde.prefs | 35 ++ .../META-INF/MANIFEST.MF | 34 ++ .../about.html | 36 ++ .../about.ini | 24 + .../about.mappings | 9 + .../about.properties | 32 ++ .../build.properties | 26 + .../cdt_logo_icon32.png | Bin 0 -> 1885 bytes .../plugin.properties | 19 + .../plugin.xml | 88 ++++ .../schema/flatpakPreferencePages.exsd | 175 +++++++ .../launcher/FlatpakCommandLauncher.java | 22 + .../FlatpakCommandLauncherFactory.java | 371 +++++++++++++ .../flatpak/launcher/FlatpakLaunchPlugin.java | 148 ++++++ .../FlatpakHeaderPreferencePage.java | 311 +++++++++++ .../ui/preferences/FlatpakPreferenceNode.java | 55 ++ .../launcher/ui/preferences/Messages.java | 35 ++ .../ui/preferences/messages.properties | 21 + pom.xml | 2 + .../feature.xml | 7 + 43 files changed, 2966 insertions(+), 17 deletions(-) create mode 100644 core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncherFactory3.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/IGDBFlatpakLaunchConstants.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/launching/FlatpakLaunch.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher-feature/.project create mode 100644 launch/org.eclipse.cdt.flatpak.launcher-feature/build.properties create mode 100644 launch/org.eclipse.cdt.flatpak.launcher-feature/feature.properties create mode 100644 launch/org.eclipse.cdt.flatpak.launcher-feature/feature.xml create mode 100644 launch/org.eclipse.cdt.flatpak.launcher-feature/pom.xml create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.classpath create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.gitignore create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.project create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.core.prefs create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.launching.prefs create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.ui.prefs create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.api.tools.prefs create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.prefs create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/META-INF/MANIFEST.MF create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/about.html create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/about.ini create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/about.mappings create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/about.properties create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/build.properties create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/cdt_logo_icon32.png create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/plugin.properties create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/plugin.xml create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/schema/flatpakPreferencePages.exsd create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncher.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncherFactory.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakLaunchPlugin.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakHeaderPreferencePage.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakPreferenceNode.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/Messages.java create mode 100644 launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/messages.properties diff --git a/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java b/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java index f032d545af3..cb9b49d8295 100644 --- a/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java +++ b/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2014 QNX Software Systems and others. + * Copyright (c) 2000, 2020 QNX Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -11,6 +11,7 @@ * Contributors: * QNX Software Systems - Initial API and implementation * Martin Oberhuber (Wind River) - [303083] Split out the Spawner + * Red Hat Inc. - add flatpak support *******************************************************************************/ package org.eclipse.cdt.utils.spawner; @@ -30,6 +31,7 @@ public class ProcessFactory { static private ProcessFactory instance; private boolean hasSpawner; private Runtime runtime; + private final static String FLATPAK_CMD = "flatpak-spawn --host --watch-bus "; //$NON-NLS-1$ private ProcessFactory() { hasSpawner = false; @@ -57,44 +59,70 @@ public class ProcessFactory { } public Process exec(String cmd) throws IOException { + cmd = modifyCmdIfFlatpak(cmd); if (hasSpawner) return new Spawner(cmd); return runtime.exec(cmd); } public Process exec(String[] cmdarray) throws IOException { + cmdarray = modifyCmdArrayIfFlatpak(cmdarray); if (hasSpawner) return new Spawner(cmdarray); return runtime.exec(cmdarray); } public Process exec(String[] cmdarray, String[] envp) throws IOException { + cmdarray = modifyCmdArrayIfFlatpak(cmdarray); if (hasSpawner) return new Spawner(cmdarray, envp); return runtime.exec(cmdarray, envp); } public Process exec(String cmd, String[] envp) throws IOException { + cmd = modifyCmdIfFlatpak(cmd); if (hasSpawner) return new Spawner(cmd, envp); return runtime.exec(cmd, envp); } public Process exec(String cmd, String[] envp, File dir) throws IOException { + cmd = modifyCmdIfFlatpak(cmd); if (hasSpawner) return new Spawner(cmd, envp, dir); return runtime.exec(cmd, envp, dir); } public Process exec(String cmdarray[], String[] envp, File dir) throws IOException { + cmdarray = modifyCmdArrayIfFlatpak(cmdarray); if (hasSpawner) return new Spawner(cmdarray, envp, dir); return runtime.exec(cmdarray, envp, dir); } public Process exec(String cmdarray[], String[] envp, File dir, PTY pty) throws IOException { + cmdarray = modifyCmdArrayIfFlatpak(cmdarray); if (hasSpawner) return new Spawner(cmdarray, envp, dir, pty); throw new UnsupportedOperationException(Messages.Util_exception_cannotCreatePty); } + + private String modifyCmdIfFlatpak(String cmd) { + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + cmd = FLATPAK_CMD + cmd; + } + return cmd; + } + + private String[] modifyCmdArrayIfFlatpak(String[] cmdarray) { + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + String[] newArray = new String[cmdarray.length + 3]; + System.arraycopy(cmdarray, 0, newArray, 3, cmdarray.length); + newArray[0] = "flatpak-spawn"; //$NON-NLS-1$ + newArray[1] = "--host"; //$NON-NLS-1$ + newArray[2] = "--watch-bus"; //$NON-NLS-1$ + cmdarray = newArray; + } + return cmdarray; + } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncherManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncherManager.java index ef4d8459987..7518fbd22d1 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncherManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncherManager.java @@ -334,6 +334,14 @@ public class CommandLauncherManager { return includePaths; } + public boolean checkIfIncludesChanged(ICBuildConfiguration config) { + ICommandLauncherFactory factory = getBestFactory(config); + if (factory != null && factory instanceof ICommandLauncherFactory3) { + return ((ICommandLauncherFactory3) factory).checkIfIncludesChanged(config); + } + return false; + } + public void setLanguageSettingEntries(IProject project, List entries) { ICommandLauncherFactory factory = getBestFactory(project); if (factory != null) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncherFactory3.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncherFactory3.java new file mode 100644 index 00000000000..692494ada97 --- /dev/null +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncherFactory3.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core; + +import org.eclipse.cdt.core.build.ICBuildConfiguration; + +/** + * @since 7.0 + * + */ +public interface ICommandLauncherFactory3 { + + /** + * Check if any copied header files have changed. This applies when using + * Flatpak which needs to copy the host's header files to the workspace. + * + * @param cfg - C Build configuration to check for + * @return true if headers have been removed/changed since last copy, false otherwise + */ + public boolean checkIfIncludesChanged(ICBuildConfiguration cfg); + +} diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java index 7fde565b580..d0b6c275aa6 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java @@ -37,6 +37,7 @@ import java.util.Map.Entry; import java.util.Set; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.CommandLauncherManager; import org.eclipse.cdt.core.IConsoleParser; import org.eclipse.cdt.core.IConsoleParser2; import org.eclipse.cdt.core.IMarkerGenerator; @@ -497,6 +498,13 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu } commands.set(0, commandPath.toString()); + // check if includes have been removed/refreshed and scanner info refresh is needed + boolean needRefresh = CommandLauncherManager.getInstance().checkIfIncludesChanged(this); + IToolChain t = getToolChain(); + if (t != null) { + t.setProperty(NEED_REFRESH, Boolean.valueOf(needRefresh).toString()); + } + ProcessBuilder processBuilder = new ProcessBuilder(commands).directory(buildDirectory.toFile()); // Override environment variables Map environment = processBuilder.environment(); @@ -894,11 +902,9 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu boolean needScannerRefresh = false; - if (toolChain instanceof IToolChain2) { - String needRefresh = toolChain.getProperty(NEED_REFRESH); - if ("true".equals(needRefresh)) { //$NON-NLS-1$ - needScannerRefresh = true; - } + String needRefresh = toolChain.getProperty(NEED_REFRESH); + if ("true".equals(needRefresh)) { //$NON-NLS-1$ + needScannerRefresh = true; } for (IResource resource : resources) { @@ -1024,11 +1030,9 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu boolean needScannerRefresh = false; - if (toolChain instanceof IToolChain2) { - String needRefresh = toolChain.getProperty(NEED_REFRESH); - if ("true".equals(needRefresh)) { //$NON-NLS-1$ - needScannerRefresh = true; - } + String needRefresh = toolChain.getProperty(NEED_REFRESH); + if ("true".equals(needRefresh)) { //$NON-NLS-1$ + needScannerRefresh = true; } for (IResource resource : resources) { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java index da39e99a2be..03f9c5c6519 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/GdbDebuggerPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2017 QNX Software Systems and others. + * Copyright (c) 2008, 2020 QNX Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -22,6 +22,7 @@ import java.util.Observable; import java.util.Observer; import org.eclipse.cdt.debug.ui.AbstractCDebuggerPage; +import org.eclipse.cdt.dsf.gdb.IGDBFlatpakLaunchConstants; import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants; import org.eclipse.cdt.dsf.gdb.IGdbDebugPreferenceConstants; import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; @@ -42,6 +43,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; @@ -66,6 +68,12 @@ public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer { protected Button fUpdateThreadlistOnSuspend; protected Button fDebugOnFork; + + protected Text fGDBServerCommandText; + protected Text fGDBServerPortNumberText; + protected Button fRemoteTimeoutEnabledCheckbox; + protected Text fRemoteTimeoutValueText; + /** * Checkbox for using GDB's new-console -- only displayed on Windows. Will be null if unsupported. */ @@ -118,6 +126,18 @@ public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer { if (fSolibBlock != null) fSolibBlock.setDefaults(configuration); + + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + configuration.setAttribute(IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND, + IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND_DEFAULT); + configuration.setAttribute(IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT, + IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT_DEFAULT); + configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_ENABLED, + IGDBLaunchConfigurationConstants.DEBUGGER_REMOTE_TIMEOUT_ENABLED_DEFAULT); + configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE, + IGDBLaunchConfigurationConstants.DEBUGGER_REMOTE_TIMEOUT_VALUE_DEFAULT); + } + } @Override @@ -188,6 +208,23 @@ public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer { fExternalConsole.setSelection(externalConsole); } + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + String gdbServerCommand = getStringAttr(configuration, IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND, + IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND_DEFAULT); + boolean remoteTimeoutEnabled = getBooleanAttr(configuration, + IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_ENABLED, + preferenceStore.getBoolean(IGdbDebugPreferenceConstants.PREF_DEFAULT_REMOTE_TIMEOUT_ENABLED)); + String remoteTimeOut = getStringAttr(configuration, + IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE, + preferenceStore.getString(IGdbDebugPreferenceConstants.PREF_DEFAULT_REMOTE_TIMEOUT_VALUE)); + String port = getStringAttr(configuration, IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT, + IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT_DEFAULT); + fGDBServerCommandText.setText(gdbServerCommand); + fRemoteTimeoutEnabledCheckbox.setSelection(remoteTimeoutEnabled); + fRemoteTimeoutValueText.setText(remoteTimeOut); + fGDBServerPortNumberText.setText(port); + } + updateTracepointModeFromConfig(configuration); setInitializing(false); @@ -289,6 +326,18 @@ public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer { if (fSolibBlock != null) fSolibBlock.performApply(configuration); + + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + configuration.setAttribute(IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND, + fGDBServerCommandText.getText()); + configuration.setAttribute(IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT, + fGDBServerPortNumberText.getText()); + configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_ENABLED, + fRemoteTimeoutEnabledCheckbox.getSelection()); + configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE, + fRemoteTimeoutValueText.getText()); + } + } @Override @@ -327,6 +376,87 @@ public class GdbDebuggerPage extends AbstractCDebuggerPage implements Observer { public void createTabs(TabFolder tabFolder) { createMainTab(tabFolder); createSolibTab(tabFolder); + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + createFlatpakTab(tabFolder); + } + } + + public void createFlatpakTab(TabFolder tabFolder) { + TabItem tabItem = new TabItem(tabFolder, SWT.NONE); + tabItem.setText(LaunchUIMessages.getString("GDBDebuggerPage.flatpak_tab_name")); //$NON-NLS-1$ + Composite comp = ControlFactory.createCompositeEx(tabFolder, 1, GridData.FILL_BOTH); + ((GridLayout) comp.getLayout()).makeColumnsEqualWidth = false; + tabItem.setControl(comp); + + Composite subComp = new Composite(comp, SWT.NULL); + subComp.setLayout(new GridLayout(2, true)); + subComp.setLayoutData(new GridData(GridData.FILL_BOTH)); + ((GridLayout) subComp.getLayout()).makeColumnsEqualWidth = false; + subComp.setFont(tabFolder.getFont()); + + Label label = new Label(subComp, SWT.LEFT); + label.setText(LaunchUIMessages.getString("GDBDebuggerPage.gdbserver_name_textfield_label")); //$NON-NLS-1$ + GridData gd = new GridData(); + label.setLayoutData(gd); + + fGDBServerCommandText = new Text(subComp, SWT.SINGLE | SWT.BORDER); + GridData data = new GridData(SWT.FILL, SWT.TOP, true, false); + fGDBServerCommandText.setLayoutData(data); + fGDBServerCommandText.addModifyListener(new ModifyListener() { + + @Override + public void modifyText(ModifyEvent evt) { + updateLaunchConfigurationDialog(); + } + }); + label = new Label(subComp, SWT.LEFT); + label.setText(LaunchUIMessages.getString("GDBDebuggerPage.port_number_textfield_label")); //$NON-NLS-1$ + gd = new GridData(); + label.setLayoutData(gd); + + fGDBServerPortNumberText = new Text(subComp, SWT.SINGLE | SWT.BORDER); + data = new GridData(SWT.FILL, SWT.TOP, true, false); + fGDBServerPortNumberText.setLayoutData(data); + fGDBServerPortNumberText.addModifyListener(new ModifyListener() { + + @Override + public void modifyText(ModifyEvent evt) { + updateLaunchConfigurationDialog(); + } + }); + + fRemoteTimeoutEnabledCheckbox = new Button(subComp, SWT.CHECK); + fRemoteTimeoutEnabledCheckbox + .setText(LaunchUIMessages.getString("GDBDebuggerPage.gdbserver_Settings_Remotetimeout_label")); //$NON-NLS-1$ + fRemoteTimeoutEnabledCheckbox + .setToolTipText(LaunchUIMessages.getString("GDBDebuggerPage.gdbserver_Settings_Remotetimeout_tooltip")); //$NON-NLS-1$ + gd = new GridData(); + fRemoteTimeoutEnabledCheckbox.setLayoutData(gd); + fRemoteTimeoutEnabledCheckbox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + remoteTimeoutEnabledChanged(); + updateLaunchConfigurationDialog(); + } + }); + + fRemoteTimeoutValueText = new Text(subComp, SWT.SINGLE | SWT.BORDER); + data = new GridData(SWT.FILL, SWT.TOP, true, false); + fRemoteTimeoutValueText.setLayoutData(data); + fRemoteTimeoutValueText + .setToolTipText(LaunchUIMessages.getString("GDBDebuggerPage.gdbserver_Settings_Remotetimeout_tooltip")); //$NON-NLS-1$ + fRemoteTimeoutValueText.addModifyListener(new ModifyListener() { + + @Override + public void modifyText(ModifyEvent evt) { + updateLaunchConfigurationDialog(); + } + }); + remoteTimeoutEnabledChanged(); + } + + private void remoteTimeoutEnabledChanged() { + fRemoteTimeoutValueText.setEnabled(fRemoteTimeoutEnabledCheckbox.getSelection()); } public void createMainTab(TabFolder tabFolder) { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LaunchUIMessages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LaunchUIMessages.properties index 80164ffcc54..148badd9cd4 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LaunchUIMessages.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/LaunchUIMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2003, 2018 QNX Software Systems and others. +# Copyright (c) 2003, 2020 QNX Software Systems and others. # # This program and the accompanying materials # are made available under the terms of the Eclipse Public License 2.0 @@ -37,6 +37,13 @@ GDBDebuggerPage.tracepoint_mode_label=Tracepoint mode: GDBDebuggerPage.tracepoint_mode_fast=Fast GDBDebuggerPage.tracepoint_mode_normal=Normal GDBDebuggerPage.tracepoint_mode_auto=Automatic + +GDBDebuggerPage.flatpak_tab_name=Flatpak +GDBDebuggerPage.gdbserver_name_textfield_label=GDB server: +GDBDebuggerPage.port_number_textfield_label=Port: +GDBDebuggerPage.gdbserver_Settings_Remotetimeout_label=Remote timeout (seconds): +GDBDebuggerPage.gdbserver_Settings_Remotetimeout_tooltip=Timeout for the remote target to respond. If unchecked, uses GDB default value. See GDB's help for "set remotetimeout num". + StandardGDBDebuggerPage.0=Debugger executable must be specified. StandardGDBDebuggerPage.1=GDB Debugger Options StandardGDBDebuggerPage.2=Main diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/IGDBFlatpakLaunchConstants.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/IGDBFlatpakLaunchConstants.java new file mode 100644 index 00000000000..e72b8125a20 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/IGDBFlatpakLaunchConstants.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ +package org.eclipse.cdt.dsf.gdb; + +import org.eclipse.debug.core.DebugPlugin; + +/** + * Flatpak debugging constants + * + * @since 6.0 + */ +public interface IGDBFlatpakLaunchConstants { + + // Attributes that need to match CDT attribute names + public static final String ATTR_GDBSERVER_PORT = DebugPlugin.getUniqueIdentifier() + ".ATTR_GDBSERVER_PORT"; //$NON-NLS-1$ + public static final String ATTR_GDBSERVER_COMMAND = DebugPlugin.getUniqueIdentifier() + ".ATTR_GDBSERVER_COMMAND"; //$NON-NLS-1$ + + public static final String ATTR_GDBSERVER_PORT_DEFAULT = "2345"; //$NON-NLS-1$ + public static final String ATTR_GDBSERVER_COMMAND_DEFAULT = "gdbserver"; //$NON-NLS-1$ + +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/launching/FlatpakLaunch.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/launching/FlatpakLaunch.java new file mode 100644 index 00000000000..188bd93dd34 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/launching/FlatpakLaunch.java @@ -0,0 +1,310 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ +package org.eclipse.cdt.dsf.gdb.internal.launching; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.cdtvariables.CdtVariableException; +import org.eclipse.cdt.core.cdtvariables.ICdtVariable; +import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager; +import org.eclipse.cdt.core.envvar.IEnvironmentVariable; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; +import org.eclipse.cdt.dsf.gdb.IGDBFlatpakLaunchConstants; +import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants; +import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin; +import org.eclipse.cdt.dsf.gdb.launching.LaunchMessages; +import org.eclipse.cdt.utils.pty.PTY; +import org.eclipse.cdt.utils.spawner.ProcessFactory; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.variables.VariablesPlugin; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.model.IProcess; + +public class FlatpakLaunch { + + private final static String LOCAL_HOST = "localhost"; //$NON-NLS-1$ + private final static String FLATPAK_DEBUG_PROCESS_LABEL = "FlatpakDebugProcess_label"; //$NON-NLS-1$ + + public FlatpakLaunch() { + } + + private String[] getLaunchEnvironment(IProject project, ILaunchConfiguration config) throws CoreException { + HashMap envMap = new HashMap<>(); + ICProjectDescription projDesc = CoreModel.getDefault().getProjectDescription(project, false); + if (projDesc != null) { + String buildConfigID = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, + ""); //$NON-NLS-1$ + ICConfigurationDescription cfg = null; + if (buildConfigID.length() != 0) { + cfg = projDesc.getConfigurationById(buildConfigID); + } + + // if configuration is null fall-back to active + if (cfg == null) { + cfg = projDesc.getActiveConfiguration(); + } + + // Environment variables and inherited vars + IEnvironmentVariable[] vars = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(cfg, true); + for (IEnvironmentVariable var : vars) { + envMap.put(var.getName(), var.getValue()); + } + + // Add variables from build info + ICdtVariableManager manager = CCorePlugin.getDefault().getCdtVariableManager(); + ICdtVariable[] buildVars = manager.getVariables(cfg); + for (ICdtVariable var : buildVars) { + try { + // The project_classpath variable contributed by JDT is + // useless for running C/C++ binaries, but it can be lethal + // if it has a very large value that exceeds shell limit. See + // http://bugs.eclipse.org/bugs/show_bug.cgi?id=408522 + if (!"project_classpath".equals(var.getName())) {//$NON-NLS-1$ + String value = manager.resolveValue(var.getStringValue(), "", File.pathSeparator, cfg); //$NON-NLS-1$ + envMap.put(var.getName(), value); + } + } catch (CdtVariableException e) { + // Some Eclipse dynamic variables can't be resolved + // dynamically... we don't care. + } + } + } + + // Turn it into an envp format + List strings = new ArrayList<>(envMap.size()); + for (Entry entry : envMap.entrySet()) { + StringBuilder buffer = new StringBuilder(entry.getKey()); + buffer.append('=').append(entry.getValue()); + strings.add(buffer.toString()); + } + + return strings.toArray(new String[strings.size()]); + } + + protected Map createProcessAttributes() { + Map attributes = new HashMap<>(); + + // Specify that the process factory (GdbProcessFactory) should use + // InferiorRuntimeProcess to wrap + // the process that we are about to run. + // Note that GdbProcessFactory is only used for launches created using + // DSF-GDB not CDI + attributes.put("org.eclipse.cdt.dsf.gdb.createProcessType" /* IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR */, //$NON-NLS-1$ + "org.eclipse.cdt.dsf.gdb.inferiorProcess" /* IGdbDebugConstants.INFERIOR_PROCESS_CREATION_VALUE */); //$NON-NLS-1$ + + // Show the exit code of the process in the console title once it has + // terminated + attributes.put("org.eclipse.cdt.dsf.gdb.inferiorExited" /* IGdbDebugConstants.INFERIOR_EXITED_ATTR */, //$NON-NLS-1$ + ""); //$NON-NLS-1$ + return attributes; + } + + public int prelaunch(ILaunchConfiguration configuration, ILaunch launch, IProgressMonitor monitor) + throws CoreException { + + IPath commandPath = getCommandPath(configuration); + if (commandPath != null) { + String projectName = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); + String gdbserverPortNumber = configuration.getAttribute(IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT, + IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_PORT_DEFAULT); + + String gdbserverPort = gdbserverPortNumber + "/tcp"; //$NON-NLS-1$ + String gdbserverCommand = configuration.getAttribute(IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND, + IGDBFlatpakLaunchConstants.ATTR_GDBSERVER_COMMAND_DEFAULT); + + String commandString = commandPath.toPortableString(); + String commandDir = commandPath.removeLastSegments(1).toPortableString(); + + if (commandPath.getDevice() != null) { + commandDir = "/" + commandDir.replace(':', '/'); //$NON-NLS-1$ + commandString = "/" + commandString.replace(':', '/'); //$NON-NLS-1$ + } + + String commandArguments = ":" + gdbserverPortNumber + " " //$NON-NLS-1$ //$NON-NLS-2$ + + spaceEscapify(commandString); + + StringBuilder b = new StringBuilder(); + + String[] commandArray = new String[3]; + commandArray[0] = "/bin/sh"; //$NON-NLS-1$ + commandArray[1] = "-c"; //$NON-NLS-1$ + commandArray[2] = b.append(gdbserverCommand).append(' ').append(commandArguments).toString(); + + String arguments = getProgramArguments(configuration); + if (arguments.trim().length() > 0) { + b.append(" "); //$NON-NLS-1$ + b.append(arguments); + } + + String workingDir = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, + (String) null); + // if we don't have a working directory, the default is to use + // the project + if (workingDir == null && projectName != null) { + workingDir = project.getLocation().toOSString(); + } + if (workingDir != null) { + IPath workingPath = new Path(workingDir); + if (workingPath.getDevice() != null) { + workingDir = "/" + workingPath.toPortableString() //$NON-NLS-1$ + .replace(':', '/'); + } + } + + String[] envp = getLaunchEnvironment(project, configuration); + boolean gdbserverStarted = false; + try { + Process p = ProcessFactory.getFactory().exec(commandArray, envp, new File(workingDir), + new PTY(PTY.Mode.TERMINAL)); + IProcess gdbserver = DebugPlugin.newProcess(launch, p, + LaunchMessages.getString(FLATPAK_DEBUG_PROCESS_LABEL), createProcessAttributes()); + Thread.sleep(200); // pause to allow gdbserver to start + try { + @SuppressWarnings("unused") + int rc = gdbserver.getExitValue(); // verify gdbserver is started + } catch (DebugException e2) { + gdbserverStarted = true; + } + } catch (IOException e) { + GdbPlugin.log(e); + } catch (InterruptedException e) { + DebugPlugin.log(e); + } + + // if gdbserver started successfully launch the debugger + if (gdbserverStarted) { + // Let debugger know how gdbserver was started on the remote + // container + ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy(); + wc.setAttribute(IGDBLaunchConfigurationConstants.ATTR_REMOTE_TCP, true); + wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, + IGDBLaunchConfigurationConstants.DEBUGGER_MODE_REMOTE); + wc.setAttribute(IGDBLaunchConfigurationConstants.ATTR_HOST, LOCAL_HOST); + wc.setAttribute(IGDBLaunchConfigurationConstants.ATTR_PORT, gdbserverPort); + wc.doSave(); + return 0; + } else { + return -1; + } + } + return -1; + } + + /** + * Get the program arguments and perform substitution. + * + * @param config + * launch configuration + * @return argument String + * @throws CoreException + */ + private String getProgramArguments(ILaunchConfiguration config) throws CoreException { + String args = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""); //$NON-NLS-1$ + if (args != null && args.length() > 0) { + args = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(args); + } + return args; + } + + /** + * Form command path using the project and program name. + * + * @param configuration + * @return command path + * @throws CoreException + */ + private IPath getCommandPath(ILaunchConfiguration configuration) throws CoreException { + String projectName = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ + if (projectName.length() > 0) { + IProject project = CCorePlugin.getWorkspace().getRoot().getProject(projectName); + if (project == null) + return null; + + String name = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, ""); //$NON-NLS-1$ + + if (name.length() == 0) + return null; + + IPath exePath = new Path(name); + if (!exePath.isAbsolute()) { + IPath location = project.getLocation(); + if (location == null) { + return null; + } + + exePath = location.append(name); + if (!exePath.toFile().exists()) { + // Try the old way, which is required to support linked + // resources. + IFile projFile = null; + try { + projFile = project.getFile(name); + } catch (IllegalArgumentException e) { + // thrown if relative path that resolves to a root file + // ("..\somefile") + } + if (projFile == null || !projFile.exists()) { + return null; + } else { + exePath = projFile.getLocation(); + } + } + } + if (!exePath.toFile().exists()) { + return null; + } + + if (!exePath.toFile().isFile()) { + return null; + } + return exePath; + } else { + return null; + } + } + + private String spaceEscapify(String inputString) { + if (inputString == null) + return null; + + return inputString.replaceAll(" ", "\\\\ "); //$NON-NLS-1$ //$NON-NLS-2$ + } + + public static IProject getProject(ILaunchConfiguration configuration) throws CoreException { + // TODO - make sure this is really the correct project + return configuration.getMappedResources()[0].getProject(); + } + +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunchDelegate.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunchDelegate.java index c8e85a89532..a671bc84668 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunchDelegate.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunchDelegate.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2016 QNX Software Systems and others. + * Copyright (c) 2008, 2020 QNX Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -20,6 +20,7 @@ * Marc-Andre Laperle - Bug 382462 * Marc Khouzam (Ericsson - Show GDB version in debug view node label (Bug 455408) * Samuel Hultgren (STMicroelectronics) - Bug 533769 + * Red Hat Inc. - add Flatpak support *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.launching; @@ -37,6 +38,7 @@ import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory; import org.eclipse.cdt.dsf.debug.sourcelookup.DsfSourceLookupDirector; import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants; import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin; +import org.eclipse.cdt.dsf.gdb.internal.launching.FlatpakLaunch; import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactory; import org.eclipse.cdt.dsf.gdb.service.SessionType; import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl; @@ -116,6 +118,13 @@ public class GdbLaunchDelegate extends AbstractCLaunchDelegate2 { return; } + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + FlatpakLaunch flatpak = new FlatpakLaunch(); + if (flatpak.prelaunch(config, l, monitor) != 0) { + return; + } + } + SessionType sessionType = LaunchUtils.getSessionType(config); boolean attach = LaunchUtils.getIsAttach(config); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/LaunchMessages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/LaunchMessages.properties index 17952d59e59..93d82fccde7 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/LaunchMessages.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/LaunchMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2008, 2018 QNX Software Systems and others. +# Copyright (c) 2008, 2020 QNX Software Systems and others. # # This program and the accompanying materials # are made available under the terms of the Eclipse Public License 2.0 @@ -184,3 +184,5 @@ ServicesLaunchSequence_0=Initializing debugger services ServicesLaunchSequence_1=Aborting debugger services initialization InferiorRuntimeProcess_ExitValue=(exit value: {0})\u0020 + +FlatpakDebugProcess_label=Flatpak Debug diff --git a/launch/org.eclipse.cdt.docker.launcher/plugin.xml b/launch/org.eclipse.cdt.docker.launcher/plugin.xml index 76a4658bdd0..91715fe4fbd 100644 --- a/launch/org.eclipse.cdt.docker.launcher/plugin.xml +++ b/launch/org.eclipse.cdt.docker.launcher/plugin.xml @@ -99,8 +99,9 @@ name="%ContainerCommandLauncherFactory.name" point="org.eclipse.cdt.core.CommandLauncherFactory"> + class="org.eclipse.cdt.docker.launcher.ContainerCommandLauncherFactory" + id="ContainerCommandLauncherFactory" + priority="5"> + + org.eclipse.cdt.flatpak.launcher-feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/launch/org.eclipse.cdt.flatpak.launcher-feature/build.properties b/launch/org.eclipse.cdt.flatpak.launcher-feature/build.properties new file mode 100644 index 00000000000..b3a611b5c93 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher-feature/build.properties @@ -0,0 +1,2 @@ +bin.includes = feature.xml,\ + feature.properties diff --git a/launch/org.eclipse.cdt.flatpak.launcher-feature/feature.properties b/launch/org.eclipse.cdt.flatpak.launcher-feature/feature.properties new file mode 100644 index 00000000000..628aaaaf9a6 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher-feature/feature.properties @@ -0,0 +1,22 @@ +################################################################################# +# Copyright (c) 2020 Red Hat, Inc. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat Incorporated - initial API and implementation +################################################################################# +featureName=C/C++ Flatpak Launch Support +description=Plugins for launching C/C++ applications in Eclipse Flatpak. +provider=Eclipse CDT +copyright=\ +Copyright (c) 2020 Red Hat, Inc. and others.\n\ +This program and the accompanying materials\n\ +are made available under the terms of the Eclipse Public License 2.0\n\ +which accompanies this distribution, and is available at\n\ +https://www.eclipse.org/legal/epl-2.0/ diff --git a/launch/org.eclipse.cdt.flatpak.launcher-feature/feature.xml b/launch/org.eclipse.cdt.flatpak.launcher-feature/feature.xml new file mode 100644 index 00000000000..62d1f6d1287 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher-feature/feature.xml @@ -0,0 +1,29 @@ + + + + + %description + + + + %copyright + + + + %license + + + + + diff --git a/launch/org.eclipse.cdt.flatpak.launcher-feature/pom.xml b/launch/org.eclipse.cdt.flatpak.launcher-feature/pom.xml new file mode 100644 index 00000000000..c35b6f44ffc --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher-feature/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + + org.eclipse.cdt + cdt-parent + 10.0.0-SNAPSHOT + ../../pom.xml + + + org.eclipse.cdt.features + org.eclipse.cdt.flatpak.launcher + eclipse-feature + diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.classpath b/launch/org.eclipse.cdt.flatpak.launcher/.classpath new file mode 100644 index 00000000000..e801ebfb468 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.gitignore b/launch/org.eclipse.cdt.flatpak.launcher/.gitignore new file mode 100644 index 00000000000..ae3c1726048 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.project b/launch/org.eclipse.cdt.flatpak.launcher/.project new file mode 100644 index 00000000000..60ab768d2df --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.project @@ -0,0 +1,34 @@ + + + org.eclipse.cdt.flatpak.launcher + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.pde.api.tools.apiAnalysisBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.api.tools.apiAnalysisNature + + diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.core.prefs b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..e3a8104f9ca --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,486 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.builder.cleanOutputFolder=clean +org.eclipse.jdt.core.builder.duplicateResourceTask=warning +org.eclipse.jdt.core.builder.invalidClasspath=abort +org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore +org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch, *.xtend +org.eclipse.jdt.core.circularClasspath=error +org.eclipse.jdt.core.classpath.exclusionPatterns=enabled +org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error +org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled +org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.maxProblemPerUnit=100 +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=warning +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=error +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=false +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=true +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.incompatibleJDKLevel=ignore +org.eclipse.jdt.core.incompleteClasspath=error +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.launching.prefs b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.launching.prefs new file mode 100644 index 00000000000..f8a131b56e0 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.launching.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.launching.PREF_COMPILER_COMPLIANCE_DOES_NOT_MATCH_JRE=warning +org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.ui.prefs b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 00000000000..e44576346c4 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,133 @@ +cleanup.add_default_serial_version_id=true +cleanup.add_generated_serial_version_id=false +cleanup.add_missing_annotations=true +cleanup.add_missing_deprecated_annotations=true +cleanup.add_missing_methods=false +cleanup.add_missing_nls_tags=false +cleanup.add_missing_override_annotations=true +cleanup.add_missing_override_annotations_interface_methods=true +cleanup.add_serial_version_id=false +cleanup.always_use_blocks=true +cleanup.always_use_parentheses_in_expressions=false +cleanup.always_use_this_for_non_static_field_access=false +cleanup.always_use_this_for_non_static_method_access=false +cleanup.convert_functional_interfaces=false +cleanup.convert_to_enhanced_for_loop=false +cleanup.correct_indentation=false +cleanup.format_source_code=true +cleanup.format_source_code_changes_only=false +cleanup.insert_inferred_type_arguments=false +cleanup.make_local_variable_final=true +cleanup.make_parameters_final=false +cleanup.make_private_fields_final=true +cleanup.make_type_abstract_if_missing_method=false +cleanup.make_variable_declarations_final=false +cleanup.never_use_blocks=false +cleanup.never_use_parentheses_in_expressions=true +cleanup.organize_imports=true +cleanup.qualify_static_field_accesses_with_declaring_class=false +cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +cleanup.qualify_static_member_accesses_with_declaring_class=false +cleanup.qualify_static_method_accesses_with_declaring_class=false +cleanup.remove_private_constructors=true +cleanup.remove_redundant_modifiers=false +cleanup.remove_redundant_semicolons=true +cleanup.remove_redundant_type_arguments=true +cleanup.remove_trailing_whitespaces=true +cleanup.remove_trailing_whitespaces_all=true +cleanup.remove_trailing_whitespaces_ignore_empty=false +cleanup.remove_unnecessary_casts=true +cleanup.remove_unnecessary_nls_tags=false +cleanup.remove_unused_imports=true +cleanup.remove_unused_local_variables=false +cleanup.remove_unused_private_fields=true +cleanup.remove_unused_private_members=false +cleanup.remove_unused_private_methods=true +cleanup.remove_unused_private_types=true +cleanup.sort_members=false +cleanup.sort_members_all=false +cleanup.use_anonymous_class_creation=false +cleanup.use_blocks=false +cleanup.use_blocks_only_for_return_and_throw=false +cleanup.use_lambda=true +cleanup.use_parentheses_in_expressions=false +cleanup.use_this_for_non_static_field_access=false +cleanup.use_this_for_non_static_field_access_only_if_necessary=true +cleanup.use_this_for_non_static_method_access=false +cleanup.use_this_for_non_static_method_access_only_if_necessary=true +cleanup_profile=_CDT +cleanup_settings_version=2 +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_CDT +formatter_settings_version=14 +internal.default.compliance=user +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=java;javax;org;com; +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.ondemandthreshold=1000 +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.staticondemandthreshold=1000 +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_functional_interfaces=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.insert_inferred_type_arguments=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_redundant_modifiers=false +sp_cleanup.remove_redundant_semicolons=true +sp_cleanup.remove_redundant_type_arguments=true +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=true +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_anonymous_class_creation=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_lambda=true +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.api.tools.prefs b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.api.tools.prefs new file mode 100644 index 00000000000..ec9fbf321d0 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.api.tools.prefs @@ -0,0 +1,184 @@ +ANNOTATION_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error +ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error +ANNOTATION_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error +ANNOTATION_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error +ANNOTATION_ELEMENT_TYPE_ADDED_METHOD=Error +ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error +ANNOTATION_ELEMENT_TYPE_ADDED_TYPE_MEMBER=Error +ANNOTATION_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_INTERFACE_BOUNDS=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_TO_CLASS=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_TO_ENUM=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_TO_INTERFACE=Error +ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD_WITHOUT_DEFAULT_VALUE=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD_WITH_DEFAULT_VALUE=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error +ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error +API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error +API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error +API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error +API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error +API_USE_SCAN_FIELD_SEVERITY=Error +API_USE_SCAN_METHOD_SEVERITY=Error +API_USE_SCAN_TYPE_SEVERITY=Error +CLASS_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error +CLASS_ELEMENT_TYPE_ADDED_FIELD=Error +CLASS_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error +CLASS_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error +CLASS_ELEMENT_TYPE_ADDED_METHOD=Error +CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error +CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error +CLASS_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error +CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERCLASS_SET=Error +CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error +CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error +CLASS_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error +CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error +CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error +CLASS_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error +CLASS_ELEMENT_TYPE_CHANGED_SUPERCLASS=Error +CLASS_ELEMENT_TYPE_CHANGED_TO_ANNOTATION=Error +CLASS_ELEMENT_TYPE_CHANGED_TO_ENUM=Error +CLASS_ELEMENT_TYPE_CHANGED_TO_INTERFACE=Error +CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error +CLASS_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error +CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error +CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error +CLASS_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error +CLASS_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error +CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error +CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error +CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error +CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error +CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error +CONSTRUCTOR_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error +CONSTRUCTOR_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error +CONSTRUCTOR_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error +CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_TYPE_PARAMETER=Error +CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error +CONSTRUCTOR_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error +CONSTRUCTOR_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error +CONSTRUCTOR_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error +CONSTRUCTOR_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error +CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error +CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error +ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error +ENUM_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error +ENUM_ELEMENT_TYPE_CHANGED_TO_ANNOTATION=Error +ENUM_ELEMENT_TYPE_CHANGED_TO_CLASS=Error +ENUM_ELEMENT_TYPE_CHANGED_TO_INTERFACE=Error +ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error +ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error +ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error +ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error +ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error +FIELD_ELEMENT_TYPE_ADDED_VALUE=Error +FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error +FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error +FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error +FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error +FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error +FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error +FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error +FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error +FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENTS=Error +FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error +ILLEGAL_EXTEND=Warning +ILLEGAL_IMPLEMENT=Warning +ILLEGAL_INSTANTIATE=Warning +ILLEGAL_OVERRIDE=Warning +ILLEGAL_REFERENCE=Warning +INTERFACE_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error +INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Error +INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error +INTERFACE_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error +INTERFACE_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error +INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error +INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error +INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error +INTERFACE_ELEMENT_TYPE_ADDED_TYPE_MEMBER=Error +INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error +INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETERS=Error +INTERFACE_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error +INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error +INTERFACE_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error +INTERFACE_ELEMENT_TYPE_CHANGED_INTERFACE_BOUNDS=Error +INTERFACE_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error +INTERFACE_ELEMENT_TYPE_CHANGED_TO_ANNOTATION=Error +INTERFACE_ELEMENT_TYPE_CHANGED_TO_CLASS=Error +INTERFACE_ELEMENT_TYPE_CHANGED_TO_ENUM=Error +INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error +INTERFACE_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error +INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error +INTERFACE_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error +INTERFACE_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error +INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error +INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error +INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error +INVALID_ANNOTATION=Ignore +INVALID_JAVADOC_TAG=Error +INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Warning +LEAK_EXTEND=Warning +LEAK_FIELD_DECL=Warning +LEAK_IMPLEMENT=Warning +LEAK_METHOD_PARAM=Warning +LEAK_METHOD_RETURN_TYPE=Warning +METHOD_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error +METHOD_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error +METHOD_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error +METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error +METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error +METHOD_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error +METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error +METHOD_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error +METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error +METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error +METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error +METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error +METHOD_ELEMENT_TYPE_CHANGED_TYPE_PARAMETER=Error +METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error +METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error +METHOD_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error +METHOD_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error +METHOD_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error +METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error +METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error +MISSING_EE_DESCRIPTIONS=Warning +TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error +TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error +TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error +TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error +TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error +TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error +UNUSED_PROBLEM_FILTERS=Warning +automatically_removed_unused_problem_filters=false +changed_execution_env=Error +eclipse.preferences.version=1 +incompatible_api_component_version=Error +incompatible_api_component_version_include_major_without_breaking_change=Disabled +incompatible_api_component_version_include_minor_without_api_change=Disabled +incompatible_api_component_version_report_major_without_breaking_change=Warning +incompatible_api_component_version_report_minor_without_api_change=Warning +invalid_since_tag_version=Error +malformed_since_tag=Error +missing_since_tag=Error +report_api_breakage_when_major_version_incremented=Disabled +report_resolution_errors_api_component=Warning diff --git a/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.prefs b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.prefs new file mode 100644 index 00000000000..d2dc703ba9e --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/.settings/org.eclipse.pde.prefs @@ -0,0 +1,35 @@ +compilers.f.unresolved-features=1 +compilers.f.unresolved-plugins=1 +compilers.incompatible-environment=1 +compilers.p.build=1 +compilers.p.build.bin.includes=1 +compilers.p.build.encodings=2 +compilers.p.build.java.compiler=2 +compilers.p.build.java.compliance=1 +compilers.p.build.missing.output=2 +compilers.p.build.output.library=1 +compilers.p.build.source.library=1 +compilers.p.build.src.includes=1 +compilers.p.deprecated=1 +compilers.p.discouraged-class=1 +compilers.p.internal=1 +compilers.p.missing-packages=2 +compilers.p.missing-version-export-package=2 +compilers.p.missing-version-import-package=2 +compilers.p.missing-version-require-bundle=2 +compilers.p.no-required-att=0 +compilers.p.no.automatic.module=1 +compilers.p.not-externalized-att=1 +compilers.p.service.component.without.lazyactivation=1 +compilers.p.unknown-attribute=1 +compilers.p.unknown-class=1 +compilers.p.unknown-element=1 +compilers.p.unknown-identifier=1 +compilers.p.unknown-resource=1 +compilers.p.unresolved-ex-points=0 +compilers.p.unresolved-import=0 +compilers.s.create-docs=false +compilers.s.doc-folder=doc +compilers.s.open-tags=1 +compilers.use-project=true +eclipse.preferences.version=1 diff --git a/launch/org.eclipse.cdt.flatpak.launcher/META-INF/MANIFEST.MF b/launch/org.eclipse.cdt.flatpak.launcher/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..894dfb3876b --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/META-INF/MANIFEST.MF @@ -0,0 +1,34 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %Plugin.name +Bundle-SymbolicName: org.eclipse.cdt.flatpak.launcher;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: org.eclipse.cdt.flatpak.launcher.FlatpakLaunchPlugin +Bundle-Vendor: %Plugin.vendor +Bundle-Localization: plugin +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.cdt.launch;bundle-version="7.1.0", + org.eclipse.debug.core;bundle-version="3.9.1", + org.eclipse.debug.ui;bundle-version="3.10.1", + org.eclipse.cdt.core;bundle-version="6.5.0", + org.eclipse.cdt.debug.core;bundle-version="7.5.0", + org.eclipse.cdt.ui;bundle-version="5.8.0", + org.eclipse.ui.ide;bundle-version="3.10.1", + org.eclipse.cdt.debug.ui;bundle-version="7.5.0", + org.eclipse.cdt.dsf.gdb;bundle-version="4.6.0", + org.eclipse.cdt.dsf.gdb.ui;bundle-version="2.4.0", + org.eclipse.core.variables, + org.eclipse.cdt.managedbuilder.ui, + org.eclipse.cdt.managedbuilder.core, + org.eclipse.core.databinding.observable, + org.eclipse.core.databinding.beans, + org.eclipse.jface.databinding, + org.eclipse.core.databinding;bundle-version="1.6.0", + org.eclipse.core.databinding.property;bundle-version="1.6.0", + org.eclipse.launchbar.ui;bundle-version="2.2.0", + com.google.gson +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Bundle-ActivationPolicy: lazy +Export-Package: org.eclipse.cdt.flatpak.launcher +Automatic-Module-Name: org.eclipse.cdt.flatpak.launcher diff --git a/launch/org.eclipse.cdt.flatpak.launcher/about.html b/launch/org.eclipse.cdt.flatpak.launcher/about.html new file mode 100644 index 00000000000..164f781a8fd --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/about.html @@ -0,0 +1,36 @@ + + + + +About + + +

About This Content

+ +

November 30, 2017

+

License

+ +

+ The Eclipse Foundation makes available all content in this plug-in + ("Content"). Unless otherwise indicated below, the Content + is provided to you under the terms and conditions of the Eclipse + Public License Version 2.0 ("EPL"). A copy of the EPL is + available at http://www.eclipse.org/legal/epl-2.0. + For purposes of the EPL, "Program" will mean the Content. +

+ +

+ If you did not receive this Content directly from the Eclipse + Foundation, the Content is being redistributed by another party + ("Redistributor") and different terms and conditions may + apply to your use of any object code in the Content. Check the + Redistributor's license that was provided with the Content. If no such + license exists, contact the Redistributor. Unless otherwise indicated + below, the terms and conditions of the EPL still apply to any source + code in the Content and such source code may be obtained at http://www.eclipse.org. +

+ + + \ No newline at end of file diff --git a/launch/org.eclipse.cdt.flatpak.launcher/about.ini b/launch/org.eclipse.cdt.flatpak.launcher/about.ini new file mode 100644 index 00000000000..e07a7bb377e --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/about.ini @@ -0,0 +1,24 @@ +# about.ini +# contains information about a feature +# java.io.Properties file (ISO 8859-1 with "\" escapes) +# "%key" are externalized strings defined in about.properties +# This file does not need to be translated. + +# Property "aboutText" contains blurb for "About" dialog (translated) +aboutText=%blurb + +# Property "windowImage" contains path to window icon (16x16) +# needed for primary features only + +# Property "featureImage" contains path to feature image (32x32) +featureImage=cdt_logo_icon32.png + +# Property "aboutImage" contains path to product image (500x330 or 115x164) +# needed for primary features only + +# Property "appName" contains name of the application (translated) +# needed for primary features only + +# Property "welcomePerspective" contains the id of the perspective in which the +# welcome page is to be opened. +# optional diff --git a/launch/org.eclipse.cdt.flatpak.launcher/about.mappings b/launch/org.eclipse.cdt.flatpak.launcher/about.mappings new file mode 100644 index 00000000000..936a8039c3e --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/about.mappings @@ -0,0 +1,9 @@ +# about.mappings +# contains fill-ins for about.properties +# java.io.Properties file (ISO 8859-1 with "\" escapes) +# This file does not need to be translated. + +# The following should contain the build version. +# e.g. "0=20200106-1728" +# This value will be added automatically via the build scripts +0=${buildId} diff --git a/launch/org.eclipse.cdt.flatpak.launcher/about.properties b/launch/org.eclipse.cdt.flatpak.launcher/about.properties new file mode 100644 index 00000000000..2abed63a83b --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/about.properties @@ -0,0 +1,32 @@ +############################################################################### +# Copyright (c) 2020, 2020 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# about.properties +# contains externalized strings for about.ini +# java.io.Properties file (ISO 8859-1 with "\" escapes) +# fill-ins are supplied by about.mappings +# This file should be translated. +# NOTE TO TRANSLATOR: Please do not translate the featureVersion variable. + + +blurb=C/C++ Flatpak Launch Support\n\ +\n\ +Version: {featureVersion}\n\ +Build id: {0}\n\ +\n\ +Copyright (c) 2020, 2020 Contributors to the Eclipse Foundation +\n\ +See the NOTICE file(s) distributed with this work for additional\n\ +information regarding copyright ownership.\n\ +\n\ +Visit http://www.eclipse.org/cdt diff --git a/launch/org.eclipse.cdt.flatpak.launcher/build.properties b/launch/org.eclipse.cdt.flatpak.launcher/build.properties new file mode 100644 index 00000000000..9c548b3b846 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/build.properties @@ -0,0 +1,26 @@ +############################################################################### +# Copyright (c) 2020 Red Hat Inc. and others. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat Inc. - initial API and implementation +############################################################################### +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + plugin.properties,\ + about.html,\ + cdt_logo_icon32.png,\ + about.properties,\ + about.mappings,\ + about.ini,\ + schema/ +src.includes = about.html diff --git a/launch/org.eclipse.cdt.flatpak.launcher/cdt_logo_icon32.png b/launch/org.eclipse.cdt.flatpak.launcher/cdt_logo_icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..470ca81b327234a519c2a443515e85727409b5f4 GIT binary patch literal 1885 zcmV-j2cr0iP)!H^1ntgMx$mQ^a+I-;$Ws3z8GYqX(iXst@JwrY8nR6N2$5hQdjkl4<{u^qpz z?d$vAABiL5I?h--Z9nP$^PTUU@Ao_B+;hGI{Evg&ZU?&_cApis05Hm7G%X$~QC}(f-LgFHq8$YV5GWUfO@Y&&e z=IeO2a}heb&KSCn2bXwkmWC&EjL}=EpQ_6Fbawo$X!6<%g2er^5|^HZlrrGdhzkH3D^y=pV@;xrv=WnFMDJJ zD2gd2D~gm!W&&?Sl0*9xMZBew*#QY*9F~UdHLg3mXj*3};HgaL$aw714n-B?#r#=; zAGG6#ZPjRfx|e>Q=-Pf(DlRKxYGUe>U8zj)F92XRRNZGY`@XMdZ7T?&SV_u_WcbPV zQ`z9*1UGyrmyexk@UA^Z2xW*QhMtS3ZyYR}FaTIsSpKmG12z+E?Jw8tb~!uWEG3Rd z2X@A}o4;phgV*a>dC+EBxT)O6%!}!3p~$&M1TlS8ud}ugLL2j9a-f_z08jvMcP&;m zyRfu(5WN&r_h2b0ot^mmw79;iuDYYgZuUJi*I!{^Z7qwv_x0%*<03)gu2m8TW|m-m z6V^imj`^9h7E|?0rKDK$(-#4t%F*(?$>3@);F6q=WckQ3Rg-fTQ_TY`WAaIIJ~|n{ zvR9J%P$l785@`3L9V&1+Y#1X3!YGQw0h%@~!UuE0)LEKh-F9>B7DW-$03m{u9t=*N z-7G8laR4BMVmv|4@YeP7u>q z6Ws7?voqk-!^!dB2+@0NX5Ygz;u-*C_{ecd&IMSVrP*roZUg{Dm6DYbplQ9wWo_JL zWSy&6#-{|RppGP zDcPCX$^w9<%Gn|;Q{XZHkjNoX??k;Mr>@4+H(o6stZ;tk^07Wi&IKz87edpNd@SWZ zz%WK%@e<5nwZ%(70N{hI`0$&JxPQg#j_(oEy1y0=CdquzA9`;wO|kCgx^IOjLg@iO z5V@g1xNn1`@M8c#Q>@G5Xx^LTg58BpNC<5JG_`mWmSQvjEO%o?XDvEU2l8))rKWGt zl+HwEf~HwVCO7$kC};dS+Tb-A++QPv5QZ@C8>ZOyEzseDtK*SiM2V z7#9KnMJSz~wKf}AduzcbOk?)D(%I1?sw$`FTP_L!P6ct&AIE1~?!XpR3cgcHvKSZK z>#{ZOR5gVk34gRM!3F-TY18LKY2@q-szfT82&I z>CCw+@oJlnG1V3m&Bp2t(zNI6=W^q3XZY~DiYg@(MM{ctE|BFTC!)zu_fICS?3EQE zY}7mNuB+~N$8BqRO4C#^Cro`@E`izeoFz?CW|;Z$wSgv}7jG zJsH39w5$lxvK3J}hr`;ieSu^7FN?2ZE<5q=XtaM@>2-X|h0<1qJI_Cc^Ctp0@#OKA zi*p$gMV0w!LlQkDO1WV`l^NPlW7NCuv6+1j7xqYLR5T=oc%%he4u1!S_w`}lA3s~Q z^vkkjypR|e3HPlpwPc@j#e*>nj-(LiT8FN@F!A2$AbrlLcXxadQ<~u;r$duxHz{S7 zt*kA-9Kq#}Msa5UTD*9NJ(4`?PaR-%RcmO9G2f1`tcb~2%HK5}8~E{DzhuR#9C|pO zS&e5mFT>`S&NHv}1eO@>)}~$aJxpXdA4})P-;SmH2Sh33uf+YgrqyGFXX|o2+Uh~; zScZfzOuG2XQ*Ns8G$SCiqDqCQS${SkIq{`D&B_H$K-b!^$gG1oltzdXG4E;je;xk< X7GP-TgL9xq00000NkvXXu0mjf1*xYU literal 0 HcmV?d00001 diff --git a/launch/org.eclipse.cdt.flatpak.launcher/plugin.properties b/launch/org.eclipse.cdt.flatpak.launcher/plugin.properties new file mode 100644 index 00000000000..d7ccc1d29ff --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/plugin.properties @@ -0,0 +1,19 @@ +############################################################################### +# Copyright (c) 2020 Red Hat Inc. and others. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat Inc. - initial API and implementation +############################################################################### +Plugin.name=C/C++ Flatpak Launch Plug-in +Plugin.vendor=Eclipse CDT +Delegate.name=C/C++ Flatpak Launcher +Delegate.desc=This launcher supports C/C++ development on Eclipse flatpak. +FlatpakHeaderPreferencePage.name=Workspace Cached Headers +FlatpakPreferencePages.name=Flatpak Preference Pages diff --git a/launch/org.eclipse.cdt.flatpak.launcher/plugin.xml b/launch/org.eclipse.cdt.flatpak.launcher/plugin.xml new file mode 100644 index 00000000000..1fb70774c4f --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/plugin.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + diff --git a/launch/org.eclipse.cdt.flatpak.launcher/schema/flatpakPreferencePages.exsd b/launch/org.eclipse.cdt.flatpak.launcher/schema/flatpakPreferencePages.exsd new file mode 100644 index 00000000000..32ae448716d --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/schema/flatpakPreferencePages.exsd @@ -0,0 +1,175 @@ + + + + + + + + + Specify a Preference page which only gets added if running under Eclipse flatpak + + + + + + + + + + + + a fully qualified identifier of the target extension point + + + + + + + an optional identifier of the extension instance + + + + + + + an optional name of the extension instance + + + + + + + + + + + + + + + + + + + + + + + a unique name that will be used to identify the page + + + + + + + a translatable name that will be used in the UI for this page + + + + + + + + + + A class that implements org.eclipse.ui.IWorkbenchPreferencePage + + + + + + + + + + a path indicating the location of the page in the preference tree. The path may either be a parent node ID or a sequence + of IDs separated by &apos;/&apos;, representing the full path from the root node. + + + + + + + + + + + + + A reference by a preference page to a keyword. See the keywords extension point. + + + + + + + The id of the keyword being referred to. + + + + + + + + + + + + + + + 10.0.0 + + + + + + + + + The following is an example for the preference extension point: +<p> +<pre> + <extension + point="org.eclipse.cdt.flatpak.launch.preferencePages"> + <page + id="com.xyz.prefpage1" + name="XYZ" + class="com.xyz.prefpages.PrefPage1"> + <keywordReference id="xyz.Keyword"/> + </page> + <page + id="com.xyz.prefpage2" + name="Keyboard Settings" + class="com.xyz.prefpages.PrefPage2" + category="com.xyz.prefpage1"> + </page> + </extension> +</pre> +</p> + + + + + + + + + The value of the attribute class must represent a fully qualified name of the class that implements +<samp>org.eclipse.ui.IWorkbenchPreferencePage</samp>. + + + + + + + + + The workbench adds several pages for setting the preferences of the platform. Pages registered +through this extension will be added after them according to their category information but only if +running under Eclipse flatpak. + + + + + diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncher.java b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncher.java new file mode 100644 index 00000000000..8a016c6ff16 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncher.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.flatpak.launcher; + +import org.eclipse.cdt.core.CommandLauncher; + +public class FlatpakCommandLauncher extends CommandLauncher { + + // placeholder for now to distinguish from regular local command launcher + +} diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncherFactory.java b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncherFactory.java new file mode 100644 index 00000000000..697046afa54 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakCommandLauncherFactory.java @@ -0,0 +1,371 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.flatpak.launcher; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.cdt.core.ICommandLauncher; +import org.eclipse.cdt.core.ICommandLauncherFactory; +import org.eclipse.cdt.core.ICommandLauncherFactory2; +import org.eclipse.cdt.core.ICommandLauncherFactory3; +import org.eclipse.cdt.core.build.ICBuildConfiguration; +import org.eclipse.cdt.core.settings.model.CIncludePathEntry; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICIncludePathEntry; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.internal.flatpak.launcher.ui.preferences.FlatpakPreferenceNode; +import org.eclipse.cdt.utils.spawner.ProcessFactory; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.preference.PreferenceNode; +import org.eclipse.ui.PlatformUI; + +public class FlatpakCommandLauncherFactory + implements ICommandLauncherFactory, ICommandLauncherFactory2, ICommandLauncherFactory3 { + + private static Set copiedDirs = null; + private static Set removedDirs = new HashSet<>(); + private static Object lockObject = new Object(); + private final static String HEADERS = "HEADERS"; //$NON-NLS-1$ + private final static String COPIED = ".copied"; //$NON-NLS-1$ + private final static String REMOVED = ".removed"; //$NON-NLS-1$ + + public static final String FLATPAK_PREFERENCE_PAGES = "flatpakPreferencePages"; //$NON-NLS-1$ + + public FlatpakCommandLauncherFactory() { + initialize(); + } + + private void initialize() { + synchronized (lockObject) { + if (copiedDirs == null) { + copiedDirs = new HashSet<>(); + IPath pluginPath = Platform.getStateLocation(Platform.getBundle(FlatpakLaunchPlugin.PLUGIN_ID)) + .append(HEADERS); + IPath copiedPath = pluginPath.append(COPIED); + File copiedFile = copiedPath.toFile(); + if (copiedFile.exists()) { + try (FileReader reader = new FileReader(copiedFile); + BufferedReader bufferedReader = new BufferedReader(reader)) { + String dir = bufferedReader.readLine(); + while (dir != null) { + if (!dir.isEmpty()) { + copiedDirs.add(dir); + } + dir = bufferedReader.readLine(); + } + } catch (IOException e) { + FlatpakLaunchPlugin.log(e); + } + } + IPath removedPath = pluginPath.append(REMOVED); + File removedFile = removedPath.toFile(); + if (removedFile.exists()) { + try (FileReader reader = new FileReader(removedFile); + BufferedReader bufferedReader = new BufferedReader(reader)) { + String dir = bufferedReader.readLine(); + while (dir != null) { + if (!dir.isEmpty()) { + removedDirs.add(dir); + } + dir = bufferedReader.readLine(); + } + } catch (IOException e) { + FlatpakLaunchPlugin.log(e); + } + } + } + } + + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(FlatpakLaunchPlugin.PLUGIN_ID, + FLATPAK_PREFERENCE_PAGES); + IConfigurationElement[] elements = ep.getConfigurationElements(); + for (int i = 0; i < elements.length; i++) { + String id = elements[i].getAttribute("id"); //$NON-NLS-1$ + String category = elements[i].getAttribute("category"); //$NON-NLS-1$ + String className = elements[i].getAttribute("class"); //$NON-NLS-1$ + String name = elements[i].getAttribute("name"); //$NON-NLS-1$ + if (category != null && name != null && id != null && className != null) { + PreferenceNode node = new FlatpakPreferenceNode(id, name, null, className); + PlatformUI.getWorkbench().getPreferenceManager().addTo(category, node); + } + } + } + } + + public static void removeDir(String path) throws IOException { + synchronized (lockObject) { + List removedEntries = new ArrayList<>(); + for (String copiedDir : copiedDirs) { + if (copiedDir.startsWith(path)) { + removedEntries.add(copiedDir); + } + } + for (String removedEntry : removedEntries) { + copiedDirs.remove(removedEntry); + removedDirs.add(removedEntry); + } + updateFiles(); + } + } + + public static List getDirs() { + synchronized (lockObject) { + List newDirs = new ArrayList<>(copiedDirs); + return newDirs; + } + } + + private IProject project; + + @Override + public ICommandLauncher getCommandLauncher(IProject project) { + this.project = project; + + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + return new FlatpakCommandLauncher(); + } + return null; + } + + @Override + public ICommandLauncher getCommandLauncher(ICConfigurationDescription cfgd) { + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + return new FlatpakCommandLauncher(); + } + return null; + } + + @Override + public ICommandLauncher getCommandLauncher(ICBuildConfiguration cfgd) { + if (System.getenv("FLATPAK_SANDBOX_DIR") != null) { //$NON-NLS-1$ + return new FlatpakCommandLauncher(); + } + return null; + } + + @Override + public void registerLanguageSettingEntries(IProject project, List langEntries) { + synchronized (lockObject) { + @SuppressWarnings("unchecked") + List entries = (List) langEntries; + List paths = new ArrayList<>(); + for (ICLanguageSettingEntry entry : entries) { + if (entry instanceof ICIncludePathEntry) { + paths.add(entry.getValue()); + } + } + if (paths.size() > 0) { + // Create a directory to put the header files for + // the host. + IPath pluginPath = Platform.getStateLocation(Platform.getBundle(FlatpakLaunchPlugin.PLUGIN_ID)) + .append(HEADERS); + pluginPath.toFile().mkdir(); + for (String path : paths) { + if (path.startsWith(project.getWorkspace().getRoot().getLocation().toString())) { + continue; + } + try { + Process p1 = ProcessFactory.getFactory() + .exec("mkdir -p " + pluginPath.append(path).toOSString()); //$NON-NLS-1$ + int rc1 = waitFor(p1); + if (rc1 == 0) { + Process p2 = ProcessFactory.getFactory().exec("cp -ru " + path //$NON-NLS-1$ + + " " + pluginPath.append(path).removeLastSegments(1).toOSString()); //$NON-NLS-1$ + int rc2 = waitFor(p2); + if (rc2 == 0) { + copiedDirs.add(path); + String[] removedEntries = removedDirs.toArray(new String[0]); + for (String removedDir : removedEntries) { + if (removedDir.startsWith(path)) { + removedDirs.remove(removedDir); + copiedDirs.add(removedDir); + } + } + updateFiles(); + } + } + } catch (IOException e) { + FlatpakLaunchPlugin.log(e); + } + } + } + } + } + + protected static void updateFiles() throws IOException { + IPath pluginPath = Platform.getStateLocation(Platform.getBundle(FlatpakLaunchPlugin.PLUGIN_ID)).append(HEADERS); + pluginPath.toFile().mkdir(); + IPath copiedListPath = pluginPath.append(COPIED); + try (FileWriter writer = new FileWriter(copiedListPath.toFile()); + BufferedWriter bufferedWriter = new BufferedWriter(writer)) { + for (String copiedDir : copiedDirs) { + bufferedWriter.write(copiedDir); + bufferedWriter.newLine(); + } + } + IPath removedListPath = pluginPath.append(REMOVED); + try (FileWriter writer = new FileWriter(removedListPath.toFile()); + BufferedWriter bufferedWriter = new BufferedWriter(writer)) { + for (String removedDir : removedDirs) { + bufferedWriter.write(removedDir); + bufferedWriter.newLine(); + } + } + } + + private int waitFor(Process p) { + int rc = -1; + boolean finished = false; + try { + Thread.sleep(100); + while (!finished) { + rc = p.exitValue(); + finished = true; + } + } catch (IllegalThreadStateException e) { + // do nothing + } catch (InterruptedException e) { + finished = true; + } + return rc; + } + + @Override + public List verifyIncludePaths(ICBuildConfiguration cfgd, List includePaths) { + synchronized (lockObject) { + if (includePaths.size() > 0) { + IPath copiedPath = Platform.getStateLocation(Platform.getBundle(FlatpakLaunchPlugin.PLUGIN_ID)) + .append(HEADERS); + copiedPath.toFile().mkdir(); + List newEntries = new ArrayList<>(); + for (String path : includePaths) { + if (path.startsWith(project.getWorkspace().getRoot().getLocation().toString())) { + continue; + } + if (!copiedDirs.contains(path)) { + try { + Process p1 = ProcessFactory.getFactory() + .exec("mkdir -p " + copiedPath.append(path).toOSString()); //$NON-NLS-1$ + int rc1 = waitFor(p1); + if (rc1 == 0) { + Process p2 = ProcessFactory.getFactory().exec("cp -ru " + path //$NON-NLS-1$ + + " " + copiedPath.append(path).removeLastSegments(1).toOSString()); //$NON-NLS-1$ + int rc2 = waitFor(p2); + if (rc2 == 0) { + copiedDirs.add(path); + newEntries.add(copiedPath.append(path).toOSString()); + String[] removedEntries = removedDirs.toArray(new String[0]); + for (String removedDir : removedEntries) { + if (removedDir.startsWith(path)) { + removedDirs.remove(removedDir); + copiedDirs.add(removedDir); + } + } + updateFiles(); + } else { + newEntries.add(path); + } + } + } catch (IOException e) { + FlatpakLaunchPlugin.log(e); + } + } else { + newEntries.add(copiedPath.append(path).toOSString()); + } + } + return newEntries; + } + return includePaths; + } + } + + @Override + public List verifyLanguageSettingEntries(IProject project, + List entries) { + if (entries == null) { + return null; + } + synchronized (lockObject) { + List newEntries = new ArrayList<>(); + IPath pluginPath = Platform.getStateLocation(Platform.getBundle(FlatpakLaunchPlugin.PLUGIN_ID)); + IPath hostDir = pluginPath.append(HEADERS); + + for (ICLanguageSettingEntry entry : entries) { + if (entry instanceof ICIncludePathEntry) { + String path = entry.getName().toString(); + if (removedDirs.contains(path)) { + try { + Process p1 = ProcessFactory.getFactory() + .exec("mkdir -p " + hostDir.append(path).toOSString()); //$NON-NLS-1$ + int rc1 = waitFor(p1); + if (rc1 == 0) { + Process p2 = ProcessFactory.getFactory().exec("cp -ru " + path //$NON-NLS-1$ + + " " + hostDir.append(path).removeLastSegments(1).toOSString()); //$NON-NLS-1$ + int rc2 = waitFor(p2); + if (rc2 == 0) { + copiedDirs.add(path); + String[] removedEntries = removedDirs.toArray(new String[0]); + for (String removedDir : removedEntries) { + if (removedDir.startsWith(path)) { + removedDirs.remove(removedDir); + copiedDirs.add(removedDir); + } + } + updateFiles(); + } + } + } catch (IOException e) { + FlatpakLaunchPlugin.log(e); + } + + } + if (copiedDirs.contains(path)) { + // //$NON-NLS-2$ + IPath newPath = hostDir.append(entry.getName()); + CIncludePathEntry newEntry = new CIncludePathEntry(newPath.toString(), entry.getFlags()); + newEntries.add(newEntry); + continue; + } else { + newEntries.add(entry); + } + } else { + newEntries.add(entry); + } + } + return newEntries; + } + } + + @Override + public boolean checkIfIncludesChanged(ICBuildConfiguration cfg) { + synchronized (lockObject) { + return !removedDirs.isEmpty(); + } + } + +} diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakLaunchPlugin.java b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakLaunchPlugin.java new file mode 100644 index 00000000000..917d65a83e4 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/flatpak/launcher/FlatpakLaunchPlugin.java @@ -0,0 +1,148 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ +package org.eclipse.cdt.flatpak.launcher; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + * + * @noextend This class is not intended to be subclassed by Clients + */ +public class FlatpakLaunchPlugin extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.eclipse.cdt.flatpak.launcher"; //$NON-NLS-1$ + + // The shared instance + private static FlatpakLaunchPlugin plugin; + + /** + * The constructor + */ + public FlatpakLaunchPlugin() { + } + + @Override + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + @Override + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static FlatpakLaunchPlugin getDefault() { + return plugin; + } + + public static Shell getActiveWorkbenchShell() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window != null) { + return window.getShell(); + } + return null; + } + + public static Shell getShell() { + if (getActiveWorkbenchShell() != null) { + return getActiveWorkbenchShell(); + } + IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); + return windows[0].getShell(); + } + + /** + * Convenience method which returns the unique identifier of this plugin. + * + * @return The identifier. + */ + public static String getUniqueIdentifier() { + if (getDefault() == null) { + // If the default instance is not yet initialized, + // return a static identifier. This identifier must + // match the plugin id defined in plugin.xml + return PLUGIN_ID; + } + return getDefault().getBundle().getSymbolicName(); + } + + /** + * Logs the specified status with this plug-in's log. + * + * @param status + * status to log + * @since 1.1 + */ + public static void log(IStatus status) { + getDefault().getLog().log(status); + } + + /** + * Logs an internal error with the specified message. + * + * @param message + * the error message to log + * @since 1.1 + */ + public static void logErrorMessage(String message) { + log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, message, null)); + } + + /** + * Logs an internal error with the specified throwable + * + * @param e + * the exception to be logged + */ + public static void log(Throwable e) { + log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, e.getMessage(), e)); + } + + public static void log(int status, String msg, Throwable e) { + plugin.getLog().log(new Status(status, PLUGIN_ID, IStatus.OK, msg, e)); + } + + public static void log(int status, String msg) { + log(status, msg, null); + } + + /** + * Returns an image descriptor for the image file at the given plug-in + * relative path + * + * @param path + * the path + * @return the image descriptor + */ + public static ImageDescriptor getImageDescriptor(String path) { + return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID, path).get(); + } +} diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakHeaderPreferencePage.java b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakHeaderPreferencePage.java new file mode 100644 index 00000000000..68feae13f7f --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakHeaderPreferencePage.java @@ -0,0 +1,311 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - Initial Contribution + *******************************************************************************/ +package org.eclipse.cdt.internal.flatpak.launcher.ui.preferences; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.eclipse.cdt.flatpak.launcher.FlatpakCommandLauncherFactory; +import org.eclipse.cdt.flatpak.launcher.FlatpakLaunchPlugin; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.TableLayout; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +public class FlatpakHeaderPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, Listener { + + // SWT Widgets and content providers + private Table hdrTable; + private TableViewer hdrTableViewer; + private HeaderContentProvider provider; + private Button removeButton; + private List directories; + + private final class HeaderContentProvider implements IStructuredContentProvider, ITableLabelProvider { + + /** + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(Object) + */ + @Override + public Object[] getElements(Object inputElement) { + return directories.toArray(); + } + + /** + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + @Override + public void dispose() { + } + + /** + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(Viewer, + * Object, Object) + */ + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + /** + * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(Object, + * int) + */ + @Override + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + /** + * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(Object, + * int) + */ + @Override + public String getColumnText(Object element, int columnIndex) { + return element.toString(); + } + + /** + * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(ILabelProviderListener) + */ + @Override + public void addListener(ILabelProviderListener listener) { + } + + /** + * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(Object, + * String) + */ + @Override + public boolean isLabelProperty(Object element, String property) { + return false; + } + + /** + * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(ILabelProviderListener) + */ + @Override + public void removeListener(ILabelProviderListener listener) { + } + + } + + public FlatpakHeaderPreferencePage() { + noDefaultAndApplyButton(); + provider = new HeaderContentProvider(); + } + + @Override + public void init(IWorkbench workbench) { + directories = FlatpakCommandLauncherFactory.getDirs(); + } + + @Override + protected Control createContents(Composite parent) { + Composite page = createComposite(parent, 1, 2, false, null, -1, -1, GridData.FILL); + GridData gd = (GridData) page.getLayoutData(); + gd.grabExcessHorizontalSpace = true; + gd.grabExcessVerticalSpace = true; + + // SystemWidgetHelpers.createLabel(page, + // SystemResources.RESID_PREF_SIGNON_DESCRIPTION, 2); + + // Header table + hdrTable = new Table(page, SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); + hdrTable.setLinesVisible(true); + hdrTable.setHeaderVisible(true); + hdrTable.addListener(SWT.Selection, this); + + TableLayout tableLayout = new TableLayout(); + tableLayout.addColumnData(new ColumnWeightData(100, true)); + hdrTable.setLayout(tableLayout); + + gd = new GridData(GridData.FILL_BOTH); + gd.grabExcessHorizontalSpace = true; + gd.grabExcessVerticalSpace = true; + + hdrTable.setLayoutData(gd); + + // Connection column + TableColumn directoriesColumn = new TableColumn(hdrTable, SWT.NONE); + directoriesColumn.setText(Messages.FlatpakDirectories_label); + + hdrTableViewer = new TableViewer(hdrTable); + hdrTableViewer.setContentProvider(provider); + hdrTableViewer.setLabelProvider(provider); + hdrTableViewer.setInput(directories); + + // Create the Button bar for add, change and remove + Composite buttonBar = createComposite(page, 1, 1, false, null, -1, -1, GridData.FILL); + gd = (GridData) buttonBar.getLayoutData(); + gd.grabExcessHorizontalSpace = false; + gd.grabExcessVerticalSpace = true; + + removeButton = createPushButton(buttonBar, this, Messages.FlatpakRemoveHeaders_label, + Messages.FlatpakRemoveHeaders_tooltip); + + removeButton.setEnabled(false); + return parent; + } + + private static Composite createComposite(Composite parent, int parentSpan, int numColumns, boolean border, + String label, int marginSize, int spacingSize, int verticalAlignment) { + // border = true; + boolean borderNeeded = border; + if (label != null) + borderNeeded = true; // force the case + int style = SWT.NULL; + if (borderNeeded) + style |= SWT.SHADOW_ETCHED_IN; + Composite composite = null; + if (borderNeeded) { + composite = new Group(parent, style); + if (label != null) + ((Group) composite).setText(label); + } else { + composite = new Composite(parent, style); + } + // GridLayout + GridLayout layout = new GridLayout(); + layout.numColumns = numColumns; + if (marginSize != -1) { + layout.marginWidth = 0; + layout.marginHeight = 0; + } + if (spacingSize != -1) { + layout.horizontalSpacing = 0; + layout.verticalSpacing = 0; + } + composite.setLayout(layout); + // GridData + GridData data = new GridData(); + data.horizontalSpan = parentSpan; + data.horizontalAlignment = GridData.FILL; + data.grabExcessHorizontalSpace = true; + + data.verticalAlignment = verticalAlignment; + data.grabExcessVerticalSpace = false; + + composite.setLayoutData(data); + return composite; + } + + public static Button createPushButton(Composite group, Listener listener, String label, String tooltip) { + Button button = new Button(group, SWT.PUSH); + button.setText(label); + if (listener != null) + button.addListener(SWT.Selection, listener); + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + data.grabExcessHorizontalSpace = true; + button.setLayoutData(data); + if (tooltip != null) + button.setToolTipText(tooltip); + return button; + } + + private class DialogStatus { + private boolean status; + + public DialogStatus(boolean status) { + this.status = status; + } + + public void setStatus(boolean status) { + this.status = status; + } + + public boolean getStatus() { + return status; + } + } + + /** + * @see org.eclipse.swt.widgets.Listener#handleEvent(Event) + */ + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + if (event.widget == removeButton) { + final DialogStatus confirmed = new DialogStatus(false); + Display.getDefault().syncExec(() -> { + boolean status = MessageDialog.openConfirm(getShell(), Messages.FlatpakConfirmRemoval_title, + Messages.FlatpakConfirmRemoval_msg); + confirmed.setStatus(status); + }); + if (!confirmed.getStatus()) { + return; + } + int[] indicies = hdrTable.getSelectionIndices(); + IPath pluginPath = Platform.getStateLocation(Platform.getBundle(FlatpakLaunchPlugin.PLUGIN_ID)) + .append("HEADERS"); //$NON-NLS-1$ + for (int idx = indicies.length - 1; idx >= 0; idx--) { + String dirPath = directories.get(indicies[idx]); + File f = pluginPath.append(dirPath).toFile(); + if (f.exists() && f.isDirectory()) { + recursiveDelete(f); + } + directories.remove(dirPath); + try { + FlatpakCommandLauncherFactory.removeDir(dirPath); + } catch (IOException e) { + FlatpakLaunchPlugin.log(e); + } + } + hdrTable.remove(indicies); + hdrTable.redraw(); + hdrTableViewer.refresh(); + } + + // Update table buttons based on changes + if (hdrTable.getSelectionCount() > 0) { + removeButton.setEnabled(true); + } else { + removeButton.setEnabled(false); + } + } + } + + private void recursiveDelete(File dir) { + File[] contents = dir.listFiles(); + if (contents != null) { + for (File f : contents) { + recursiveDelete(f); + } + } + dir.delete(); + } +} \ No newline at end of file diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakPreferenceNode.java b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakPreferenceNode.java new file mode 100644 index 00000000000..e883e2f9e65 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/FlatpakPreferenceNode.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.flatpak.launcher.ui.preferences; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.cdt.flatpak.launcher.FlatpakLaunchPlugin; +import org.eclipse.jface.preference.PreferenceNode; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.PlatformUI; + +public class FlatpakPreferenceNode extends PreferenceNode { + + private String label; + private String className; + + public FlatpakPreferenceNode(String id, String label, ImageDescriptor image, String className) { + super(id, label, image, className); + this.label = label; + this.className = className; + } + + @Override + public void createPage() { + IWorkbenchPreferencePage page = (IWorkbenchPreferencePage) getPage(); + if (page == null) { + try { + Class cl = Class.forName(className); + page = (IWorkbenchPreferencePage) cl.getDeclaredConstructor().newInstance(); + if (page != null) { + page.setTitle(label); + page.init(PlatformUI.getWorkbench()); + setPage(page); + } + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodError + | IllegalArgumentException | InvocationTargetException | NoSuchMethodException + | SecurityException e) { + FlatpakLaunchPlugin.log(e); + } + } + } + +} diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/Messages.java b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/Messages.java new file mode 100644 index 00000000000..31575c25cca --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/Messages.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat, Inc. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.flatpak.launcher.ui.preferences; + +import org.eclipse.osgi.util.NLS; + +public class Messages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.flatpak.launcher.ui.preferences.messages"; //$NON-NLS-1$ + + public static String FlatpakDebugProcess_label; + public static String FlatpakRemoveHeaders_label; + public static String FlatpakRemoveHeaders_tooltip; + public static String FlatpakConfirmRemoval_title; + public static String FlatpakConfirmRemoval_msg; + public static String FlatpakDirectories_label; + + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, Messages.class); + } + + private Messages() { + } +} diff --git a/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/messages.properties b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/messages.properties new file mode 100644 index 00000000000..8778bd3fcd7 --- /dev/null +++ b/launch/org.eclipse.cdt.flatpak.launcher/src/org/eclipse/cdt/internal/flatpak/launcher/ui/preferences/messages.properties @@ -0,0 +1,21 @@ +#******************************************************************************* +# Copyright (c) 2020 Red Hat. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat - Initial Contribution +#*****************************************************************************/ + +FlatpakDebugProcess_label=Debug +FlatpakRemoveHeaders_label=Remove +FlatpakRemoveHeaders_tooltip=Remove headers cached from local host +FlatpakConfirmRemoval_title=Confirm Header File Removal +FlatpakConfirmRemoval_msg=Confirm removal of cached header files +FlatpakDirectories_label=Cached Directories + diff --git a/pom.xml b/pom.xml index 12459c7253c..05e40fcb5b3 100644 --- a/pom.xml +++ b/pom.xml @@ -194,6 +194,8 @@ launch/org.eclipse.cdt.launch launch/org.eclipse.cdt.docker.launcher launch/org.eclipse.cdt.docker.launcher-feature + launch/org.eclipse.cdt.flatpak.launcher + launch/org.eclipse.cdt.flatpak.launcher-feature llvm/org.eclipse.cdt.managedbuilder.llvm.ui llvm/org.eclipse.cdt.managedbuilder.llvm-feature diff --git a/releng/org.eclipse.cdt.platform-feature/feature.xml b/releng/org.eclipse.cdt.platform-feature/feature.xml index 37bbd9ca2c1..4b6d7be628b 100644 --- a/releng/org.eclipse.cdt.platform-feature/feature.xml +++ b/releng/org.eclipse.cdt.platform-feature/feature.xml @@ -150,6 +150,13 @@ version="0.0.0" unpack="false"/> + +