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

Library source path support fo the core ICLibraryFile entry

This commit is contained in:
Mikhail Sennikovsky 2007-04-28 09:35:14 +00:00
parent 32fcdf2688
commit a69ac5f57e
5 changed files with 176 additions and 6 deletions

View file

@ -10,22 +10,65 @@
*******************************************************************************/
package org.eclipse.cdt.core.settings.model;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
public final class CLibraryFileEntry extends ACPathEntry implements
ICLibraryFileEntry {
private IPath fSourceAttachmentPath;
private IPath fSourceAttachmentRootPath;
private IPath fSourceAttachmentPrefixMapping;
public CLibraryFileEntry(String value, int flags) {
super(value, flags);
this(value, flags, null, null, null);
}
public CLibraryFileEntry(IPath location, int flags) {
super(location, flags);
this(location, flags, null, null, null);
}
public CLibraryFileEntry(IFile rc, int flags) {
this(rc, flags, null, null, null);
}
public CLibraryFileEntry(String value,
int flags,
IPath sourceAttachmentPath,
IPath sourceAttachmentRootPath,
IPath sourceAttachmentPrefixMapping) {
super(value, flags);
setSourceAttachmentSettings(sourceAttachmentPath, sourceAttachmentRootPath, sourceAttachmentPrefixMapping);
}
public CLibraryFileEntry(IPath location,
int flags,
IPath sourceAttachmentPath,
IPath sourceAttachmentRootPath,
IPath sourceAttachmentPrefixMapping) {
super(location, flags);
setSourceAttachmentSettings(sourceAttachmentPath, sourceAttachmentRootPath, sourceAttachmentPrefixMapping);
}
public CLibraryFileEntry(IFile rc,
int flags,
IPath sourceAttachmentPath,
IPath sourceAttachmentRootPath,
IPath sourceAttachmentPrefixMapping) {
super(rc, flags);
setSourceAttachmentSettings(sourceAttachmentPath, sourceAttachmentRootPath, sourceAttachmentPrefixMapping);
}
private void setSourceAttachmentSettings(IPath sourceAttachmentPath,
IPath sourceAttachmentRootPath,
IPath sourceAttachmentPrefixMapping){
if(sourceAttachmentPath == null)
return;
fSourceAttachmentPath = sourceAttachmentPath;
fSourceAttachmentRootPath = sourceAttachmentRootPath != null ? sourceAttachmentRootPath : Path.EMPTY;
fSourceAttachmentPrefixMapping = sourceAttachmentPrefixMapping != null ? sourceAttachmentPrefixMapping : Path.EMPTY;
}
public final int getKind() {
@ -36,4 +79,45 @@ public final class CLibraryFileEntry extends ACPathEntry implements
return true;
}
public IPath getSourceAttachmentPath() {
return fSourceAttachmentPath;
}
public IPath getSourceAttachmentPrefixMapping() {
return fSourceAttachmentPrefixMapping;
}
public IPath getSourceAttachmentRootPath() {
return fSourceAttachmentRootPath;
}
public boolean equals(Object other) {
if(other == this)
return true;
if(!super.equals(other))
return false;
return sourceAttachmentSettingsEqual((CLibraryFileEntry)other);
}
public boolean equalsByContents(ICSettingEntry entry) {
if(entry == this)
return true;
if(!super.equalsByContents(entry))
return false;
return sourceAttachmentSettingsEqual((CLibraryFileEntry)entry);
}
private boolean sourceAttachmentSettingsEqual(CLibraryFileEntry otherEntry){
if(!CDataUtil.objectsEqual(fSourceAttachmentPath, otherEntry.fSourceAttachmentPath))
return false;
if(!CDataUtil.objectsEqual(fSourceAttachmentRootPath, otherEntry.fSourceAttachmentRootPath))
return false;
if(!CDataUtil.objectsEqual(fSourceAttachmentPrefixMapping, otherEntry.fSourceAttachmentPrefixMapping))
return false;
return true;
}
}

View file

@ -10,6 +10,49 @@
*******************************************************************************/
package org.eclipse.cdt.core.settings.model;
import org.eclipse.core.runtime.IPath;
public interface ICLibraryFileEntry extends ICLanguageSettingPathEntry {
/**
* 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

@ -41,6 +41,7 @@ import org.eclipse.cdt.core.settings.model.CSourceEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICExclusionPatternPathEntry;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICLibraryFileEntry;
import org.eclipse.cdt.core.settings.model.ICOutputEntry;
import org.eclipse.cdt.core.settings.model.ICSettingBase;
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
@ -239,7 +240,13 @@ public class CDataUtil {
entry = new CLibraryPathEntry(entry.getName(), flags);
break;
case ICLanguageSettingEntry.LIBRARY_FILE:
entry = new CLibraryFileEntry(entry.getName(), flags);
ICLibraryFileEntry libFile = (ICLibraryFileEntry)entry;
entry = new CLibraryFileEntry(entry.getName(),
flags,
libFile.getSourceAttachmentPath(),
libFile.getSourceAttachmentRootPath(),
libFile.getSourceAttachmentPrefixMapping()
);
break;
}
return entry;

View file

@ -24,6 +24,7 @@ import org.eclipse.cdt.core.settings.model.COutputEntry;
import org.eclipse.cdt.core.settings.model.CSourceEntry;
import org.eclipse.cdt.core.settings.model.ICExclusionPatternPathEntry;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICLibraryFileEntry;
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.core.runtime.IPath;
@ -36,6 +37,9 @@ public class LanguageSettingEntriesSerializer {
public static final String ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$
public static final String ATTRIBUTE_FLAGS = "flags"; //$NON-NLS-1$
public static final String ATTRIBUTE_EXCLUDING = "excluding"; //$NON-NLS-1$
public static final String ATTRIBUTE_SOURCE_ATTACHMENT_PATH = "srcPath"; //$NON-NLS-1$
public static final String ATTRIBUTE_SOURCE_ATTACHMENT_ROOT_PATH = "srcRootPath"; //$NON-NLS-1$
public static final String ATTRIBUTE_SOURCE_ATTACHMENT_PREFIX_MAPPING = "srcPrefixMapping"; //$NON-NLS-1$
// public static final String ATTRIBUTE_FULL_PATH = "fullPath"; //$NON-NLS-1$
// public static final String ATTRIBUTE_LOCATION = "location"; //$NON-NLS-1$
@ -111,7 +115,10 @@ public class LanguageSettingEntriesSerializer {
case ICLanguageSettingEntry.LIBRARY_PATH:
return new CLibraryPathEntry(name, flags);
case ICLanguageSettingEntry.LIBRARY_FILE:
return new CLibraryFileEntry(name, flags);
IPath srcPath = loadPath(el, ATTRIBUTE_SOURCE_ATTACHMENT_PATH);
IPath srcRootPath = loadPath(el, ATTRIBUTE_SOURCE_ATTACHMENT_ROOT_PATH);
IPath srcPrefixMapping = loadPath(el, ATTRIBUTE_SOURCE_ATTACHMENT_PREFIX_MAPPING);
return new CLibraryFileEntry(name, flags, srcPath, srcRootPath, srcPrefixMapping);
case ICLanguageSettingEntry.OUTPUT_PATH:
return new COutputEntry(name, loadExclusions(el), flags);
case ICLanguageSettingEntry.SOURCE_PATH:
@ -120,6 +127,18 @@ public class LanguageSettingEntriesSerializer {
return null;
}
private static IPath loadPath(ICStorageElement el, String attr){
String value = el.getAttribute(attr);
if(value != null)
return new Path(value);
return null;
}
private static void storePath(ICStorageElement el, String attr, IPath path){
if(path != null)
el.setAttribute(attr, path.toString());
}
private static IPath[] loadExclusions(ICStorageElement el){
String attr = el.getAttribute(ATTRIBUTE_EXCLUDING);
if(attr != null){
@ -173,6 +192,19 @@ public class LanguageSettingEntriesSerializer {
IPath paths[] = ((ICExclusionPatternPathEntry)entry).getExclusionPatterns();
storeExclusions(element, paths);
break;
case ICLanguageSettingEntry.LIBRARY_FILE:
ICLibraryFileEntry libFile = (ICLibraryFileEntry)entry;
IPath path = libFile.getSourceAttachmentPath();
if(path != null)
element.setAttribute(ATTRIBUTE_SOURCE_ATTACHMENT_PATH, path.toString());
path = libFile.getSourceAttachmentRootPath();
if(path != null)
element.setAttribute(ATTRIBUTE_SOURCE_ATTACHMENT_ROOT_PATH, path.toString());
path = libFile.getSourceAttachmentPrefixMapping();
if(path != null)
element.setAttribute(ATTRIBUTE_SOURCE_ATTACHMENT_PREFIX_MAPPING, path.toString());
}
}

View file

@ -409,6 +409,7 @@ public class PathEntryTranslator {
switch(entry.fEntry.getEntryKind()){
case IPathEntry.CDT_LIBRARY:{
ILibraryEntry libEntry = (ILibraryEntry)entry.fEntry;
IPath path = value.getFullPath();
if(path != null){
flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH;
@ -417,7 +418,10 @@ public class PathEntryTranslator {
}
if(path != null){
return new CLibraryFileEntry(value.getName(), flags);
return new CLibraryFileEntry(value.getName(), flags,
libEntry.getSourceAttachmentPath(),
libEntry.getSourceAttachmentRootPath(),
libEntry.getSourceAttachmentPrefixMapping());
}
break;
}