1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 06:02:11 +02:00

LaunchBar - new extension for simple providers

* If provider only wants to associate lc type with target the
only thing is needed is to specy this lc type somewhere and framework
should take care of the rest

Change-Id: I3f60c7a0a5b1334f989e972fe8f773c6e2d7f71a
Signed-off-by: Alena Laskavaia <elaskavaia.cdt@gmail.com>
Reviewed-on: https://git.eclipse.org/r/30381
Reviewed-by: Doug Schaefer <dschaefer@qnx.com>
Tested-by: Doug Schaefer <dschaefer@qnx.com>
This commit is contained in:
Alena Laskavaia 2014-07-23 15:50:29 -04:00 committed by Doug Schaefer
parent cd81c09a4f
commit dcf1440fe4
4 changed files with 218 additions and 13 deletions

View file

@ -143,6 +143,54 @@
</complexType>
</element>
<element name="defaultConfigProvider">
<annotation>
<documentation>
default provider provides direct mapping between launch configuration types
and launch objects/types without any extra classes involved. The object for this provider is launch configuration, and descriptor is DefaultLaunchDescriptor
</documentation>
</annotation>
<complexType>
<attribute name="launchConfigurationType" type="string" use="required">
<annotation>
<documentation>
</documentation>
<appinfo>
<meta.attribute kind="identifier" basedOn="org.eclipse.debug.core.launchConfigurationTypes/launchConfigurationType/@id"/>
</appinfo>
</annotation>
</attribute>
<attribute name="descriptorType" type="string">
<annotation>
<documentation>
</documentation>
<appinfo>
<meta.attribute kind="identifier" basedOn="org.eclipse.cdt.launchbar.core.launchBarContributions/descriptorType/@id"/>
</appinfo>
</annotation>
</attribute>
<attribute name="targetType" type="string" use="required">
<annotation>
<documentation>
</documentation>
<appinfo>
<meta.attribute kind="identifier" basedOn="org.eclipse.cdt.launchbar.core.launchBarContributions/targetType/@id"/>
</appinfo>
</annotation>
</attribute>
<attribute name="isDefault" type="boolean">
<annotation>
<documentation>
Is this the default target type for this descriptor type.
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<element name="objectProvider">
<complexType>
<attribute name="id" type="string" use="required">

View file

@ -104,20 +104,21 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
} else if (elementName.equals("configProvider")) {
String descriptorType = element.getAttribute("descriptorType");
String targetType = element.getAttribute("targetType");
String isDefault = element.getAttribute("isDefault");
// TODO don't instantiate this until we need it
ILaunchConfigurationProvider configProvider = (ILaunchConfigurationProvider) element.createExecutableExtension("class");
Map<String, ILaunchConfigurationProvider> targetTypes = configProviders.get(descriptorType);
if (targetTypes == null) {
targetTypes = new HashMap<>();
configProviders.put(descriptorType, targetTypes);
}
targetTypes.put(targetType, configProvider);
addConfigProvider(descriptorType, targetType, Boolean.valueOf(isDefault), configProvider);
} else if (elementName.equals("defaultConfigProvider")) {
String descriptorType = element.getAttribute("descriptorType");
String targetType = element.getAttribute("targetType");
String launchType = element.getAttribute("launchConfigurationType");
String isDefault = element.getAttribute("isDefault");
if (isDefault != null && Boolean.valueOf(isDefault)) {
defaultTargetTypes.put(descriptorType, targetType);
}
ILaunchConfigurationProvider configProvider = new TypeBasedLaunchConfigurationProvider(launchType);
addConfigProvider(descriptorType, targetType, Boolean.valueOf(isDefault), configProvider);
ILaunchDescriptorType type = new TypeBasedLaunchDescriptorType(descriptorType, launchType);
descriptorTypes.add(type);
typePriorities.put(type, 2); // TODO: fix priority
}
}
}
@ -179,6 +180,19 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
}
}
protected void addConfigProvider(String descriptorType, String targetType, boolean isDefaultB,
ILaunchConfigurationProvider configProvider) {
Map<String, ILaunchConfigurationProvider> targetTypes = configProviders.get(descriptorType);
if (targetTypes == null) {
targetTypes = new HashMap<>();
configProviders.put(descriptorType, targetTypes);
}
targetTypes.put(targetType, configProvider);
if (isDefaultB) {
defaultTargetTypes.put(descriptorType, targetType);
}
}
@Override
public ILaunchDescriptor launchObjectAdded(Object element) {
ILaunchDescriptor desc = objectDescriptorMap.get(element);
@ -193,8 +207,9 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
String id = getId(desc);
ILaunchDescriptor old = descriptors.get(id);
if (old != null && !desc.equals(old))
throw new IllegalStateException(
"Name of descriptor must be unique within same type (or descriptors with same name must be equal)");
Activator.log(new IllegalStateException(
"Name of descriptor must be unique within same type "
+ "(or descriptors with same name must be equal)"));
descriptors.put(id, desc);
objectDescriptorMap.put(element, desc);
setActiveLaunchDescriptor(desc);

View file

@ -0,0 +1,77 @@
/*******************************************************************************
* Copyright (c) 2014 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems (Elena Laskavaia) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.launchbar.core.internal;
import org.eclipse.cdt.launchbar.core.DefaultLaunchDescriptor;
import org.eclipse.cdt.launchbar.core.ILaunchBarManager;
import org.eclipse.cdt.launchbar.core.ILaunchConfigurationProvider;
import org.eclipse.cdt.launchbar.core.ILaunchDescriptor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
public class TypeBasedLaunchConfigurationProvider implements ILaunchConfigurationProvider {
protected ILaunchBarManager manager;
private String typeId;
public TypeBasedLaunchConfigurationProvider(String launchConfigurationTypeId) {
this.typeId = launchConfigurationTypeId;
}
@Override
public void init(ILaunchBarManager manager) throws CoreException {
this.manager = manager;
}
public boolean ownsConfiguration(ILaunchConfiguration element) {
try {
return element.getType().getIdentifier().equals(typeId);
} catch (CoreException e) {
return false;
}
}
@Override
public boolean launchConfigurationAdded(ILaunchConfiguration configuration) throws CoreException {
if (ownsConfiguration(configuration)) {
manager.launchObjectAdded(configuration);
return true;
}
return false;
}
@Override
public boolean launchConfigurationRemoved(ILaunchConfiguration configuration) throws CoreException {
if (ownsConfiguration(configuration)) {
manager.launchObjectRemoved(configuration);
return true;
}
return false;
}
@Override
public ILaunchConfiguration getLaunchConfiguration(ILaunchDescriptor descriptor) throws CoreException {
if (descriptor instanceof DefaultLaunchDescriptor) {
return ((DefaultLaunchDescriptor) descriptor).getConfig();
}
return null;
}
@Override
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor) throws CoreException {
if (descriptor instanceof DefaultLaunchDescriptor) {
return ((DefaultLaunchDescriptor) descriptor).getConfig().getType();
}
return null;
}
}

View file

@ -0,0 +1,65 @@
/*******************************************************************************
* Copyright (c) 2014 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems (Elena Laskavaia) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.launchbar.core.internal;
import org.eclipse.cdt.launchbar.core.DefaultLaunchDescriptor;
import org.eclipse.cdt.launchbar.core.ILaunchBarManager;
import org.eclipse.cdt.launchbar.core.ILaunchDescriptor;
import org.eclipse.cdt.launchbar.core.ILaunchDescriptorType;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
public class TypeBasedLaunchDescriptorType implements ILaunchDescriptorType {
protected ILaunchBarManager manager;
private String typeId;
private String id;
public TypeBasedLaunchDescriptorType(String descId, String launchConfigurationTypeId) {
if (launchConfigurationTypeId == null)
throw new NullPointerException();
this.typeId = launchConfigurationTypeId;
this.id = descId != null ? descId : typeId + ".desc";
}
@Override
public String getId() {
return id;
}
public boolean ownsConfiguration(ILaunchConfiguration element) {
try {
return element.getType().getIdentifier().equals(typeId);
} catch (CoreException e) {
return false;
}
}
@Override
public void init(ILaunchBarManager manager) {
this.manager = manager;
}
@Override
public ILaunchDescriptor getDescriptor(Object element) {
return new DefaultLaunchDescriptor(this, (ILaunchConfiguration) element);
}
@Override
public ILaunchBarManager getManager() {
return manager;
}
@Override
public boolean ownsLaunchObject(Object element) {
return element instanceof ILaunchConfiguration
&& ownsConfiguration((ILaunchConfiguration) element);
}
}