mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-09 09:15:38 +02:00
added new Generic Extension creation machanism that uses the
.cptproject file to find which plugin contains the extension point
This commit is contained in:
parent
b128851cc3
commit
cb8243d3ef
22 changed files with 796 additions and 592 deletions
|
@ -2,6 +2,7 @@ package org.eclipse.cdt.core.builder;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.resources.IConsole;
|
import org.eclipse.cdt.core.resources.IConsole;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
||||||
|
@ -26,6 +27,8 @@ public class CIncrementalBuilder extends IncrementalProjectBuilder {
|
||||||
Map args;
|
Map args;
|
||||||
IProgressMonitor monitor;
|
IProgressMonitor monitor;
|
||||||
|
|
||||||
|
private ICBuilder fCurrentBuilder;
|
||||||
|
|
||||||
public int getkind() {
|
public int getkind() {
|
||||||
return kind;
|
return kind;
|
||||||
}
|
}
|
||||||
|
@ -38,11 +41,9 @@ public class CIncrementalBuilder extends IncrementalProjectBuilder {
|
||||||
return monitor;
|
return monitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME: Not implemented
|
|
||||||
public IConsole getConsole() {
|
public IConsole getConsole() {
|
||||||
ICBuilder builder = getCBuilder();
|
String id = fCurrentBuilder.getID();
|
||||||
String id = builder.getID();
|
return CCorePlugin.getDefault().getConsole(id);
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME: Not implemented
|
//FIXME: Not implemented
|
||||||
|
@ -63,14 +64,15 @@ public class CIncrementalBuilder extends IncrementalProjectBuilder {
|
||||||
this.monitor = monitor;
|
this.monitor = monitor;
|
||||||
|
|
||||||
// Get the ICBuilder
|
// Get the ICBuilder
|
||||||
ICBuilder cbuilder = getCBuilder();
|
ICBuilder cbuilder[] = getCBuilder();
|
||||||
|
|
||||||
// FIXME: Check preference for non-modal builds
|
// FIXME: Check preference for non-modal builds
|
||||||
return cbuilder.build(this);
|
fCurrentBuilder = cbuilder[0];
|
||||||
|
return fCurrentBuilder.build(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME: Not implemented
|
//FIXME: Not implemented
|
||||||
private ICBuilder getCBuilder () {
|
private ICBuilder[] getCBuilder () throws CoreException {
|
||||||
return null;
|
return CCorePlugin.getDefault().getBuilders(getProject());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,5 +8,8 @@ CProblemMarker.name=C Problem
|
||||||
CBuildCommand.name=C Builder Command
|
CBuildCommand.name=C Builder Command
|
||||||
CBuildConsole.name=C Builder Console
|
CBuildConsole.name=C Builder Console
|
||||||
CProjectInfo.name=C Project Info
|
CProjectInfo.name=C Project Info
|
||||||
projectinfo.name=Core Make Project
|
CBuilder.name=C Build Model
|
||||||
|
|
||||||
|
makeprojectowner.name=Make Project
|
||||||
genericmake.name=Generic Make
|
genericmake.name=Generic Make
|
||||||
|
makebuildmodel.name=Make Builder
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
<extension-point id="CBuildCommand" name="%CBuildCommand.name"/>
|
<extension-point id="CBuildCommand" name="%CBuildCommand.name"/>
|
||||||
<extension-point id="CBuildConsole" name="%CBuildConsole.name"/>
|
<extension-point id="CBuildConsole" name="%CBuildConsole.name"/>
|
||||||
<extension-point id="CProjectOwner" name="%CProjectOwner.name"/>
|
<extension-point id="CProjectOwner" name="%CProjectOwner.name"/>
|
||||||
|
<extension-point id="CBuildModel" name="%CBuilder.name"/>
|
||||||
|
|
||||||
<extension
|
<extension
|
||||||
id="cbuilder"
|
id="cbuilder"
|
||||||
|
@ -40,6 +41,17 @@
|
||||||
</run>
|
</run>
|
||||||
</builder>
|
</builder>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
|
<extension
|
||||||
|
id="newcbuilder"
|
||||||
|
name="C Builder"
|
||||||
|
point="org.eclipse.core.resources.builders">
|
||||||
|
<builder>
|
||||||
|
<run
|
||||||
|
class="org.eclipse.cdt.core.builder.CIncrementalBuilder">
|
||||||
|
</run>
|
||||||
|
</builder>
|
||||||
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
id="problem"
|
id="problem"
|
||||||
name="%CProblemMarker.name"
|
name="%CProblemMarker.name"
|
||||||
|
@ -78,13 +90,25 @@
|
||||||
</buildcommand>
|
</buildcommand>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.cdt.core.CProjectOwner"
|
id="make"
|
||||||
name="%projectowner.name"
|
name="%makeprojectowner.name"
|
||||||
id="make">
|
point="org.eclipse.cdt.core.CProjectOwner">
|
||||||
<platform id="*"
|
<platform
|
||||||
name="%genericmake.name" architecture="*"/>
|
architecture="*"
|
||||||
|
name="%genericmake.name"
|
||||||
|
id="*">
|
||||||
|
</platform>
|
||||||
<run
|
<run
|
||||||
class = "org.eclipse.cdt.internal.core.make.MakeProject">
|
class="org.eclipse.cdt.internal.core.make.MakeProject">
|
||||||
</run>
|
</run>
|
||||||
</extension>
|
</extension>
|
||||||
|
<extension
|
||||||
|
id="makeBuilder"
|
||||||
|
name="%makebuildmodel.name"
|
||||||
|
point="org.eclipse.cdt.core.CBuildModel">
|
||||||
|
<run
|
||||||
|
class="org.eclipse.cdt.internal.core.make.MakeBuilder">
|
||||||
|
</run>
|
||||||
|
</extension>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.core;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.InternalCExtension;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
|
||||||
|
public abstract class AbstractCExtension extends InternalCExtension implements ICExtension {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the project for which this extrension is defined.
|
||||||
|
*
|
||||||
|
* @return the project
|
||||||
|
*/
|
||||||
|
public final IProject getProject() {
|
||||||
|
return super.getProject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final ICExtensionReference getExtensionReference() {
|
||||||
|
return super.getExtensionReference();
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,10 +9,11 @@ import java.text.MessageFormat;
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.builder.ICBuilder;
|
||||||
import org.eclipse.cdt.core.index.IndexModel;
|
import org.eclipse.cdt.core.index.IndexModel;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.resources.IConsole;
|
import org.eclipse.cdt.core.resources.IConsole;
|
||||||
import org.eclipse.cdt.internal.core.CProjectDescriptor;
|
import org.eclipse.cdt.internal.core.CDescriptorManager;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IProjectDescription;
|
import org.eclipse.core.resources.IProjectDescription;
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
@ -34,13 +35,17 @@ import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
public class CCorePlugin extends Plugin {
|
public class CCorePlugin extends Plugin {
|
||||||
|
|
||||||
public static final int STATUS_CDTPROJECT_EXISTS = 1;
|
public static final int STATUS_CDTPROJECT_EXISTS = 1;
|
||||||
|
public static final int STATUS_CDTPROJECT_MISMATCH = 2;
|
||||||
|
|
||||||
public static final String PLUGIN_ID= "org.eclipse.cdt.core";
|
public static final String PLUGIN_ID= "org.eclipse.cdt.core";
|
||||||
public static final String BUILDER_ID= PLUGIN_ID + ".cbuilder";
|
|
||||||
|
public static final String BUILDER_MODEL_ID= PLUGIN_ID + ".CBuildModel";
|
||||||
|
|
||||||
private static CCorePlugin fgCPlugin;
|
private static CCorePlugin fgCPlugin;
|
||||||
private static ResourceBundle fgResourceBundle;
|
private static ResourceBundle fgResourceBundle;
|
||||||
|
|
||||||
|
private CDescriptorManager fDescriptorManager;
|
||||||
|
|
||||||
// -------- static methods --------
|
// -------- static methods --------
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
@ -101,6 +106,7 @@ public class CCorePlugin extends Plugin {
|
||||||
*/
|
*/
|
||||||
public void shutdown() throws CoreException {
|
public void shutdown() throws CoreException {
|
||||||
super.shutdown();
|
super.shutdown();
|
||||||
|
fDescriptorManager.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,20 +119,30 @@ public class CCorePlugin extends Plugin {
|
||||||
getCoreModel();
|
getCoreModel();
|
||||||
// Fired up the indexer. It should delay itself for 10 seconds
|
// Fired up the indexer. It should delay itself for 10 seconds
|
||||||
getIndexModel();
|
getIndexModel();
|
||||||
|
fDescriptorManager = new CDescriptorManager();
|
||||||
|
fDescriptorManager.startup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IConsole getConsole() throws CoreException {
|
public IConsole getConsole(String id) {
|
||||||
IConsole consoleDocument = null;
|
IConsole consoleDocument = null;
|
||||||
|
|
||||||
|
try {
|
||||||
IExtensionPoint extension = getDescriptor().getExtensionPoint("CBuildConsole");
|
IExtensionPoint extension = getDescriptor().getExtensionPoint("CBuildConsole");
|
||||||
if (extension != null) {
|
if (extension != null) {
|
||||||
IExtension[] extensions = extension.getExtensions();
|
IExtension[] extensions = extension.getExtensions();
|
||||||
for(int i = 0; i < extensions.length; i++){
|
for(int i = 0; i < extensions.length; i++){
|
||||||
IConfigurationElement [] configElements = extensions[i].getConfigurationElements();
|
IConfigurationElement [] configElements = extensions[i].getConfigurationElements();
|
||||||
consoleDocument = (IConsole)configElements[0].createExecutableExtension("class");
|
for( int j = 0; j < configElements.length; j++ ) {
|
||||||
|
String builderID = configElements[j].getAttribute("builderID");
|
||||||
|
if ( (id == null && builderID == null) ||
|
||||||
|
( id != null && builderID.equals(id))) {
|
||||||
|
return consoleDocument = (IConsole)configElements[j].createExecutableExtension("class");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( consoleDocument == null ) {
|
}
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
return new IConsole() {
|
return new IConsole() {
|
||||||
public void clear() {
|
public void clear() {
|
||||||
}
|
}
|
||||||
|
@ -137,7 +153,9 @@ public class CCorePlugin extends Plugin {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return consoleDocument;
|
|
||||||
|
public IConsole getConsole() throws CoreException {
|
||||||
|
return getConsole(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CoreModel getCoreModel() {
|
public CoreModel getCoreModel() {
|
||||||
|
@ -148,12 +166,12 @@ public class CCorePlugin extends Plugin {
|
||||||
return IndexModel.getDefault();
|
return IndexModel.getDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICProjectDescriptor getCProjectDescription(IProject project) throws CoreException {
|
public ICDescriptor getCProjectDescription(IProject project) throws CoreException {
|
||||||
return CProjectDescriptor.getDescription(project);
|
return fDescriptorManager.getDescriptor(project);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mapCProjectOwner(IProject project, String id) throws CoreException {
|
public void mapCProjectOwner(IProject project, String id) throws CoreException {
|
||||||
CProjectDescriptor.configure(project, id);
|
fDescriptorManager.configure(project, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -295,4 +313,11 @@ public class CCorePlugin extends Plugin {
|
||||||
convertProjectFromCtoCC(projectHandle, monitor);
|
convertProjectFromCtoCC(projectHandle, monitor);
|
||||||
addDefaultCBuilder(projectHandle, monitor);
|
addDefaultCBuilder(projectHandle, monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ICBuilder[] getBuilders(IProject project) throws CoreException {
|
||||||
|
ICExtension extensions[] = fDescriptorManager.createExtensions(BUILDER_MODEL_ID, project);
|
||||||
|
ICBuilder builders[] = new ICBuilder[extensions.length];
|
||||||
|
System.arraycopy(extensions, 0, builders, 0, extensions.length);
|
||||||
|
return builders;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.core;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
|
||||||
|
public interface ICDescriptor {
|
||||||
|
public ICOwnerInfo getProjectOwner();
|
||||||
|
public String getPlatform();
|
||||||
|
public IProject getProject();
|
||||||
|
public ICExtensionReference[] get(String name);
|
||||||
|
public ICExtensionReference create(String name, String id);
|
||||||
|
public void remove(ICExtensionReference extension);
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.core;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
|
||||||
|
public interface ICExtension {
|
||||||
|
public IProject getProject();
|
||||||
|
public ICExtensionReference getExtensionReference();
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.core;
|
||||||
|
|
||||||
|
public interface ICExtensionReference {
|
||||||
|
public String getExtension();
|
||||||
|
public String getID();
|
||||||
|
public void setExtensionData(String key, String value);
|
||||||
|
public String getExtensionData(String key);
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.core;
|
||||||
|
|
||||||
|
public interface ICOwner {
|
||||||
|
public void configure(ICDescriptor cproject);
|
||||||
|
public void update(ICDescriptor cproject);
|
||||||
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.core;
|
package org.eclipse.cdt.core;
|
||||||
|
|
||||||
public interface ICProjectOwnerInfo {
|
public interface ICOwnerInfo {
|
||||||
public String getID();
|
public String getID();
|
||||||
public String getName();
|
public String getName();
|
||||||
public String[] getPlatforms();
|
public String[] getPlatforms();
|
|
@ -1,19 +0,0 @@
|
||||||
/*
|
|
||||||
* (c) Copyright QNX Software System Ltd. 2002.
|
|
||||||
* All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package org.eclipse.cdt.core;
|
|
||||||
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
|
|
||||||
public interface ICProjectDescriptor {
|
|
||||||
public static final String DESCRIPTION_FILE_NAME = ".cdtproject";
|
|
||||||
|
|
||||||
public ICProjectOwnerInfo getProjectOwner();
|
|
||||||
public String getPlatform();
|
|
||||||
public IProject getProject();
|
|
||||||
// public IBuilderInfo getBuilderInfo();
|
|
||||||
// public setBuilder(String id) or should this be add... ?
|
|
||||||
public void saveInfo() throws CoreException;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
/*
|
|
||||||
* (c) Copyright QNX Software System Ltd. 2002.
|
|
||||||
* All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package org.eclipse.cdt.core;
|
|
||||||
|
|
||||||
public interface ICProjectOwner {
|
|
||||||
public void configure(ICProjectDescriptor cproject);
|
|
||||||
}
|
|
|
@ -0,0 +1,309 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
|
import org.apache.xerces.dom.DocumentImpl;
|
||||||
|
import org.apache.xml.serialize.Method;
|
||||||
|
import org.apache.xml.serialize.OutputFormat;
|
||||||
|
import org.apache.xml.serialize.Serializer;
|
||||||
|
import org.apache.xml.serialize.SerializerFactory;
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
|
import org.eclipse.cdt.core.ICOwnerInfo;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.NamedNodeMap;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
public class CDescriptor implements ICDescriptor {
|
||||||
|
/* constants */
|
||||||
|
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
||||||
|
private ICOwnerInfo fOwner;
|
||||||
|
private IProject fProject;
|
||||||
|
private String fPlatform = "*";
|
||||||
|
private HashMap extMap = new HashMap(4);
|
||||||
|
private HashMap extInfoMap = new HashMap(4);
|
||||||
|
|
||||||
|
private final String DESCRIPTION_FILE_NAME = ".cdtproject";
|
||||||
|
private final String PROJECT_DESCRIPTION = "cdtproject";
|
||||||
|
private final String PROJECT_PLATFORM = "platform";
|
||||||
|
private final String PROJECT_EXTENSION = "extension";
|
||||||
|
private final String PROJECT_EXTENSION_ATTRIBUTE = "attribute";
|
||||||
|
|
||||||
|
protected void readCDTProject(IPath projectLocation) {
|
||||||
|
FileInputStream file = null;
|
||||||
|
try {
|
||||||
|
file = new FileInputStream(projectLocation.toFile());
|
||||||
|
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||||
|
Document document = parser.parse(file);
|
||||||
|
Node node = document.getFirstChild();
|
||||||
|
if (node.getNodeName().equals(PROJECT_DESCRIPTION))
|
||||||
|
fOwner = readProjectDescription(node);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
}
|
||||||
|
catch (SAXException e) {
|
||||||
|
}
|
||||||
|
catch (ParserConfigurationException e) {
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (file != null) {
|
||||||
|
try {
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CDescriptor(IProject project, String id) throws CoreException {
|
||||||
|
fProject = project;
|
||||||
|
IPath projectLocation = project.getDescription().getLocation();
|
||||||
|
|
||||||
|
final boolean isDefaultLocation = projectLocation == null;
|
||||||
|
if (isDefaultLocation) {
|
||||||
|
projectLocation = getProjectDefaultLocation(project);
|
||||||
|
}
|
||||||
|
IPath descriptionPath = projectLocation.append(DESCRIPTION_FILE_NAME);
|
||||||
|
|
||||||
|
if (descriptionPath.toFile().exists()) {
|
||||||
|
IStatus status;
|
||||||
|
readCDTProject(descriptionPath);
|
||||||
|
if ( fOwner.getID().equals(id)) {
|
||||||
|
status = new Status(IStatus.WARNING, CCorePlugin.getDefault().PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_EXISTS, "CDTProject already exisits", (Throwable)null);
|
||||||
|
} else {
|
||||||
|
status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_MISMATCH, "CDTProject already exisits but does not match owner ID of creator", (Throwable)null);
|
||||||
|
}
|
||||||
|
throw new CoreException(status);
|
||||||
|
}
|
||||||
|
fOwner = new COwner(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CDescriptor(IProject project) throws CoreException {
|
||||||
|
fProject = project;
|
||||||
|
IPath projectLocation = project.getDescription().getLocation();
|
||||||
|
|
||||||
|
final boolean isDefaultLocation = projectLocation == null;
|
||||||
|
if (isDefaultLocation) {
|
||||||
|
projectLocation = getProjectDefaultLocation(project);
|
||||||
|
}
|
||||||
|
IPath descriptionPath = projectLocation.append(DESCRIPTION_FILE_NAME);
|
||||||
|
|
||||||
|
if (!descriptionPath.toFile().exists()) {
|
||||||
|
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "CDTProject file not found", (Throwable)null);
|
||||||
|
throw new CoreException(status);
|
||||||
|
}
|
||||||
|
readCDTProject(descriptionPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IPath getProjectDefaultLocation(IProject project) {
|
||||||
|
return Platform.getLocation().append(project.getFullPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICOwnerInfo getProjectOwner() {
|
||||||
|
return fOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlatform() {
|
||||||
|
return fPlatform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IProject getProject() {
|
||||||
|
return fProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICExtensionReference[] get(String name) {
|
||||||
|
return (CExtensionReference[]) extMap.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICExtensionReference create(String name, String id) {
|
||||||
|
CExtensionReference extensions[] = (CExtensionReference[]) extMap.get(name);
|
||||||
|
if ( extensions == null ) {
|
||||||
|
extensions = new CExtensionReference[1];
|
||||||
|
extMap.put(name, extensions);
|
||||||
|
} else {
|
||||||
|
CExtensionReference[] newExtensions = new CExtensionReference[extensions.length + 1];
|
||||||
|
System.arraycopy(extensions, 0, newExtensions, 0, extensions.length);
|
||||||
|
extensions = newExtensions;
|
||||||
|
extMap.put(name, extensions);
|
||||||
|
}
|
||||||
|
extensions[extensions.length-1] = new CExtensionReference(this, name, id);
|
||||||
|
return extensions[extensions.length-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove(ICExtensionReference ext) {
|
||||||
|
CExtensionReference extensions[] = (CExtensionReference[]) extMap.get(ext.getExtension());
|
||||||
|
for( int i = 0; i < extensions.length; i++ ) {
|
||||||
|
if ( extensions[i] == ext ) {
|
||||||
|
System.arraycopy(extensions, i, extensions, i+1, extensions.length - 1 - i);
|
||||||
|
CExtensionReference[] newExtensions = new CExtensionReference[extensions.length - 1];
|
||||||
|
System.arraycopy(extensions, 0, newExtensions, 0, extensions.length);
|
||||||
|
extensions = newExtensions;
|
||||||
|
if ( extensions.length == 0 ) {
|
||||||
|
extMap.put(ext.getExtension(), null);
|
||||||
|
} else {
|
||||||
|
extMap.put(ext.getExtension(), extensions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CExtensionInfo getInfo(CExtensionReference cProjectExtension) {
|
||||||
|
CExtensionInfo info = (CExtensionInfo) extInfoMap.get(cProjectExtension);
|
||||||
|
if ( info == null ) {
|
||||||
|
info = new CExtensionInfo();
|
||||||
|
extInfoMap.put(cProjectExtension, info);
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Node searchNode(Node target, String tagName) {
|
||||||
|
NodeList list = target.getChildNodes();
|
||||||
|
for (int i = 0; i < list.getLength(); i++) {
|
||||||
|
if (list.item(i).getNodeName().equals(tagName))
|
||||||
|
return list.item(i);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getString(Node target, String tagName) {
|
||||||
|
Node node = searchNode(target, tagName);
|
||||||
|
return node != null ? (node.getFirstChild() == null ? null : node.getFirstChild().getNodeValue()) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ICOwnerInfo readProjectDescription(Node node) {
|
||||||
|
ICOwnerInfo owner = null;
|
||||||
|
NamedNodeMap attrib = node.getAttributes();
|
||||||
|
try {
|
||||||
|
owner = new COwner(attrib.getNamedItem("id").getNodeValue());
|
||||||
|
}
|
||||||
|
catch (CoreException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
fPlatform = getString(node, PROJECT_PLATFORM);
|
||||||
|
if ( fPlatform == null )
|
||||||
|
fPlatform = "*";
|
||||||
|
readProjectExtensions(node);
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readProjectExtensions(Node node) {
|
||||||
|
NodeList list = node.getChildNodes();
|
||||||
|
for (int i = 0; i < list.getLength(); i++) {
|
||||||
|
if ( list.item(i).getNodeName().equals(PROJECT_EXTENSION) ) {
|
||||||
|
NamedNodeMap attrib = list.item(i).getAttributes();
|
||||||
|
ICExtensionReference ext = create(attrib.getNamedItem("point").getNodeValue(), attrib.getNamedItem("id").getNodeValue());
|
||||||
|
NodeList extAttrib = list.item(i).getChildNodes();
|
||||||
|
for( int j = 0; j < extAttrib.getLength(); j++) {
|
||||||
|
if ( extAttrib.item(j).getNodeName().equals(PROJECT_EXTENSION_ATTRIBUTE) ) {
|
||||||
|
attrib = extAttrib.item(j).getAttributes();
|
||||||
|
ext.setExtensionData(attrib.getNamedItem("key").getNodeValue(), attrib.getNamedItem("value").getNodeValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void saveInfo() throws CoreException {
|
||||||
|
String xml;
|
||||||
|
if ( !isDirty() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
xml = getAsXML();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
IStatus s= new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.getMessage(), e);
|
||||||
|
throw new CoreException(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
IFile rscFile = getProject().getFile(DESCRIPTION_FILE_NAME);
|
||||||
|
InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
|
||||||
|
// update the resource content
|
||||||
|
if (rscFile.exists()) {
|
||||||
|
rscFile.setContents(inputStream, IResource.FORCE, null);
|
||||||
|
} else {
|
||||||
|
rscFile.create(inputStream, IResource.FORCE, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isDirty() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String serializeDocument(Document doc) throws IOException {
|
||||||
|
ByteArrayOutputStream s= new ByteArrayOutputStream();
|
||||||
|
OutputFormat format = new OutputFormat();
|
||||||
|
format.setIndenting(true);
|
||||||
|
format.setLineSeparator(System.getProperty("line.separator")); //$NON-NLS-1$
|
||||||
|
|
||||||
|
Serializer serializer =
|
||||||
|
SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(
|
||||||
|
new OutputStreamWriter(s, "UTF8"), //$NON-NLS-1$
|
||||||
|
format);
|
||||||
|
serializer.asDOMSerializer().serialize(doc);
|
||||||
|
return s.toString("UTF8"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getAsXML() throws IOException {
|
||||||
|
Element element;
|
||||||
|
Document doc = new DocumentImpl();
|
||||||
|
Element configRootElement = doc.createElement(PROJECT_DESCRIPTION);
|
||||||
|
doc.appendChild(configRootElement);
|
||||||
|
configRootElement.setAttribute("id", fOwner.getID()); //$NON-NLS-1$
|
||||||
|
element= doc.createElement(PROJECT_PLATFORM);
|
||||||
|
element.appendChild(doc.createTextNode(fPlatform));
|
||||||
|
if ( element != null )
|
||||||
|
configRootElement.appendChild(element);
|
||||||
|
Iterator extIterator = extMap.values().iterator();
|
||||||
|
while( extIterator.hasNext() ) {
|
||||||
|
CExtensionReference extension[] = (CExtensionReference[]) extIterator.next();
|
||||||
|
for( int i = 0; i < extension.length; i ++ ) {
|
||||||
|
configRootElement.appendChild(element = doc.createElement(PROJECT_EXTENSION));
|
||||||
|
element.setAttribute("point", extension[i].getExtension());
|
||||||
|
element.setAttribute("id", extension[i].getID());
|
||||||
|
CExtensionInfo info = (CExtensionInfo) extInfoMap.get(extension[i]);
|
||||||
|
if ( info != null ) {
|
||||||
|
Iterator attribIterator = info.getAttributes().entrySet().iterator();
|
||||||
|
while( attribIterator.hasNext() ) {
|
||||||
|
Entry entry = (Entry) attribIterator.next();
|
||||||
|
Element extAttributes = doc.createElement(PROJECT_EXTENSION_ATTRIBUTE);
|
||||||
|
extAttributes.setAttribute("key", (String)entry.getKey());
|
||||||
|
extAttributes.setAttribute("value", (String)entry.getValue());
|
||||||
|
element.appendChild(extAttributes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return serializeDocument(doc);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.core.ICExtension;
|
||||||
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceChangeEvent;
|
||||||
|
import org.eclipse.core.resources.IResourceChangeListener;
|
||||||
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
import org.eclipse.core.runtime.IExtension;
|
||||||
|
import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
|
import org.eclipse.core.runtime.IPluginRegistry;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
|
||||||
|
public class CDescriptorManager implements IResourceChangeListener {
|
||||||
|
private static HashMap fDescriptorMap;
|
||||||
|
|
||||||
|
private IWorkspace getWorkspace() {
|
||||||
|
return ResourcesPlugin.getWorkspace();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() {
|
||||||
|
getWorkspace().removeResourceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startup() {
|
||||||
|
getWorkspace().addResourceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Traverses the delta looking for added/removed/changed launch
|
||||||
|
* configuration files.
|
||||||
|
*
|
||||||
|
* @see IResourceChangeListener#resourceChanged(IResourceChangeEvent)
|
||||||
|
*/
|
||||||
|
public void resourceChanged(IResourceChangeEvent event) {
|
||||||
|
if ( fDescriptorMap == null ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IResource resource = event.getResource();
|
||||||
|
IResourceDelta delta = event.getDelta();
|
||||||
|
if ( event.getType() == IResourceChangeEvent.PRE_DELETE ) {
|
||||||
|
if(resource.getType() == IResource.PROJECT ) {
|
||||||
|
fDescriptorMap.remove(resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public synchronized ICDescriptor getDescriptor(IProject project) throws CoreException {
|
||||||
|
if ( fDescriptorMap == null ) {
|
||||||
|
fDescriptorMap = new HashMap();
|
||||||
|
}
|
||||||
|
CDescriptor cproject;
|
||||||
|
cproject = (CDescriptor)fDescriptorMap.get(project) ;
|
||||||
|
if ( cproject == null ) {
|
||||||
|
cproject = new CDescriptor(project);
|
||||||
|
fDescriptorMap.put(project, cproject);
|
||||||
|
}
|
||||||
|
return cproject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void configure(IProject project, String id) throws CoreException {
|
||||||
|
CDescriptor cproject;
|
||||||
|
if ( fDescriptorMap == null ) {
|
||||||
|
fDescriptorMap = new HashMap();
|
||||||
|
}
|
||||||
|
if ( fDescriptorMap.get(project) != null ) {
|
||||||
|
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_EXISTS, "CDTProject already configured", (Throwable)null);
|
||||||
|
throw new CoreException(status);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
cproject = new CDescriptor(project, id);
|
||||||
|
}
|
||||||
|
catch (CoreException e) { // if .cdtproject already exists will use that
|
||||||
|
IStatus status = e.getStatus();
|
||||||
|
if ( status.getCode() == CCorePlugin.STATUS_CDTPROJECT_EXISTS ) {
|
||||||
|
cproject = new CDescriptor(project);
|
||||||
|
fDescriptorMap.put(project, cproject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
COwner cowner = new COwner(id);
|
||||||
|
cowner.configure(project, cproject);
|
||||||
|
cproject.saveInfo();
|
||||||
|
fDescriptorMap.put(project, cproject);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ICExtension[] createExtensions(String extensionID, IProject project) throws CoreException {
|
||||||
|
ArrayList extensionList = new ArrayList(1);
|
||||||
|
ICDescriptor cDescriptor = getDescriptor(project);
|
||||||
|
ICExtensionReference ext[] = cDescriptor.get(extensionID);
|
||||||
|
IPluginRegistry pluginRegistry = Platform.getPluginRegistry();
|
||||||
|
for( int i = 0; i < ext.length; i++ ) {
|
||||||
|
IExtensionPoint extensionPoint = pluginRegistry.getExtensionPoint(ext[i].getExtension());
|
||||||
|
IExtension extension = extensionPoint.getExtension(ext[i].getID());
|
||||||
|
IConfigurationElement element[] = extension.getConfigurationElements();
|
||||||
|
for( int j = 0; j < element.length; j++ ) {
|
||||||
|
if ( element[j].getName().equalsIgnoreCase("run") ) {
|
||||||
|
InternalCExtension cExtension = (InternalCExtension) element[i].createExecutableExtension("class");
|
||||||
|
cExtension.setExtenionReference(ext[i]);
|
||||||
|
cExtension.setProject(project);
|
||||||
|
extensionList.add(cExtension);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (ICExtension[]) extensionList.toArray(new ICExtension[extensionList.size()]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/package org.eclipse.cdt.internal.core;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class CExtensionInfo {
|
||||||
|
|
||||||
|
protected HashMap attribMap = new HashMap(4);
|
||||||
|
|
||||||
|
protected HashMap getAttributes() {
|
||||||
|
return attribMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttribute(String key, String value) {
|
||||||
|
attribMap.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAttribute(String key) {
|
||||||
|
return (String) attribMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
|
|
||||||
|
public class CExtensionReference implements ICExtensionReference {
|
||||||
|
private CDescriptor fDescriptor;
|
||||||
|
private String fName;
|
||||||
|
private String fId;
|
||||||
|
|
||||||
|
public CExtensionReference(CDescriptor descriptor, String name, String id) {
|
||||||
|
fDescriptor = descriptor;
|
||||||
|
fName = name;
|
||||||
|
fId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExtension() {
|
||||||
|
return fName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getID() {
|
||||||
|
return fId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CExtensionInfo getInfo() {
|
||||||
|
return fDescriptor.getInfo(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExtensionData(String key, String value) {
|
||||||
|
getInfo().setAttribute(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExtensionData(String key) {
|
||||||
|
return getInfo().getAttribute(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,9 +7,9 @@ package org.eclipse.cdt.internal.core;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ICProjectDescriptor;
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
import org.eclipse.cdt.core.ICProjectOwner;
|
import org.eclipse.cdt.core.ICOwner;
|
||||||
import org.eclipse.cdt.core.ICProjectOwnerInfo;
|
import org.eclipse.cdt.core.ICOwnerInfo;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
@ -18,15 +18,15 @@ import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
|
||||||
public class CProjectOwner implements ICProjectOwnerInfo {
|
public class COwner implements ICOwnerInfo {
|
||||||
String pluginId;
|
String ownerID;
|
||||||
IExtension extension;
|
IExtension extension;
|
||||||
|
|
||||||
public CProjectOwner(String id) throws CoreException {
|
public COwner(String id) throws CoreException {
|
||||||
pluginId = id;
|
ownerID = id;
|
||||||
IExtensionPoint extpoint = CCorePlugin.getDefault().getDescriptor().getExtensionPoint("CProjectOwner");
|
IExtensionPoint extpoint = CCorePlugin.getDefault().getDescriptor().getExtensionPoint("CProjectOwner");
|
||||||
if (extpoint != null) {
|
if (extpoint != null) {
|
||||||
extension = extpoint.getExtension(pluginId);
|
extension = extpoint.getExtension(ownerID);
|
||||||
} else {
|
} else {
|
||||||
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "Invalid CDTProject owner ID", (Throwable)null);
|
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "Invalid CDTProject owner ID", (Throwable)null);
|
||||||
throw new CoreException(status);
|
throw new CoreException(status);
|
||||||
|
@ -34,7 +34,7 @@ public class CProjectOwner implements ICProjectOwnerInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getID() {
|
public String getID() {
|
||||||
return pluginId;
|
return ownerID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
@ -76,11 +76,11 @@ public class CProjectOwner implements ICProjectOwnerInfo {
|
||||||
return new String[0];
|
return new String[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
void configure(IProject project, ICProjectDescriptor cproject) throws CoreException {
|
void configure(IProject project, ICDescriptor cproject) throws CoreException {
|
||||||
IConfigurationElement element[] = extension.getConfigurationElements();
|
IConfigurationElement element[] = extension.getConfigurationElements();
|
||||||
for( int i = 0; i < element.length; i++ ) {
|
for( int i = 0; i < element.length; i++ ) {
|
||||||
if ( element[i].getName().equalsIgnoreCase("run") ) {
|
if ( element[i].getName().equalsIgnoreCase("run") ) {
|
||||||
ICProjectOwner owner = (ICProjectOwner) element[i].createExecutableExtension("class");
|
ICOwner owner = (ICOwner) element[i].createExecutableExtension("class");
|
||||||
owner.configure(cproject);
|
owner.configure(cproject);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -88,4 +88,18 @@ public class CProjectOwner implements ICProjectOwnerInfo {
|
||||||
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "Invalid CDTProject owner extension", (Throwable)null);
|
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "Invalid CDTProject owner extension", (Throwable)null);
|
||||||
throw new CoreException(status);
|
throw new CoreException(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update(IProject project, ICDescriptor cproject) throws CoreException {
|
||||||
|
IConfigurationElement element[] = extension.getConfigurationElements();
|
||||||
|
for( int i = 0; i < element.length; i++ ) {
|
||||||
|
if ( element[i].getName().equalsIgnoreCase("run") ) {
|
||||||
|
ICOwner owner = (ICOwner) element[i].createExecutableExtension("class");
|
||||||
|
owner.update(cproject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "Invalid CDTProject owner extension", (Throwable)null);
|
||||||
|
throw new CoreException(status);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,270 +0,0 @@
|
||||||
/*
|
|
||||||
* (c) Copyright QNX Software System Ltd. 2002.
|
|
||||||
* All Rights Reserved.
|
|
||||||
*/
|
|
||||||
package org.eclipse.cdt.internal.core;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStreamWriter;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
|
|
||||||
import org.apache.xerces.dom.DocumentImpl;
|
|
||||||
import org.apache.xml.serialize.Method;
|
|
||||||
import org.apache.xml.serialize.OutputFormat;
|
|
||||||
import org.apache.xml.serialize.Serializer;
|
|
||||||
import org.apache.xml.serialize.SerializerFactory;
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.core.ICProjectDescriptor;
|
|
||||||
import org.eclipse.cdt.core.ICProjectOwner;
|
|
||||||
import org.eclipse.cdt.core.ICProjectOwnerInfo;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.resources.IProjectDescription;
|
|
||||||
import org.eclipse.core.resources.IResource;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.w3c.dom.Document;
|
|
||||||
import org.w3c.dom.Element;
|
|
||||||
import org.w3c.dom.NamedNodeMap;
|
|
||||||
import org.w3c.dom.Node;
|
|
||||||
import org.w3c.dom.NodeList;
|
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
public class CProjectDescriptor implements ICProjectDescriptor {
|
|
||||||
/** constants */
|
|
||||||
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
|
||||||
private ICProjectOwnerInfo fOwner;
|
|
||||||
private IProject fProject;
|
|
||||||
private String fPlatform = "*";
|
|
||||||
|
|
||||||
private static final String PROJECT_DESCRIPTION = "cdtproject";
|
|
||||||
private static final String PROJECT_PLATFORM = "platform";
|
|
||||||
|
|
||||||
private CProjectDescriptor(IProject project, String id) throws CoreException {
|
|
||||||
fProject = project;
|
|
||||||
fOwner = new CProjectOwner(id);
|
|
||||||
IPath projectLocation = project.getDescription().getLocation();
|
|
||||||
|
|
||||||
final boolean isDefaultLocation = projectLocation == null;
|
|
||||||
if (isDefaultLocation) {
|
|
||||||
projectLocation = getProjectDefaultLocation(project);
|
|
||||||
}
|
|
||||||
IPath descriptionPath = projectLocation.append(ICProjectDescriptor.DESCRIPTION_FILE_NAME);
|
|
||||||
|
|
||||||
if (descriptionPath.toFile().exists()) {
|
|
||||||
IStatus status = new Status(IStatus.WARNING, CCorePlugin.getDefault().PLUGIN_ID, CCorePlugin.STATUS_CDTPROJECT_EXISTS, "CDTProject already exisits", (Throwable)null);
|
|
||||||
throw new CoreException(status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private CProjectDescriptor(IProject project) throws CoreException {
|
|
||||||
fProject = project;
|
|
||||||
FileInputStream file = null;
|
|
||||||
IPath projectLocation = project.getDescription().getLocation();
|
|
||||||
|
|
||||||
final boolean isDefaultLocation = projectLocation == null;
|
|
||||||
if (isDefaultLocation) {
|
|
||||||
projectLocation = getProjectDefaultLocation(project);
|
|
||||||
}
|
|
||||||
IPath descriptionPath = projectLocation.append(ICProjectDescriptor.DESCRIPTION_FILE_NAME);
|
|
||||||
|
|
||||||
if (!descriptionPath.toFile().exists()) {
|
|
||||||
IStatus status = new Status(IStatus.ERROR, CCorePlugin.getDefault().PLUGIN_ID, -1, "CDTProject file not found", (Throwable)null);
|
|
||||||
throw new CoreException(status);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
file = new FileInputStream(projectLocation.toFile());
|
|
||||||
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
|
||||||
Document document = parser.parse(file);
|
|
||||||
Node node = document.getFirstChild();
|
|
||||||
if (node.getNodeName().equals(PROJECT_DESCRIPTION))
|
|
||||||
fOwner = readProjectDescription(node);
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
}
|
|
||||||
catch (SAXException e) {
|
|
||||||
}
|
|
||||||
catch (ParserConfigurationException e) {
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (file != null) {
|
|
||||||
try {
|
|
||||||
file.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IPath getProjectDefaultLocation(IProject project) {
|
|
||||||
return Platform.getLocation().append(project.getFullPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICProjectOwnerInfo getProjectOwner() {
|
|
||||||
return fOwner;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlatform() {
|
|
||||||
return fPlatform;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getString(Node target, String tagName) {
|
|
||||||
Node node = searchNode(target, tagName);
|
|
||||||
return node != null ? (node.getFirstChild() == null ? null : node.getFirstChild().getNodeValue()) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String[] getStrings(Node target) {
|
|
||||||
if (target == null)
|
|
||||||
return null;
|
|
||||||
NodeList list = target.getChildNodes();
|
|
||||||
if (list.getLength() == 0)
|
|
||||||
return EMPTY_STRING_ARRAY;
|
|
||||||
List result = new ArrayList(list.getLength());
|
|
||||||
for (int i = 0; i < list.getLength(); i++) {
|
|
||||||
Node node = list.item(i);
|
|
||||||
if (node.getNodeType() == Node.ELEMENT_NODE)
|
|
||||||
result.add((String) read(node.getChildNodes().item(0)));
|
|
||||||
}
|
|
||||||
return (String[]) result.toArray(new String[result.size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Object read(Node node) {
|
|
||||||
if (node == null)
|
|
||||||
return null;
|
|
||||||
switch (node.getNodeType()) {
|
|
||||||
case Node.ELEMENT_NODE :
|
|
||||||
/*
|
|
||||||
if (node.getNodeName().equals(BUILDER))
|
|
||||||
return readBuildSpec(node);
|
|
||||||
if (node.getNodeName().equals(DEBUGGER)
|
|
||||||
return readProjectDescription(node);
|
|
||||||
*/
|
|
||||||
case Node.TEXT_NODE :
|
|
||||||
String value = node.getNodeValue();
|
|
||||||
return value == null ? null : value.trim();
|
|
||||||
default :
|
|
||||||
return node.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ICProjectOwnerInfo readProjectDescription(Node node) {
|
|
||||||
ICProjectOwnerInfo owner = null;
|
|
||||||
NamedNodeMap attrib = node.getAttributes();
|
|
||||||
try {
|
|
||||||
owner = new CProjectOwner(attrib.getNamedItem("id").getNodeValue());
|
|
||||||
}
|
|
||||||
catch (CoreException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
fPlatform = getString(node, PROJECT_PLATFORM);
|
|
||||||
return owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected Node searchNode(Node target, String tagName) {
|
|
||||||
NodeList list = target.getChildNodes();
|
|
||||||
for (int i = 0; i < list.getLength(); i++) {
|
|
||||||
if (list.item(i).getNodeName().equals(tagName))
|
|
||||||
return list.item(i);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IProject getProject() {
|
|
||||||
return fProject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveInfo() throws CoreException {
|
|
||||||
String xml;
|
|
||||||
try {
|
|
||||||
xml = getAsXML();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
IStatus s= new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, e.getMessage(), e);
|
|
||||||
throw new CoreException(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
IFile rscFile = getProject().getFile(ICProjectDescriptor.DESCRIPTION_FILE_NAME);
|
|
||||||
InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
|
|
||||||
// update the resource content
|
|
||||||
if (rscFile.exists()) {
|
|
||||||
rscFile.setContents(inputStream, IResource.FORCE, null);
|
|
||||||
} else {
|
|
||||||
rscFile.create(inputStream, IResource.FORCE, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String serializeDocument(Document doc) throws IOException {
|
|
||||||
ByteArrayOutputStream s= new ByteArrayOutputStream();
|
|
||||||
OutputFormat format = new OutputFormat();
|
|
||||||
format.setIndenting(true);
|
|
||||||
format.setLineSeparator(System.getProperty("line.separator")); //$NON-NLS-1$
|
|
||||||
|
|
||||||
Serializer serializer =
|
|
||||||
SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(
|
|
||||||
new OutputStreamWriter(s, "UTF8"), //$NON-NLS-1$
|
|
||||||
format);
|
|
||||||
serializer.asDOMSerializer().serialize(doc);
|
|
||||||
return s.toString("UTF8"); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getAsXML() throws IOException {
|
|
||||||
Element element;
|
|
||||||
Document doc = new DocumentImpl();
|
|
||||||
Element configRootElement = doc.createElement(PROJECT_DESCRIPTION);
|
|
||||||
doc.appendChild(configRootElement);
|
|
||||||
configRootElement.setAttribute("id", fOwner.getID()); //$NON-NLS-1$
|
|
||||||
element= createBuilderElement(doc);
|
|
||||||
if ( element != null )
|
|
||||||
configRootElement.appendChild(element);
|
|
||||||
return serializeDocument(doc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected Element createBuilderElement(Document doc) {
|
|
||||||
/*
|
|
||||||
if ( builderID != null ) {
|
|
||||||
Element element = doc.createElement("cdtBuilder");
|
|
||||||
element.setAttribute("id", builderID);
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static synchronized ICProjectDescriptor getDescription(IProject project) throws CoreException {
|
|
||||||
return new CProjectDescriptor(project);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static synchronized void configure(IProject project, String id) throws CoreException {
|
|
||||||
CProjectDescriptor cproject;
|
|
||||||
try {
|
|
||||||
cproject = new CProjectDescriptor(project, id);
|
|
||||||
}
|
|
||||||
catch (CoreException e) { // if .cdtproject already exists will use that
|
|
||||||
IStatus status = e.getStatus();
|
|
||||||
if ( status.getCode() == CCorePlugin.STATUS_CDTPROJECT_EXISTS )
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
CProjectOwner cowner = new CProjectOwner(id);
|
|
||||||
cowner.configure(project, cproject);
|
|
||||||
cproject.saveInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,233 +0,0 @@
|
||||||
package org.eclipse.cdt.internal.core;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (c) Copyright QNX Software Systems Ltd. 2002.
|
|
||||||
* All Rights Reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.utils.spawner.EnvironmentReader;
|
|
||||||
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
|
||||||
|
|
||||||
public class CommonMkInfo {
|
|
||||||
|
|
||||||
public final static String COMMON_MK = "common.mk";
|
|
||||||
|
|
||||||
IPath dir;
|
|
||||||
long modification;
|
|
||||||
IPath[] includePaths = new IPath[0];
|
|
||||||
IPath[] libs = new IPath[0];
|
|
||||||
IPath[] libPaths = new IPath[0];
|
|
||||||
|
|
||||||
public CommonMkInfo(IPath dir) {
|
|
||||||
this.dir = dir;
|
|
||||||
modification = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CommonMkInfo () {
|
|
||||||
dir = new Path("");
|
|
||||||
String def = EnvironmentReader.getEnvVar("QNX_TARGET");
|
|
||||||
if (def != null) {
|
|
||||||
IPath defaultPath = new Path(def);
|
|
||||||
includePaths = new IPath[] {defaultPath.append("/usr/include")};
|
|
||||||
libPaths = new IPath[] {defaultPath.append("/usr/lib"),
|
|
||||||
defaultPath.append("/x86/usr/lib")};
|
|
||||||
}
|
|
||||||
libs = new IPath[] {new Path("libc.so")};
|
|
||||||
}
|
|
||||||
|
|
||||||
public IPath[] getIncludePaths() {
|
|
||||||
parse();
|
|
||||||
return includePaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IPath[] getLibs() {
|
|
||||||
boolean hasLibC = false;
|
|
||||||
parse();
|
|
||||||
for (int i = 0; i < libs.length; i++) {
|
|
||||||
String name = libs[i].toOSString();
|
|
||||||
if (!(name.indexOf(IPath.SEPARATOR) != -1
|
|
||||||
|| name.indexOf(IPath.DEVICE_SEPARATOR) != -1
|
|
||||||
|| name.indexOf('.') != -1)) {
|
|
||||||
if (!name.startsWith("lib")) {
|
|
||||||
libs[i] = new Path("lib" + name + ".so");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (libs[i].toOSString().equals("libc.so"))
|
|
||||||
hasLibC = true;
|
|
||||||
}
|
|
||||||
if (!hasLibC) {
|
|
||||||
IPath[] newlibs = new IPath[libs.length + 1];
|
|
||||||
int i = 0;;
|
|
||||||
for (; i < libs.length; i++) {
|
|
||||||
newlibs[i] = libs[i];
|
|
||||||
}
|
|
||||||
newlibs[i] = new Path("libc.so");
|
|
||||||
libs = newlibs;
|
|
||||||
}
|
|
||||||
return libs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IPath[] getLibPaths() {
|
|
||||||
parse();
|
|
||||||
return libPaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasChanged() {
|
|
||||||
File prj = new File(dir.toOSString());
|
|
||||||
File common = new File(prj, COMMON_MK);
|
|
||||||
if (!prj.exists() || prj.isFile() || !common.exists())
|
|
||||||
return false;
|
|
||||||
long modif = common.lastModified();
|
|
||||||
return (modif > modification);
|
|
||||||
}
|
|
||||||
|
|
||||||
void parse() {
|
|
||||||
File makefile = null;
|
|
||||||
try {
|
|
||||||
if (hasChanged()) {
|
|
||||||
File prj = new File(dir.toOSString());
|
|
||||||
File common = new File(prj, COMMON_MK);
|
|
||||||
modification = common.lastModified();
|
|
||||||
makefile = File.createTempFile("QMakefile", null, prj);
|
|
||||||
OutputStream fout = new FileOutputStream(makefile);
|
|
||||||
DataOutputStream out = new DataOutputStream(fout);
|
|
||||||
|
|
||||||
out.writeBytes("LIST=OS CPU VARIANT\n");
|
|
||||||
out.writeBytes("include common.mk\n");
|
|
||||||
out.writeBytes("\n");
|
|
||||||
|
|
||||||
out.writeBytes("LIBS:\n");
|
|
||||||
out.writeBytes("\t@echo $(LIBS)\n");
|
|
||||||
out.writeBytes("\n");
|
|
||||||
|
|
||||||
out.writeBytes("INCVPATH:\n");
|
|
||||||
out.writeBytes("\t@echo $(INCVPATH)\n");
|
|
||||||
out.writeBytes("\n");
|
|
||||||
|
|
||||||
out.writeBytes("SRCVPATH:\n");
|
|
||||||
out.writeBytes("\t@echo $(SRCVPATH)\n");
|
|
||||||
out.writeBytes("\n");
|
|
||||||
|
|
||||||
out.writeBytes("LIBVPATH:\n");
|
|
||||||
out.writeBytes("\t@echo $(LIBVPATH)\n");
|
|
||||||
out.writeBytes("\n");
|
|
||||||
|
|
||||||
out.flush();
|
|
||||||
out.close();
|
|
||||||
|
|
||||||
// FIXME: Use the proper os and CPU
|
|
||||||
Properties envp = EnvironmentReader.getEnvVars();
|
|
||||||
envp.setProperty("OS", "nto");
|
|
||||||
envp.setProperty("CPU", "x86");
|
|
||||||
IPath[] incVPath = spawn("INCVPATH", envp, makefile, prj);
|
|
||||||
parseIncVPath(incVPath);
|
|
||||||
IPath[] libNames = spawn("LIBS", envp, makefile, prj);
|
|
||||||
parseLibs(libNames);
|
|
||||||
IPath[] libVPath = spawn("LIBVPATH", envp, makefile, prj);
|
|
||||||
parseLibVPath(libVPath);
|
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
} catch (IOException e) {
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
if (makefile != null)
|
|
||||||
makefile.delete();
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IPath[] spawn (String target, Properties envp, File makefile, File dir) {
|
|
||||||
// FIXME: Use the proper MakeCommand from the builder.
|
|
||||||
String[] args = new String[] {"make", "-f", makefile.getName(), target};
|
|
||||||
BufferedReader stdout = null;
|
|
||||||
Process make = null;
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
|
|
||||||
try {
|
|
||||||
ArrayList envList = new ArrayList();
|
|
||||||
|
|
||||||
// Turn the environment Property to an Array.
|
|
||||||
Enumeration names = envp.propertyNames();
|
|
||||||
if (names != null) {
|
|
||||||
while (names.hasMoreElements()) {
|
|
||||||
String key = (String) names.nextElement();
|
|
||||||
envList.add(key + "=" + envp.getProperty(key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String[] env = (String[]) envList.toArray(new String[envList.size()]);
|
|
||||||
make = ProcessFactory.getFactory().exec(args, env, dir);
|
|
||||||
stdout = new BufferedReader(new InputStreamReader(make.getInputStream()));
|
|
||||||
String s;
|
|
||||||
while ((s = stdout.readLine ()) != null) {
|
|
||||||
buffer.append(s);
|
|
||||||
}
|
|
||||||
stdout.close();
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
} catch (IndexOutOfBoundsException e) {
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
} catch (IOException e) {
|
|
||||||
} finally {
|
|
||||||
if (make != null) {
|
|
||||||
make.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: This not quite right some of the include may contains
|
|
||||||
// things like double quotes with spaces.
|
|
||||||
StringTokenizer st = new StringTokenizer(buffer.toString());
|
|
||||||
IPath[] p = new IPath[st.countTokens()];
|
|
||||||
|
|
||||||
for(int i = 0; st.hasMoreTokens(); i++) {
|
|
||||||
p[i] = new Path((String)st.nextToken());
|
|
||||||
}
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void parseLibVPath(IPath[] array) {
|
|
||||||
ArrayList list = new ArrayList(array.length);
|
|
||||||
for (int i = 0; i < array.length; i++) {
|
|
||||||
if (array[i].toString().charAt(0) != '-') {
|
|
||||||
list.add (array[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
libPaths = (IPath[])list.toArray(new IPath[list.size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void parseIncVPath(IPath[] array){
|
|
||||||
ArrayList list = new ArrayList(array.length);
|
|
||||||
for (int i = 0; i < array.length; i++) {
|
|
||||||
if (array[i].toString().charAt(0) != '-') {
|
|
||||||
list.add (array[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
includePaths = (IPath[])list.toArray(new IPath[list.size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void parseLibs(IPath[] array){
|
|
||||||
ArrayList list = new ArrayList(array.length);
|
|
||||||
for (int i = 0; i < array.length; i++) {
|
|
||||||
if (array[i].toString().charAt(0) != '-') {
|
|
||||||
list.add (array[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
libs = (IPath[])list.toArray(new IPath[list.size()]);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
|
||||||
|
public abstract class InternalCExtension {
|
||||||
|
|
||||||
|
private IProject project;
|
||||||
|
private ICExtensionReference extensionRef;
|
||||||
|
|
||||||
|
void setProject(IProject project) {
|
||||||
|
this.project = project;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setExtenionReference(ICExtensionReference extReference) {
|
||||||
|
extensionRef = extReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IProject getProject() {
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ICExtensionReference getExtensionReference() {
|
||||||
|
return extensionRef;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core.make;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.AbstractCExtension;
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
|
import org.eclipse.cdt.core.builder.CIncrementalBuilder;
|
||||||
|
import org.eclipse.cdt.core.builder.ICBuilder;
|
||||||
|
import org.eclipse.cdt.core.builder.IOptimization;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
public class MakeBuilder extends AbstractCExtension implements ICBuilder {
|
||||||
|
|
||||||
|
public IPath[] getIncludePaths() {
|
||||||
|
return new IPath[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludePaths(IPath[] incPaths) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public IPath[] getLibraryPaths() {
|
||||||
|
return new IPath[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLibraryPaths(IPath[] libPaths) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getLibraries() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLibraries(String[] libs) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public IOptimization getOptimization() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOptimization() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public IProject[] build(CIncrementalBuilder cbuilder) {
|
||||||
|
ICExtensionReference ref = getExtensionReference();
|
||||||
|
System.out.println("MakeBuilder!!!!\n Command is:" + ref.getExtensionData("command"));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getID() {
|
||||||
|
return CCorePlugin.getDefault().PLUGIN_ID + ".makeBuilder";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,12 +4,18 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.internal.core.make;
|
package org.eclipse.cdt.internal.core.make;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.ICProjectDescriptor;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ICProjectOwner;
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
|
import org.eclipse.cdt.core.ICOwner;
|
||||||
|
|
||||||
public class MakeProject implements ICProjectOwner {
|
public class MakeProject implements ICOwner {
|
||||||
|
|
||||||
public void configure(ICProjectDescriptor cproject) {
|
public void configure(ICDescriptor cproject) {
|
||||||
|
ICExtensionReference ext = cproject.create(CCorePlugin.BUILDER_MODEL_ID, CCorePlugin.getDefault().PLUGIN_ID + ".makeBuilder");
|
||||||
|
ext.setExtensionData("command", "make");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void update(ICDescriptor cproject) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue