1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 10:16:03 +02:00

new ICPathEntry stuff

This commit is contained in:
David Inglis 2003-03-28 21:00:39 +00:00
parent 587449004b
commit a48cbb43a0
17 changed files with 920 additions and 222 deletions

View file

@ -1,3 +1,28 @@
2003-03-28 David Inglis
* src/org/eclipse/cdt/core/AbstractCExtension.java
* src/org/eclipse/cdt/core/CCorePlugin.java
* src/org/eclipse/cdt/core/ICDescriptor.java
* src/org/eclipse/cdt/core/ICExtension.java
* src/org/eclipse/cdt/core/ICExtensionReference.java
* src/org/eclipse/cdt/core/ICOwner.java
* src/org/eclipse/cdt/core/ICOwnerInfo.java
* src/org/eclipse/cdt/core/ICPathEntry.java
* src/org/eclipse/cdt/internal/CCorePluginResources.properties
* src/org/eclipse/cdt/internal/core/CDescriptor.java
* src/org/eclipse/cdt/internal/core/CDescriptorManager.java
* src/org/eclipse/cdt/internal/core/CExtensionInfo.java
* src/org/eclipse/cdt/internal/core/CExtensionReference.java
* src/org/eclipse/cdt/internal/core/COwner.java
* src/org/eclipse/cdt/internal/core/CPathEntry.java
* src/org/eclipse/cdt/internal/core/InternalCExtension.java
Add new ICPathEntry interface with peristancy, access is via the ICDecriptor
which uses the .cdtproject file for the store. creation is through CCorePlugin.
- included is some copyright header changes and the move of the properties file
to 'internal'
2003-03-27 Alain Magloire
* model/org/eclipse/cdt/internal/core/model/BinaryContainer.java:
* model/org/eclipse/cdt/internal/core/model/ArchiveContainer.java:

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
import org.eclipse.cdt.internal.core.InternalCExtension;

View file

@ -13,6 +13,7 @@ import org.eclipse.cdt.core.index.IndexModel;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.resources.IConsole;
import org.eclipse.cdt.internal.core.CDescriptorManager;
import org.eclipse.cdt.internal.core.CPathEntry;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspace;
@ -21,6 +22,7 @@ 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.IPath;
import org.eclipse.core.runtime.IPluginDescriptor;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@ -54,9 +56,7 @@ public class CCorePlugin extends Plugin {
static {
try {
fgResourceBundle =
ResourceBundle.getBundle(
"org.eclipse.cdt.internal.CCorePluginResources");
fgResourceBundle = ResourceBundle.getBundle("org.eclipse.cdt.internal.core.CCorePluginResources");
} catch (MissingResourceException x) {
fgResourceBundle = null;
}
@ -77,9 +77,7 @@ public class CCorePlugin extends Plugin {
}
public static String getFormattedString(String key, String arg) {
return MessageFormat.format(
getResourceString(key),
new String[] { arg });
return MessageFormat.format(getResourceString(key), new String[] { arg });
}
public static String getFormattedString(String key, String[] args) {
@ -133,22 +131,15 @@ public class CCorePlugin extends Plugin {
public IConsole getConsole(String id) {
try {
IExtensionPoint extension =
getDescriptor().getExtensionPoint("CBuildConsole");
IExtensionPoint extension = getDescriptor().getExtensionPoint("CBuildConsole");
if (extension != null) {
IExtension[] extensions = extension.getExtensions();
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] configElements =
extensions[i].getConfigurationElements();
IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
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 (
IConsole) configElements[j]
.createExecutableExtension(
"class");
String builderID = configElements[j].getAttribute("builderID");
if ((id == null && builderID == null) || (id != null && builderID.equals(id))) {
return (IConsole) configElements[j].createExecutableExtension("class");
}
}
}
@ -210,13 +201,11 @@ public class CCorePlugin extends Plugin {
return IndexModel.getDefault();
}
public ICDescriptor getCProjectDescription(IProject project)
throws CoreException {
public ICDescriptor getCProjectDescription(IProject project) throws CoreException {
return fDescriptorManager.getDescriptor(project);
}
public void mapCProjectOwner(IProject project, String id, boolean override)
throws CoreException {
public void mapCProjectOwner(IProject project, String id, boolean override) throws CoreException {
if (!override) {
fDescriptorManager.configure(project, id);
} else {
@ -258,9 +247,7 @@ public class CCorePlugin extends Plugin {
projectHandle.open(monitor);
// Add C Nature ... does not add duplicates
CProjectNature.addCNature(
projectHandle,
new SubProgressMonitor(monitor, 1));
CProjectNature.addCNature(projectHandle, new SubProgressMonitor(monitor, 1));
mapCProjectOwner(projectHandle, projectID, false);
} finally {
//monitor.done();
@ -279,10 +266,7 @@ public class CCorePlugin extends Plugin {
* @throws CoreException
*/
public void convertProjectFromCtoCC(
IProject projectHandle,
IProgressMonitor monitor)
throws CoreException {
public void convertProjectFromCtoCC(IProject projectHandle, IProgressMonitor monitor) throws CoreException {
if ((projectHandle != null)
&& projectHandle.hasNature(CCProjectNature.C_NATURE_ID)
&& !projectHandle.hasNature(CCProjectNature.CC_NATURE_ID)) {
@ -297,10 +281,7 @@ public class CCorePlugin extends Plugin {
* @param monitor
* @exception CoreException
*/
public void addDefaultCBuilder(
IProject projectHandle,
IProgressMonitor monitor)
throws CoreException {
public void addDefaultCBuilder(IProject projectHandle, IProgressMonitor monitor) throws CoreException {
// Set the Default C Builder.
CProjectNature.addCBuildSpec(projectHandle, monitor);
}
@ -319,11 +300,7 @@ public class CCorePlugin extends Plugin {
* @exception CoreException
*/
public void convertProjectToC(
IProject projectHandle,
IProgressMonitor monitor,
String projectID)
throws CoreException {
public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID) throws CoreException {
this.convertProjectToC(projectHandle, monitor, projectID, true);
}
@ -342,20 +319,13 @@ public class CCorePlugin extends Plugin {
* @exception CoreException
*/
public void convertProjectToC(
IProject projectHandle,
IProgressMonitor monitor,
String projectID,
boolean addMakeBuilder)
public void convertProjectToC(IProject projectHandle, IProgressMonitor monitor, String projectID, boolean addMakeBuilder)
throws CoreException {
if ((projectHandle == null)
|| (monitor == null)
|| (projectID == null)) {
if ((projectHandle == null) || (monitor == null) || (projectID == null)) {
return;
}
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProjectDescription description =
workspace.newProjectDescription(projectHandle.getName());
IProjectDescription description = workspace.newProjectDescription(projectHandle.getName());
description.setLocation(projectHandle.getFullPath());
createCProject(description, projectHandle, monitor, projectID);
if (addMakeBuilder) {
@ -374,22 +344,12 @@ public class CCorePlugin extends Plugin {
* @exception CoreException
*/
public void convertProjectToCC(
IProject projectHandle,
IProgressMonitor monitor,
String projectID,
boolean addMakeBuilder)
public void convertProjectToCC(IProject projectHandle, IProgressMonitor monitor, String projectID, boolean addMakeBuilder)
throws CoreException {
if ((projectHandle == null)
|| (monitor == null)
|| (projectID == null)) {
if ((projectHandle == null) || (monitor == null) || (projectID == null)) {
return;
}
createCProject(
projectHandle.getDescription(),
projectHandle,
monitor,
projectID);
createCProject(projectHandle.getDescription(), projectHandle, monitor, projectID);
// now add C++ nature
convertProjectFromCtoCC(projectHandle, monitor);
if (addMakeBuilder) {
@ -408,11 +368,7 @@ public class CCorePlugin extends Plugin {
* @exception CoreException
*/
public void convertProjectToCC(
IProject projectHandle,
IProgressMonitor monitor,
String projectID)
throws CoreException {
public void convertProjectToCC(IProject projectHandle, IProgressMonitor monitor, String projectID) throws CoreException {
this.convertProjectToCC(projectHandle, monitor, projectID, true);
}
@ -425,35 +381,82 @@ public class CCorePlugin extends Plugin {
// }
public IProcessList getProcessList() {
IExtensionPoint extension =
getDescriptor().getExtensionPoint("ProcessList");
IExtensionPoint extension = getDescriptor().getExtensionPoint("ProcessList");
if (extension != null) {
IExtension[] extensions = extension.getExtensions();
IConfigurationElement[] configElements =
extensions[0].getConfigurationElements();
IConfigurationElement[] configElements = extensions[0].getConfigurationElements();
if (configElements.length != 0) {
try {
return (
IProcessList) configElements[0]
.createExecutableExtension(
"class");
return (IProcessList) configElements[0].createExecutableExtension("class");
} catch (CoreException e) {
}
}
}
return null;
}
// Preference to turn on/off the new parser
private boolean useNewParser = false;
public void setUseNewParser(boolean useNewParser) {
this.useNewParser = useNewParser;
}
public boolean useNewParser() {
return useNewParser;
}
/**
* @param path
* @return
*/
public static ICPathEntry newProjectEntry(IPath path) {
return new CPathEntry(ICPathEntry.CDT_PROJECT, path, CPathEntry.NO_EXCLUSION_PATTERNS, null, null, null);
}
/**
* @param path
* @param sourceAttachmentPath
* @param sourceAttachmentRootPath
* @return
*/
public static ICPathEntry newLibraryEntry(IPath path, IPath sourceAttachmentPath, IPath sourceAttachmentRootPath, IPath sourceAttachmentRootPrefixMapping) {
return new CPathEntry(
ICPathEntry.CDT_LIBRARY,
path,
CPathEntry.NO_EXCLUSION_PATTERNS,
sourceAttachmentPath,
sourceAttachmentRootPath,
sourceAttachmentRootPrefixMapping);
}
/**
* @param path
* @param exclusionPatterns
* @param outputLocation
* @return
*/
public static ICPathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns) {
return new CPathEntry(ICPathEntry.CDT_SOURCE, path, exclusionPatterns, null, null, null);
}
/**
* @param path
* @param sourceAttachmentPath
* @param sourceAttachmentRootPath
* @return
*/
public static ICPathEntry newVariableEntry(IPath path, IPath sourceAttachmentPath, IPath sourceAttachmentRootPath) {
return new CPathEntry(ICPathEntry.CDT_VARIABLE, path, null, sourceAttachmentPath, sourceAttachmentRootPath, null);
}
/**
* @param path
* @param exclusionPatterns
* @return
*/
public static ICPathEntry newIncludeEntry(IPath path, IPath[] exclusionPatterns) {
return new CPathEntry(ICPathEntry.CDT_INCLUDE, path, exclusionPatterns, null, null, null);
}
}

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
import org.eclipse.core.resources.IProject;
@ -18,4 +24,7 @@ public interface ICDescriptor {
public void remove(ICExtensionReference extension) throws CoreException;
public void remove(String extensionPoint) throws CoreException;
public void setPathEntries(ICPathEntry[] entries) throws CoreException;
public ICPathEntry[] getPathEntries();
}

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
import org.eclipse.core.resources.IProject;

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
import org.eclipse.core.runtime.CoreException;

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
import org.eclipse.core.runtime.CoreException;

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
public interface ICOwnerInfo {

View file

@ -0,0 +1,205 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core;
import org.eclipse.core.runtime.IPath;
public interface ICPathEntry {
/**
* Entry kind constant describing a path entry identifying a
* library. A library is an archive containing
* consisting of pre-compiled binaries.
*/
int CDT_LIBRARY = 1;
/**
* Entry kind constant describing a path entry identifying a
* required project.
*/
int CDT_PROJECT = 2;
/**
* Entry kind constant describing a path entry identifying a
* folder containing source code to be compiled.
*/
int CDT_SOURCE = 3;
/**
* Entry kind constant describing a path entry defined using
* a path that begins with a variable reference.
*/
int CDT_VARIABLE = 4;
/**
* Entry kind constant describing a path entry identifying a
* include path.
*/
int CDT_INCLUDE = 5;
/**
* Returns the kind of this path entry.
*
* @return one of:
* <ul>
* <li><code>CDT_SOURCE</code> - this entry describes a source root in
its project
* <li><code>CDT_LIBRARY</code> - this entry describes a library
* <li><code>CDT_PROJECT</code> - this entry describes another project
* <li><code>CDT_VARIABLE</code> - this entry describes a project or library
* indirectly via a variable in the first segment of the path
* <li><code>CDT_INCLUDE</code> - this entry describes a include path
*/
int getEntryKind();
/**
* Returns the set of patterns used to exclude resources associated with
* this source entry.
* <p>
* Exclusion patterns allow specified portions of the resource tree rooted
* at this source entry's path to be filtered out. If no exclusion patterns
* are specified, this source entry includes all relevent files. Each path
* specified must be a relative path, and will be interpreted relative
* to this source entry's path. File patterns are case-sensitive. A file
* matched by one or more of these patterns is excluded from the
* corresponding ICContainer.
* </p>
* <p>
* The pattern mechanism is similar to Ant's. Each pattern is represented as
* a relative path. The path segments can be regular file or folder names or simple patterns
* involving standard wildcard characters.
* </p>
* <p>
* '*' matches 0 or more characters within a segment. So
* <code>*.c</code> matches <code>.c</code>, <code>a.c</code>
* and <code>Foo.c</code>, but not <code>Foo.properties</code>
* (does not end with <code>.c</code>).
* </p>
* <p>
* '?' matches 1 character within a segment. So <code>?.c</code>
* matches <code>a.c</code>, <code>A.c</code>,
* but not <code>.c</code> or <code>xyz.c</code> (neither have
* just one character before <code>.c</code>).
* </p>
* <p>
* Combinations of *'s and ?'s are allowed.
* </p>
* <p>
* The special pattern '**' matches zero or more segments. A path
* like <code>tests/</code> that ends in a trailing separator is interpreted
* as <code>tests/&#42;&#42;</code>, and would match all files under the
* the folder named <code>tests</code>.
* </p>
* <p>
* Examples:
* <ul>
* <li>
* <code>tests/&#42;&#42;</code> (or simply <code>tests/</code>)
* matches all files under a root folder
* named <code>tests</code>. This includes <code>tests/Foo.c</code>
* and <code>tests/example/Foo.c</code>, but not
* <code>com/example/tests/Foo.c</code> (not under a root folder named
* <code>tests</code>).
* </li>
* <li>
* <code>tests/&#42;</code> matches all files directly below a root
* folder named <code>tests</code>. This includes <code>tests/Foo.c</code>
* and <code>tests/FooHelp.c</code>
* but not <code>tests/example/Foo.c</code> (not directly under
* a folder named <code>tests</code>) or
* <code>example/Foo.c</code> (not under a folder named <code>tests</code>).
* </li>
* <li>
* <code>&#42;&#42;/tests/&#42;&#42;</code> matches all files under any
* folder named <code>tests</code>. This includes <code>tests/Foo.c</code>,
* <code>examples/tests/Foo.c</code>, and
* <code>examples/tests/unit/Foo.c</code>, but not
* <code>example/Foo.c</code> (not under a folder named
* <code>tests</code>).
* </li>
* </ul>
* </p>
*
* @return the possibly empty list of resource exclusion patterns
* associated with this source entry, and <code>null</code> for other
* kinds of classpath entries
* @since 2.1
*/
IPath[] getExclusionPatterns();
/**
* Returns the path of this CPathEntry entry.
*
* The meaning of the path of a classpath entry depends on its entry kind:<ul>
* <li>Source code in the current project (<code>CDT_SOURCE</code>) -
* The path associated with this entry is the absolute path to the root folder. </li>
* <li>A binary library in the current project (<code>CDT_LIBRARY</code>) - the path
* associated with this entry is the absolute path to the library, and
* in case it refers to an external lib, then there is no associated resource in
* the workbench.
* <li>A required project (<code>CPE_PROJECT</code>) - the path of the entry denotes the
* path to the corresponding project resource.</li>
* <li>A variable entry (<code>CPE_VARIABLE</code>) - the first segment of the path
* is the name of a CPath variable. If this CPath variable
* is bound to the path <it>P</it>, the path of the corresponding classpath entry
* is computed by appending to <it>P</it> the segments of the returned
* path without the variable.</li>
* <li>Include path in the current project (<code>CDT_INCLUDE</code>) -
* The path associated with this entry is the absolute path to the include folder. </li>
* </ul>
*
* @return the path of this classpath entry
*/
IPath getPath();
/**
* Returns the path to the source archive or folder associated with this
* C path entry, or <code>null</code> if this C path entry has no
* source attachment.
* <p>
* Only library and variable C path entries may have source attachments.
* For library C path entries, the result path (if present) locates a source
* archive or folder. This archive or folder can be located in a project of the
* workspace or outside thr workspace. For variable c path entries, the
* result path (if present) has an analogous form and meaning as the
* variable path, namely the first segment is the name of a c path variable.
* </p>
*
* @return the path to the source archive or folder, or <code>null</code> if none
*/
IPath getSourceAttachmentPath();
/**
* Returns the path within the source archive or folder where source
* are located. An empty path indicates that packages are located at
* the root of the source archive or folder. Returns a non-<code>null</code> value
* if and only if <code>getSourceAttachmentPath</code> returns
* a non-<code>null</code> value.
*
* @return the path within the source archive or folder, or <code>null</code> if
* not applicable
*/
IPath getSourceAttachmentRootPath();
/**
* Returns the path to map the source paths with to the source achive or folder
* An empty path indicates that the is a one-to-one mapping of source paths to the
* source achive or folder path. Returns a non-<code>null</code> value
* if and only if <code>getSourceAttachmentPath</code> returns
* a non-<code>null</code> value.
*
* @return the path mapping within the source archive or folder, or <code>null</code> if
* not applicable
*/
IPath getSourceAttachmentPrefixMapping();
}

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import java.io.ByteArrayInputStream;
@ -10,6 +16,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
@ -27,6 +34,7 @@ import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.core.ICExtension;
import org.eclipse.cdt.core.ICExtensionReference;
import org.eclipse.cdt.core.ICOwnerInfo;
import org.eclipse.cdt.core.ICPathEntry;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@ -37,6 +45,7 @@ import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IPluginRegistry;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.w3c.dom.Document;
@ -46,15 +55,18 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class CDescriptor implements ICDescriptor {
private ICPathEntry[] fPathEntries = new ICPathEntry[0];
private COwner fOwner;
private IProject fProject;
private HashMap extMap = new HashMap(4);
private HashMap extInfoMap = new HashMap(4);
final static String DESCRIPTION_FILE_NAME = ".cdtproject";
private final static String PROJECT_DESCRIPTION = "cdtproject";
private final static String PROJECT_EXTENSION = "extension";
private final static String PROJECT_EXTENSION_ATTRIBUTE = "attribute";
static final String DESCRIPTION_FILE_NAME = ".cdtproject";
private static final char[][] NO_CHAR_CHAR = new char[0][];
private static final String PROJECT_DESCRIPTION = "cdtproject";
private static final String PROJECT_EXTENSION = "extension";
private static final String PROJECT_EXTENSION_ATTRIBUTE = "attribute";
private static final String PATH_ENTRY = "cpathentry";
private boolean fDirty;
private boolean autoSave;
@ -71,8 +83,9 @@ public class CDescriptor implements ICDescriptor {
if (descriptionPath.toFile().exists()) {
IStatus status;
readCDTProject(descriptionPath);
if (fOwner.getID().equals(id)) {
String ownerID = readCDTProject(descriptionPath);
if (ownerID.equals(id)) {
fOwner = new COwner(ownerID);
status =
new Status(
IStatus.WARNING,
@ -108,7 +121,7 @@ public class CDescriptor implements ICDescriptor {
IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, "CDTProject file not found", (Throwable) null);
throw new CoreException(status);
}
readCDTProject(descriptionPath);
fOwner = new COwner(readCDTProject(descriptionPath));
}
protected CDescriptor(IProject project, COwner owner) throws CoreException {
@ -125,19 +138,25 @@ public class CDescriptor implements ICDescriptor {
IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, "CDTProject file not found", (Throwable) null);
throw new CoreException(status);
}
readCDTProject(descriptionPath);
fOwner = owner;
readProjectExtensions(getCDTProjectNode(descriptionPath));
setDirty();
}
protected Node getCDTProjectNode(IPath descriptionPath) throws CoreException {
protected COwner getOwner() {
return fOwner;
}
private String readCDTProject(IPath descriptionPath) throws CoreException {
FileInputStream file = null;
try {
file = new FileInputStream(descriptionPath.toFile());
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(file);
Node node = document.getFirstChild();
if (node.getNodeName().equals(PROJECT_DESCRIPTION))
return node;
if (node.getNodeName().equals(PROJECT_DESCRIPTION)) {
return readProjectDescription(node);
}
IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, -1, "Missing cdtproject element", null);
throw new CoreException(status);
} catch (Exception e) {
@ -153,12 +172,7 @@ public class CDescriptor implements ICDescriptor {
}
}
protected void readCDTProject(IPath projectLocation) throws CoreException {
Node node = getCDTProjectNode(projectLocation);
fOwner = readProjectDescription(node);
}
protected IPath getProjectDefaultLocation(IProject project) {
private IPath getProjectDefaultLocation(IProject project) {
return Platform.getLocation().append(project.getFullPath());
}
@ -245,48 +259,6 @@ public class CDescriptor implements ICDescriptor {
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 COwner readProjectDescription(Node node) throws CoreException {
COwner owner = null;
NamedNodeMap attrib = node.getAttributes();
owner = new COwner(attrib.getNamedItem("id").getNodeValue());
readProjectExtensions(node);
return owner;
}
private void readProjectExtensions(Node node) throws CoreException {
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()) {
@ -310,6 +282,14 @@ public class CDescriptor implements ICDescriptor {
fDirty = false;
}
public boolean isAutoSave() {
return autoSave;
}
public void setAutoSave(boolean autoSave) {
this.autoSave = autoSave;
}
protected void setDirty() throws CoreException {
fDirty = true;
if (isAutoSave())
@ -325,19 +305,153 @@ public class CDescriptor implements ICDescriptor {
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 serializer =
SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(new OutputStreamWriter(s, "UTF8"), format);
serializer.asDOMSerializer().serialize(doc);
return s.toString("UTF8"); //$NON-NLS-1$
}
private String readProjectDescription(Node node) throws CoreException {
Node childNode;
ArrayList pathEntries = new ArrayList();
String ownerID = node.getAttributes().getNamedItem("id").getNodeValue();
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
childNode = list.item(i);
if ( childNode.getNodeType() == Node.ELEMENT_NODE ) {
if (childNode.getNodeName().equals(PROJECT_EXTENSION)) {
decodeProjectExtension((Element)node);
} else if (childNode.getNodeName().equals(PATH_ENTRY)) {
ICPathEntry entry = decodePathEntry((Element)node);
if (entry != null) {
pathEntries.add(entry);
}
}
}
}
return ownerID;
}
private void decodeProjectExtension(Element element) throws CoreException {
ICExtensionReference ext = create(element.getAttribute("point"), element.getAttribute("id"));
NodeList extAttrib = element.getChildNodes();
for (int j = 0; j < extAttrib.getLength(); j++) {
if (extAttrib.item(j).getNodeName().equals(PROJECT_EXTENSION_ATTRIBUTE)) {
NamedNodeMap attrib = extAttrib.item(j).getAttributes();
ext.setExtensionData(attrib.getNamedItem("key").getNodeValue(), attrib.getNamedItem("value").getNodeValue());
}
}
}
private ICPathEntry decodePathEntry(Element element) throws CoreException {
IPath projectPath = fProject.getProject().getFullPath();
String kindAttr = element.getAttribute("kind"); //$NON-NLS-1$
String pathAttr = element.getAttribute("path"); //$NON-NLS-1$
// ensure path is absolute
IPath path = new Path(pathAttr);
int kind = CPathEntry.kindFromString(kindAttr);
if (kind != ICPathEntry.CDT_VARIABLE && !path.isAbsolute()) {
path = projectPath.append(path);
}
// source attachment info (optional)
IPath sourceAttachmentPath = element.hasAttribute("sourcepath") ? new Path(element.getAttribute("sourcepath")) : null;
IPath sourceAttachmentRootPath = element.hasAttribute("rootpath") ? new Path(element.getAttribute("rootpath")) : null;
IPath sourceAttachmentPrefixMapping =
element.hasAttribute("prefixmapping") ? new Path(element.getAttribute("prefixmapping")) : null;
// exclusion patterns (optional)
String exclusion = element.getAttribute("excluding"); //$NON-NLS-1$
IPath[] exclusionPatterns = CPathEntry.NO_EXCLUSION_PATTERNS;
if (!exclusion.equals("")) { //$NON-NLS-1$
char[][] patterns = splitOn('|', exclusion.toCharArray());
int patternCount;
if ((patternCount = patterns.length) > 0) {
exclusionPatterns = new IPath[patternCount];
for (int j = 0; j < patterns.length; j++) {
exclusionPatterns[j] = new Path(new String(patterns[j]));
}
}
}
// recreate the CP entry
switch (kind) {
case ICPathEntry.CDT_PROJECT :
return CCorePlugin.newProjectEntry(path);
case ICPathEntry.CDT_LIBRARY :
return CCorePlugin.newLibraryEntry(
path,
sourceAttachmentPath,
sourceAttachmentRootPath,
sourceAttachmentPrefixMapping);
case ICPathEntry.CDT_SOURCE :
// must be an entry in this project or specify another project
String projSegment = path.segment(0);
if (projSegment != null && projSegment.equals(fProject.getName())) { // this project
return CCorePlugin.newSourceEntry(path, exclusionPatterns);
} else { // another project
return CCorePlugin.newProjectEntry(path);
}
case ICPathEntry.CDT_VARIABLE :
return CCorePlugin.newVariableEntry(path, sourceAttachmentPath, sourceAttachmentRootPath);
case ICPathEntry.CDT_INCLUDE :
return CCorePlugin.newIncludeEntry(path, exclusionPatterns);
default :
{
IStatus status =
new Status(
IStatus.ERROR,
CCorePlugin.PLUGIN_ID,
-1,
"CPathEntry: unknown kind (" + kindAttr + ")",
(Throwable) null);
throw new CoreException(status);
}
}
}
private char[][] splitOn(char divider, char[] array) {
int length = array == null ? 0 : array.length;
if (length == 0)
return NO_CHAR_CHAR;
int wordCount = 1;
for (int i = 0; i < length; i++)
if (array[i] == divider)
wordCount++;
char[][] split = new char[wordCount][];
int last = 0, currentWord = 0;
for (int i = 0; i < length; i++) {
if (array[i] == divider) {
split[currentWord] = new char[i - last];
System.arraycopy(array, last, split[currentWord++], 0, i - last);
last = i + 1;
}
}
split[currentWord] = new char[length - last];
System.arraycopy(array, last, split[currentWord], 0, length - last);
return split;
}
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$
encodeProjectExtensions(doc, configRootElement);
encodePathEntries(doc, configRootElement);
return serializeDocument(doc);
}
private void encodeProjectExtensions(Document doc, Element configRootElement) {
Element element;
Iterator extIterator = extMap.values().iterator();
while (extIterator.hasNext()) {
CExtensionReference extension[] = (CExtensionReference[]) extIterator.next();
@ -358,15 +472,58 @@ public class CDescriptor implements ICDescriptor {
}
}
}
return serializeDocument(doc);
}
public boolean isAutoSave() {
return autoSave;
private void encodePathEntries(Document doc, Element configRootElement) {
Element element;
IPath projectPath = fProject.getProject().getFullPath();
for (int i = 0; i < fPathEntries.length; i++) {
configRootElement.appendChild(element = doc.createElement(PATH_ENTRY));
element.setAttribute("kind", CPathEntry.kindToString(fPathEntries[i].getEntryKind())); //$NON-NLS-1$
IPath xmlPath = fPathEntries[i].getPath();
if (fPathEntries[i].getEntryKind() != ICPathEntry.CDT_VARIABLE) {
// translate to project relative from absolute (unless a device path)
if (xmlPath.isAbsolute()) {
if (projectPath != null && projectPath.isPrefixOf(xmlPath)) {
if (xmlPath.segment(0).equals(projectPath.segment(0))) {
xmlPath = xmlPath.removeFirstSegments(1);
xmlPath = xmlPath.makeRelative();
} else {
xmlPath = xmlPath.makeAbsolute();
}
}
}
}
element.setAttribute("path", xmlPath.toString()); //$NON-NLS-1$
if (fPathEntries[i].getSourceAttachmentPath() != null) {
element.setAttribute("sourcepath", fPathEntries[i].getSourceAttachmentPath().toString()); //$NON-NLS-1$
}
if (fPathEntries[i].getSourceAttachmentRootPath() != null) {
element.setAttribute("rootpath", fPathEntries[i].getSourceAttachmentRootPath().toString()); //$NON-NLS-1$
}
if (fPathEntries[i].getSourceAttachmentPrefixMapping() != null) {
element.setAttribute("prefixmapping", fPathEntries[i].getSourceAttachmentPrefixMapping().toString()); //$NON-NLS-1$
}
IPath[] exclusionPatterns = fPathEntries[i].getExclusionPatterns();
if (exclusionPatterns.length > 0) {
StringBuffer excludeRule = new StringBuffer(10);
for (int j = 0, max = exclusionPatterns.length; j < max; j++) {
if (j > 0)
excludeRule.append('|');
excludeRule.append(exclusionPatterns[j]);
}
element.setAttribute("excluding", excludeRule.toString()); //$NON-NLS-1$
}
}
}
public void setAutoSave(boolean autoSave) {
this.autoSave = autoSave;
public void setPathEntries(ICPathEntry[] entries) throws CoreException {
fPathEntries = entries;
setDirty();
}
public ICPathEntry[] getPathEntries() {
return fPathEntries;
}
protected ICExtension createExtensions(ICExtensionReference ext) throws CoreException {

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import java.util.HashMap;
@ -116,8 +122,7 @@ public class CDescriptorManager implements IResourceChangeListener {
else
throw e;
}
COwner cowner = new COwner(id);
cowner.configure(project, cproject);
cproject.getOwner().configure(project, cproject);
cproject.saveInfo();
cproject.setAutoSave(true);
fDescriptorMap.put(project, cproject);
@ -128,34 +133,10 @@ public class CDescriptorManager implements IResourceChangeListener {
if ( fDescriptorMap == null ) {
fDescriptorMap = new HashMap();
}
COwner cowner = new COwner(id);
cproject = new CDescriptor(project, cowner);
cowner.configure(project, cproject);
cproject = new CDescriptor(project, new COwner(id));
cproject.getOwner().configure(project, cproject);
cproject.saveInfo();
cproject.setAutoSave(true);
fDescriptorMap.put(project, cproject);
}
/**
* Must remove an existing .cdtproject file before we generate a new one when converting
*/
// public static void removeExistingCdtProjectFile(IProject project){
// IFile file = project.getFile(CDescriptor.DESCRIPTION_FILE_NAME);
// IProgressMonitor monitor = new NullProgressMonitor();
//
// // update the resource content
// if ((file != null) && file.exists()) {
// try{
// file.delete(true, monitor);
// // remove reference from the fDescriptorMap
// if (fDescriptorMap != null){
// fDescriptorMap.remove(project);
// }
//
// project.refreshLocal(1, monitor);
// }catch(CoreException ce){
// CCorePlugin.log(ce);
// }
// }
// }
}

View file

@ -1,7 +1,14 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/package org.eclipse.cdt.internal.core;
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import java.util.HashMap;

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import org.eclipse.cdt.core.ICExtension;

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import org.eclipse.cdt.core.CCorePlugin;

View file

@ -0,0 +1,263 @@
/**********************************************************************
* Created on 25-Mar-2003
*
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import org.eclipse.cdt.core.ICPathEntry;
import org.eclipse.core.runtime.IPath;
public class CPathEntry implements ICPathEntry {
public int entryKind;
public IPath path;
public IPath[] exclusionPatterns;
public IPath sourceAttachmentPath;
public IPath sourceAttachmentRootPath;
public IPath sourceAttachmentPrefixMapping;
private char[][] fullCharExclusionPatterns;
private final static char[][] UNINIT_PATTERNS = new char[][] { "Non-initialized yet".toCharArray()}; //$NON-NLS-1$
/**
* Default exclusion pattern set
*/
public final static IPath[] NO_EXCLUSION_PATTERNS = {
};
public CPathEntry(
int entryKind,
IPath path,
IPath[] exclusionPatterns,
IPath sourceAttachmentPath,
IPath sourceAttachmentRootPath,
IPath sourceAttachmentPrefixMapping) {
this.entryKind = entryKind;
this.path = path;
this.exclusionPatterns = exclusionPatterns;
if (exclusionPatterns.length > 0) {
this.fullCharExclusionPatterns = UNINIT_PATTERNS;
}
this.sourceAttachmentPath = sourceAttachmentPath;
this.sourceAttachmentRootPath = sourceAttachmentRootPath;
this.sourceAttachmentPrefixMapping = sourceAttachmentPrefixMapping;
}
/*
* Returns a char based representation of the exclusions patterns full path.
*/
public char[][] fullExclusionPatternChars() {
if (this.fullCharExclusionPatterns == UNINIT_PATTERNS) {
int length = this.exclusionPatterns.length;
this.fullCharExclusionPatterns = new char[length][];
IPath prefixPath = path.removeTrailingSeparator();
for (int i = 0; i < length; i++) {
this.fullCharExclusionPatterns[i] = prefixPath.append(this.exclusionPatterns[i]).toString().toCharArray();
}
}
return this.fullCharExclusionPatterns;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICPathEntry#getEntryKind()
*/
public int getEntryKind() {
return this.entryKind;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICPathEntry#getExclusionPatterns()
*/
public IPath[] getExclusionPatterns() {
return this.exclusionPatterns;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICPathEntry#getPath()
*/
public IPath getPath() {
return this.path;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICPathEntry#getSourceAttachmentPath()
*/
public IPath getSourceAttachmentPath() {
return this.sourceAttachmentPath;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICPathEntry#getSourceAttachmentRootPath()
*/
public IPath getSourceAttachmentRootPath() {
return this.sourceAttachmentRootPath;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICPathEntry#getSourceAttachmentPrefixMapping()
*/
public IPath getSourceAttachmentPrefixMapping() {
return this.sourceAttachmentPrefixMapping;
}
/**
* Returns true if the given object is a classpath entry
* with equivalent attributes.
*/
public boolean equals(Object object) {
if (this == object)
return true;
if (object instanceof ICPathEntry) {
ICPathEntry otherEntry = (ICPathEntry) object;
if (this.entryKind != otherEntry.getEntryKind())
return false;
if (!this.path.equals(otherEntry.getPath()))
return false;
IPath otherPath = otherEntry.getSourceAttachmentPath();
if (this.sourceAttachmentPath == null) {
if (otherPath != null)
return false;
} else {
if (!this.sourceAttachmentPath.equals(otherPath))
return false;
}
otherPath = otherEntry.getSourceAttachmentRootPath();
if (this.sourceAttachmentRootPath == null) {
if (otherPath != null)
return false;
} else {
if (!this.sourceAttachmentRootPath.equals(otherPath))
return false;
}
IPath[] otherExcludes = otherEntry.getExclusionPatterns();
if (this.exclusionPatterns != otherExcludes) {
int excludeLength = this.exclusionPatterns.length;
if (otherExcludes.length != excludeLength)
return false;
for (int i = 0; i < excludeLength; i++) {
// compare toStrings instead of IPaths
// since IPath.equals is specified to ignore trailing separators
if (!this.exclusionPatterns[i].toString().equals(otherExcludes[i].toString()))
return false;
}
}
return true;
} else {
return false;
}
}
/**
* Returns the hash code for this classpath entry
*/
public int hashCode() {
return this.path.hashCode();
}
/**
* Returns the kind of a <code>PackageFragmentRoot</code> from its <code>String</code> form.
*/
static int kindFromString(String kindStr) {
if (kindStr.equalsIgnoreCase("prj")) //$NON-NLS-1$
return ICPathEntry.CDT_PROJECT;
if (kindStr.equalsIgnoreCase("var")) //$NON-NLS-1$
return ICPathEntry.CDT_VARIABLE;
if (kindStr.equalsIgnoreCase("src")) //$NON-NLS-1$
return ICPathEntry.CDT_SOURCE;
if (kindStr.equalsIgnoreCase("lib")) //$NON-NLS-1$
return ICPathEntry.CDT_LIBRARY;
if (kindStr.equalsIgnoreCase("inc")) //$NON-NLS-1$
return ICPathEntry.CDT_INCLUDE;
return -1;
}
/**
* Returns a <code>String</code> for the kind of a class path entry.
*/
static String kindToString(int kind) {
switch (kind) {
case ICPathEntry.CDT_PROJECT :
return "prj";
case ICPathEntry.CDT_SOURCE :
return "src"; //$NON-NLS-1$
case ICPathEntry.CDT_LIBRARY :
return "lib"; //$NON-NLS-1$
case ICPathEntry.CDT_VARIABLE :
return "var"; //$NON-NLS-1$
case ICPathEntry.CDT_INCLUDE :
return "inc"; //$NON-NLS-1$
default :
return "unknown"; //$NON-NLS-1$
}
}
/**
* Returns a printable representation of this classpath entry.
*/
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(getPath().toString());
buffer.append('[');
switch (getEntryKind()) {
case ICPathEntry.CDT_LIBRARY :
buffer.append("CPE_LIBRARY"); //$NON-NLS-1$
break;
case ICPathEntry.CDT_PROJECT :
buffer.append("CPE_PROJECT"); //$NON-NLS-1$
break;
case ICPathEntry.CDT_SOURCE :
buffer.append("CPE_SOURCE"); //$NON-NLS-1$
break;
case ICPathEntry.CDT_VARIABLE :
buffer.append("CPE_VARIABLE"); //$NON-NLS-1$
break;
case ICPathEntry.CDT_INCLUDE :
buffer.append("CPE_INCLUDE"); //$NON-NLS-1$
break;
}
buffer.append(']');
if (getSourceAttachmentPath() != null) {
buffer.append("[sourcePath:"); //$NON-NLS-1$
buffer.append(getSourceAttachmentPath());
buffer.append(']');
}
if (getSourceAttachmentRootPath() != null) {
buffer.append("[rootPath:"); //$NON-NLS-1$
buffer.append(getSourceAttachmentRootPath());
buffer.append(']');
}
IPath[] patterns = getExclusionPatterns();
int length;
if ((length = patterns.length) > 0) {
buffer.append("[excluding:"); //$NON-NLS-1$
for (int i = 0; i < length; i++) {
buffer.append(patterns[i]);
if (i != length - 1) {
buffer.append('|');
}
}
buffer.append(']');
}
return buffer.toString();
}
}

View file

@ -1,7 +1,13 @@
/*
* (c) Copyright QNX Software System Ltd. 2002.
* All Rights Reserved.
*/
/**********************************************************************
* Copyright (c) 2002,2003 QNX Software Systems Ltd. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core;
import org.eclipse.cdt.core.ICExtensionReference;