mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Patch for Ed Swartz (Nokia) bug 158190. Improve handling of case insensitive paths on Windows.
This commit is contained in:
parent
5cce583c8c
commit
1946cf2dee
6 changed files with 35 additions and 11 deletions
|
@ -8,11 +8,13 @@
|
|||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Markus Schorn (Wind River Systems)
|
||||
* Ed Swartz (Nokia)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.model;
|
||||
|
||||
import org.eclipse.cdt.core.model.IIncludeEntry;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.utils.PathUtil;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
@ -25,7 +27,7 @@ public class IncludeEntry extends APathEntry implements IIncludeEntry {
|
|||
public IncludeEntry(IPath resourcePath, IPath basePath, IPath baseRef, IPath includePath, boolean isSystemInclude,
|
||||
IPath[] exclusionPatterns, boolean isExported) {
|
||||
super(IPathEntry.CDT_INCLUDE, basePath, baseRef, resourcePath, exclusionPatterns, isExported);
|
||||
this.includePath = (includePath == null) ? Path.EMPTY : includePath;
|
||||
this.includePath = (includePath == null) ? Path.EMPTY : PathUtil.getCanonicalPath(includePath);
|
||||
this.isSystemInclude = isSystemInclude;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,12 +7,14 @@
|
|||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Ed Swartz (Nokia)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.model;
|
||||
|
||||
import org.eclipse.cdt.core.model.IIncludeFileEntry;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.utils.PathUtil;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
@ -25,7 +27,7 @@ public class IncludeFileEntry extends APathEntry implements IIncludeFileEntry {
|
|||
public IncludeFileEntry(IPath resourcePath, IPath basePath, IPath baseRef, IPath includeFilePath,
|
||||
IPath[] exclusionPatterns, boolean isExported) {
|
||||
super(IPathEntry.CDT_INCLUDE_FILE, basePath, baseRef, resourcePath, exclusionPatterns, isExported);
|
||||
this.includeFilePath = (includeFilePath == null) ? Path.EMPTY : includeFilePath;
|
||||
this.includeFilePath = (includeFilePath == null) ? Path.EMPTY : PathUtil.getCanonicalPath(includeFilePath);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Ed Swartz (Nokia)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.model;
|
||||
|
@ -22,6 +23,7 @@ import org.eclipse.cdt.core.model.ICElement;
|
|||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IIncludeEntry;
|
||||
import org.eclipse.cdt.core.model.IIncludeReference;
|
||||
import org.eclipse.cdt.utils.PathUtil;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
@ -47,7 +49,7 @@ public class IncludeReference extends Openable implements IIncludeReference {
|
|||
public IncludeReference(ICElement celement, IIncludeEntry entry, IPath path) {
|
||||
super(celement, null, path.toString(), ICElement.C_VCONTAINER);
|
||||
fIncludeEntry = entry;
|
||||
fPath = path;
|
||||
fPath = PathUtil.getCanonicalPath(path);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -7,12 +7,14 @@
|
|||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Ed Swartz (Nokia)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.model;
|
||||
|
||||
import org.eclipse.cdt.core.model.IMacroFileEntry;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.utils.PathUtil;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
@ -25,7 +27,7 @@ public class MacroFileEntry extends APathEntry implements IMacroFileEntry {
|
|||
public MacroFileEntry(IPath resourcePath, IPath basePath, IPath baseRef, IPath macroFilePath,
|
||||
IPath[] exclusionPatterns, boolean isExported) {
|
||||
super(IPathEntry.CDT_MACRO_FILE, basePath, baseRef, resourcePath, exclusionPatterns, isExported);
|
||||
this.macroFilePath = (macroFilePath == null) ? Path.EMPTY : macroFilePath;
|
||||
this.macroFilePath = (macroFilePath == null) ? Path.EMPTY : PathUtil.getCanonicalPath(macroFilePath);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
* Contributors:
|
||||
* QNX Software Systems - initial API and implementation
|
||||
* Markus Schorn (Wind River Systems)
|
||||
* Ed Swartz (Nokia)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.utils;
|
||||
|
||||
|
@ -41,13 +42,19 @@ public class PathUtil {
|
|||
}
|
||||
|
||||
public static IPath getCanonicalPath(IPath fullPath) {
|
||||
if (!fullPath.isAbsolute())
|
||||
return fullPath;
|
||||
|
||||
File file = fullPath.toFile();
|
||||
try {
|
||||
String canonPath = file.getCanonicalPath();
|
||||
return new Path(canonPath);
|
||||
IPath canonicalPath = new Path(canonPath);
|
||||
if (fullPath.getDevice() == null)
|
||||
canonicalPath = canonicalPath.setDevice(null);
|
||||
return canonicalPath;
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
return null;
|
||||
return fullPath;
|
||||
}
|
||||
|
||||
public static IPath getWorkspaceRelativePath(IPath fullPath) {
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
* QNX Software System
|
||||
* Sergey Prigogin, Google - https://bugs.eclipse.org/bugs/show_bug.cgi?id=13221
|
||||
* Ed Swartz (Nokia)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.editor;
|
||||
|
||||
|
@ -28,6 +29,7 @@ import org.eclipse.core.resources.ResourcesPlugin;
|
|||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.jface.action.Action;
|
||||
import org.eclipse.jface.viewers.ILabelProvider;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
|
@ -44,6 +46,7 @@ import org.eclipse.cdt.core.model.ICElement;
|
|||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.utils.PathUtil;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.ElementListSelectionDialog;
|
||||
|
@ -165,13 +168,16 @@ public class OpenIncludeAction extends Action {
|
|||
throws CoreException {
|
||||
// in case it is an absolute path
|
||||
IPath includeFile= new Path(name);
|
||||
if (includeFile.isAbsolute() && includeFile.toFile().exists()) {
|
||||
if (includeFile.isAbsolute()) {
|
||||
includeFile = PathUtil.getCanonicalPath(includeFile);
|
||||
if (includeFile.toFile().exists()) {
|
||||
list.add(includeFile);
|
||||
return;
|
||||
}
|
||||
}
|
||||
HashSet foundSet = new HashSet();
|
||||
for (int i = 0; i < includePaths.length; i++) {
|
||||
IPath path = new Path(includePaths[i]).append(includeFile);
|
||||
IPath path = PathUtil.getCanonicalPath(new Path(includePaths[i]).append(includeFile));
|
||||
File file = path.toFile();
|
||||
if (file.exists()) {
|
||||
IPath[] paths = resolveIncludeLink(path);
|
||||
|
@ -201,8 +207,11 @@ public class OpenIncludeAction extends Action {
|
|||
int numSegToRemove = rPath.segmentCount() - name.segmentCount();
|
||||
IPath sPath = rPath.removeFirstSegments(numSegToRemove);
|
||||
sPath = sPath.setDevice(name.getDevice());
|
||||
if (sPath.equals(name))
|
||||
if (Platform.getOS().equals(Platform.OS_WIN32) ?
|
||||
sPath.toOSString().equalsIgnoreCase(name.toOSString()) :
|
||||
sPath.equals(name)) {
|
||||
list.add(rPath);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue