From d4fb0d177f3e0e6ea4ae027cd61305381ceb07b9 Mon Sep 17 00:00:00 2001 From: Alexander Fedorov Date: Sun, 13 Jul 2025 12:23:54 +0300 Subject: [PATCH] Continue #2027: use List instead of array for `ILaunchDelegateManager` * see https://github.com/eclipse-platform/eclipse.platform/pull/2027#discussion_r2200920811 * see https://github.com/eclipse-platform/eclipse.platform/pull/2027#discussion_r2200926031 --- .../local/launcher/LocalLauncherHandler.java | 7 +++++-- .../ui/internal/LauncherDelegateManager.java | 16 ++++++++-------- .../view/ui/internal/PropertyTester.java | 5 +++-- .../dialogs/LaunchTerminalSettingsDialog.java | 7 ++++--- .../handler/LaunchTerminalCommandHandler.java | 12 +++++++----- .../view/ui/launcher/ILaunchDelegateManager.java | 11 +++++++---- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/terminal/bundles/org.eclipse.terminal.connector.local/src/org/eclipse/terminal/connector/local/launcher/LocalLauncherHandler.java b/terminal/bundles/org.eclipse.terminal.connector.local/src/org/eclipse/terminal/connector/local/launcher/LocalLauncherHandler.java index bed747280f3..7074bb54eec 100644 --- a/terminal/bundles/org.eclipse.terminal.connector.local/src/org/eclipse/terminal/connector/local/launcher/LocalLauncherHandler.java +++ b/terminal/bundles/org.eclipse.terminal.connector.local/src/org/eclipse/terminal/connector/local/launcher/LocalLauncherHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2014, 2025 Wind River Systems, Inc. and others. All rights reserved. * 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/ @@ -8,10 +8,12 @@ * * Contributors: * Wind River Systems - initial API and implementation + * Alexander Fedorov (ArSysOp) - further evolution *******************************************************************************/ package org.eclipse.terminal.connector.local.launcher; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.eclipse.core.commands.AbstractHandler; @@ -56,7 +58,8 @@ public Object execute(ExecutionEvent event) throws ExecutionException { } // Get all applicable launcher delegates for the current selection - ILauncherDelegate[] delegates = UIPlugin.getLaunchDelegateManager().getApplicableLauncherDelegates(selection); + List delegates = UIPlugin.getLaunchDelegateManager() + .getApplicableLauncherDelegates(selection); // Find the local terminal launcher delegate ILauncherDelegate delegate = null; for (ILauncherDelegate candidate : delegates) { diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/LauncherDelegateManager.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/LauncherDelegateManager.java index a79ff91610b..22a111dfdb1 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/LauncherDelegateManager.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/LauncherDelegateManager.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 - 2018 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2011 - 2025 Wind River Systems, Inc. and others. All rights reserved. * 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/ @@ -8,6 +8,7 @@ * * Contributors: * Wind River Systems - initial API and implementation + * Alexander Fedorov (ArSysOp) - further evolution *******************************************************************************/ package org.eclipse.terminal.view.ui.internal; @@ -227,10 +228,10 @@ public int compare(IExtension o1, IExtension o2) { * @param unique If true, the method returns new instances for each * contributed terminal launcher delegate. * - * @return The list of contributed terminal launcher delegates, or an empty array. + * @return The list of contributed terminal launcher delegates, or an empty list. */ @Override - public ILauncherDelegate[] getLauncherDelegates(boolean unique) { + public List getLauncherDelegates(boolean unique) { List contributions = new ArrayList<>(); for (Proxy launcherDelegate : getExtensions().values()) { ILauncherDelegate instance = unique ? launcherDelegate.newInstance() : launcherDelegate.getInstance(); @@ -238,8 +239,7 @@ public ILauncherDelegate[] getLauncherDelegates(boolean unique) { contributions.add(instance); } } - - return contributions.toArray(new ILauncherDelegate[contributions.size()]); + return contributions; } /** @@ -268,10 +268,10 @@ public ILauncherDelegate getLauncherDelegate(String id, boolean unique) { * Returns the applicable terminal launcher delegates for the given selection. * * @param selection The selection or null. - * @return The list of applicable terminal launcher delegates or an empty array. + * @return The list of applicable terminal launcher delegates or an empty list. */ @Override - public ILauncherDelegate[] getApplicableLauncherDelegates(ISelection selection) { + public List getApplicableLauncherDelegates(ISelection selection) { List applicable = new ArrayList<>(); for (ILauncherDelegate delegate : getLauncherDelegates(false)) { @@ -312,7 +312,7 @@ public ILauncherDelegate[] getApplicableLauncherDelegates(ISelection selection) } } - return applicable.toArray(new ILauncherDelegate[applicable.size()]); + return applicable; } /** diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/PropertyTester.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/PropertyTester.java index 80b7007dbe5..69241fca907 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/PropertyTester.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/PropertyTester.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2018 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2011, 2025 Wind River Systems, Inc. and others. All rights reserved. * 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/ @@ -8,6 +8,7 @@ * * Contributors: * Wind River Systems - initial API and implementation + * Alexander Fedorov (ArSysOp) - further evolution *******************************************************************************/ package org.eclipse.terminal.view.ui.internal; @@ -30,7 +31,7 @@ public boolean test(Object receiver, String property, Object[] args, Object expe if ("hasApplicableLauncherDelegates".equals(property)) { //$NON-NLS-1$ ISelection selection = receiver instanceof ISelection i ? i : new StructuredSelection(receiver); return expectedValue.equals(Boolean - .valueOf(UIPlugin.getLaunchDelegateManager().getApplicableLauncherDelegates(selection).length > 0)); + .valueOf(!UIPlugin.getLaunchDelegateManager().getApplicableLauncherDelegates(selection).isEmpty())); } if ("canDisconnect".equals(property) && receiver instanceof ITerminalsView) { //$NON-NLS-1$ diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java index 94f8a9d2748..8a8fafa17fb 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2018 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2011, 2025 Wind River Systems, Inc. and others. All rights reserved. * 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/ @@ -10,6 +10,7 @@ * Wind River Systems - initial API and implementation * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support * Dirk Fauth - Bug 460496 + * Alexander Fedorov (ArSysOp) - further evolution *******************************************************************************/ package org.eclipse.terminal.view.ui.internal.dialogs; @@ -420,7 +421,7 @@ protected List getTerminals() { ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this); } - ILauncherDelegate[] delegates = UIPlugin.getLaunchDelegateManager().getLauncherDelegates(false); + List delegates = UIPlugin.getLaunchDelegateManager().getLauncherDelegates(false); if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) { UIPlugin.getTraceHandler().trace( @@ -450,7 +451,7 @@ protected List getTerminals() { ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this); } - ILauncherDelegate[] delegates = UIPlugin.getLaunchDelegateManager() + List delegates = UIPlugin.getLaunchDelegateManager() .getApplicableLauncherDelegates(selection); if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) { diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java index 924968ba490..c856e2b5fd7 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2018 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2011, 2025 Wind River Systems, Inc. and others. All rights reserved. * 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/ @@ -8,12 +8,14 @@ * * Contributors: * Wind River Systems - initial API and implementation + * Alexander Fedorov (ArSysOp) - further evolution *******************************************************************************/ package org.eclipse.terminal.view.ui.internal.handler; import java.text.DateFormat; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.eclipse.core.commands.AbstractHandler; @@ -104,7 +106,7 @@ public Object execute(ExecutionEvent event) throws ExecutionException { } // Check if the dialog needs to be shown at all - ILauncherDelegate[] delegates = UIPlugin.getLaunchDelegateManager() + List delegates = UIPlugin.getLaunchDelegateManager() .getApplicableLauncherDelegates(selection); if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) { @@ -113,7 +115,7 @@ public Object execute(ExecutionEvent event) throws ExecutionException { ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this); } - if (delegates.length > 1 || (delegates.length == 1 && delegates[0].needsUserConfiguration())) { + if (delegates.size() > 1 || (delegates.size() == 1 && delegates.get(0).needsUserConfiguration())) { if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) { UIPlugin.getTraceHandler().trace("(b) Attempt to open launch terminal settings dialog after " //$NON-NLS-1$ + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ @@ -137,8 +139,8 @@ public Object execute(ExecutionEvent event) throws ExecutionException { delegate.execute(properties, null); } } - } else if (delegates.length == 1) { - ILauncherDelegate delegate = delegates[0]; + } else if (delegates.size() == 1) { + ILauncherDelegate delegate = delegates.get(0); Map properties = new HashMap<>(); // Store the id of the selected delegate diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/launcher/ILaunchDelegateManager.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/launcher/ILaunchDelegateManager.java index f9758c11c10..46978469b6c 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/launcher/ILaunchDelegateManager.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/launcher/ILaunchDelegateManager.java @@ -9,9 +9,12 @@ * Contributors: * Wind River Systems - initial API and implementation * Christoph Läubrich - extract to interface + * Alexander Fedorov (ArSysOp) - further evolution *******************************************************************************/ package org.eclipse.terminal.view.ui.launcher; +import java.util.List; + import org.eclipse.jface.viewers.ISelection; public interface ILaunchDelegateManager { @@ -22,9 +25,9 @@ public interface ILaunchDelegateManager { * @param unique If true, the method returns new instances for each * contributed terminal launcher delegate. * - * @return The list of contributed terminal launcher delegates, or an empty array. + * @return The list of contributed terminal launcher delegates, or an empty list. */ - ILauncherDelegate[] getLauncherDelegates(boolean unique); + List getLauncherDelegates(boolean unique); /** * Returns the terminal launcher delegate identified by its unique id. If no terminal @@ -41,8 +44,8 @@ public interface ILaunchDelegateManager { * Returns the applicable terminal launcher delegates for the given selection. * * @param selection The selection or null. - * @return The list of applicable terminal launcher delegates or an empty array. + * @return The list of applicable terminal launcher delegates or an empty list. */ - ILauncherDelegate[] getApplicableLauncherDelegates(ISelection selection); + List getApplicableLauncherDelegates(ISelection selection); } \ No newline at end of file