mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 18:26:01 +02:00
new ICPathEntry stuff
This commit is contained in:
parent
587449004b
commit
a48cbb43a0
17 changed files with 920 additions and 222 deletions
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,18 +381,13 @@ 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) {
|
||||
}
|
||||
}
|
||||
|
@ -456,4 +407,56 @@ public class CCorePlugin extends Plugin {
|
|||
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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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/**</code>, and would match all files under the
|
||||
* the folder named <code>tests</code>.
|
||||
* </p>
|
||||
* <p>
|
||||
* Examples:
|
||||
* <ul>
|
||||
* <li>
|
||||
* <code>tests/**</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/*</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>**/tests/**</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();
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue