blob: 176017b5512a0afe85b48e1ac8f866def41c72bb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Jonah Graham and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License_Identifier: EPL-2.0
*
* Contributors:
* Jonah Graham - initial API and implementation
*******************************************************************************/
package org.eclipse.ease.modules.platform.debug;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.ILaunchGroup;
import org.eclipse.ease.ICompletionContext;
import org.eclipse.ease.ICompletionContext.Type;
import org.eclipse.ease.Logger;
import org.eclipse.ease.modules.platform.PluginConstants;
import org.eclipse.ease.ui.completion.AbstractCompletionProvider;
import org.eclipse.ease.ui.completion.ScriptCompletionProposal;
public class LaunchModuleCompletionProvider extends AbstractCompletionProvider {
@Override
public boolean isActive(final ICompletionContext context) {
if (context.getType() == Type.STRING_LITERAL) {
final String caller = context.getCaller();
final int param = context.getParameterOffset();
if (caller.endsWith("launch") || caller.endsWith("launchUI")) {
return (param == 0) || (param == 1);
}
if (caller.endsWith("getLaunchConfiguration")) {
return param == 0;
}
}
return false;
}
@Override
protected void prepareProposals(ICompletionContext context) {
if (context.getParameterOffset() == 0) {
try {
final ILaunchConfiguration[] configurations = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
for (final ILaunchConfiguration configuration : configurations) {
final String name = configuration.getName();
final ILaunchConfigurationType type = configuration.getType();
final String typeName = type.getName();
final String display = name + " - " + typeName;
addProposal(display, name, new DescriptorImageResolver(DebugUITools.getDefaultImageDescriptor(configuration)), 0, null);
}
} catch (final CoreException e) {
Logger.warning(PluginConstants.PLUGIN_ID, "Code Completion: could not read launch configurations", e);
}
} else {
// TODO: Make this parameter dependent on the selected launch config
// to only populate the relevant modes
final Collection<ScriptCompletionProposal> proposals = new ArrayList<>();
final ILaunchGroup[] launchGroups = DebugUITools.getLaunchGroups();
final Map<String, ILaunchGroup> modes = new HashMap<>();
for (final ILaunchGroup launchGroup : launchGroups) {
modes.put(launchGroup.getMode(), launchGroup);
}
for (final ILaunchGroup launchGroup : modes.values()) {
final String display = launchGroup.getLabel().replace("&", "");
final String name = launchGroup.getMode();
addProposal(display, name, new DescriptorImageResolver(launchGroup.getImageDescriptor()), 0, null);
}
}
}
}