1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-19 06:55:23 +02:00

Improvements to the Executables manager including work for bug 253778.

This commit is contained in:
Ken Ryall 2008-11-04 21:39:26 +00:00
parent b9deab734a
commit 55a0d30355
5 changed files with 52 additions and 13 deletions

View file

@ -71,6 +71,15 @@ public class Executable extends PlatformObject {
return true;
}
public boolean equals(Object arg0) {
if (arg0 instanceof Executable)
{
Executable exe = (Executable)arg0;
return exe.getPath().equals(this.getPath());
}
return super.equals(arg0);
}
private IPath path;
private IProject project;
private String name;
@ -143,7 +152,7 @@ public class Executable extends PlatformObject {
String filename = symReaderSources[i];
String orgPath = filename;
filename = ExecutablesManager.getExecutablesManager().remapSourceFile(filename);
filename = ExecutablesManager.getExecutablesManager().remapSourceFile(this, filename);
// Sometimes the path in the symbolics will have a
// different
@ -222,7 +231,7 @@ public class Executable extends PlatformObject {
public String getOriginalLocation(ITranslationUnit tu) {
String orgLocation = remappedPaths.get(tu);
if (orgLocation == null)
orgLocation = tu.getPath().toOSString();
orgLocation = tu.getLocation().toOSString();
return orgLocation;
}

View file

@ -170,14 +170,18 @@ public class ExecutablesManager extends PlatformObject {
DebugPlugin.log( e );
}
}
synchronized (executables)
{
Collection<Executable> exes = executables.values();
return exes.toArray(new Executable[exes.size()]);
}
}
public String remapSourceFile(String filePath) {
public String remapSourceFile(Executable executable, String filePath) {
synchronized (sourceFileRemappings) {
for (ISourceFileRemapping remapping : sourceFileRemappings) {
String remappedPath = remapping.remapSourceFile(filePath);
String remappedPath = remapping.remapSourceFile(executable, filePath);
if (!remappedPath.equals(filePath))
return remappedPath;
}
@ -245,8 +249,10 @@ public class ExecutablesManager extends PlatformObject {
}
public boolean executableExists(IPath exePath) {
synchronized (executables) {
return executables.containsKey(exePath.toOSString());
}
}
public String[] getSourceFiles(final Executable executable,
IProgressMonitor monitor) {
@ -320,4 +326,8 @@ public class ExecutablesManager extends PlatformObject {
return result;
}
public void setRefreshNeeded(boolean refresh) {
refreshNeeded = true;
}
}

View file

@ -19,6 +19,6 @@ package org.eclipse.cdt.debug.core.executables;
*/
public interface ISourceFileRemapping {
String remapSourceFile(String filePath);
String remapSourceFile(Executable executable, String filePath);
}

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.IBinaryParser;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.settings.model.ICConfigExtensionReference;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.core.filesystem.EFS;
@ -39,7 +40,9 @@ import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.*;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.content.IContentTypeManager;
import org.eclipse.core.runtime.content.IContentTypeSettings;
import org.eclipse.debug.core.DebugPlugin;
public class StandardExecutableImporter implements IExecutableImporter {
@ -96,7 +99,12 @@ public class StandardExecutableImporter implements IExecutableImporter {
store = store.getChild(newProjectHandle.getName());
for (String deleteName : ignoreList) {
IFileStore projFile = store.getChild(deleteName);
projFile.delete(EFS.NONE, null);
projFile.delete(EFS.NONE, new NullProgressMonitor());
}
IFileStore[] children = store.childStores(EFS.NONE, new NullProgressMonitor());
for (IFileStore fileStore : children) {
if (fileStore.fetchInfo().isDirectory())
fileStore.delete(EFS.NONE, new NullProgressMonitor());
}
exeProject = CCorePlugin.getDefault().createCProject(description, newProjectHandle, null, DEBUG_PROJECT_ID);
} catch (OperationCanceledException e) {
@ -224,8 +232,20 @@ public class StandardExecutableImporter implements IExecutableImporter {
// Make sure the project has this parser
ICProjectDescription pd = CCorePlugin.getDefault().getProjectDescription(exeProject);
try {
boolean existsAlready = false;
ICConfigExtensionReference[] parsers = pd.getDefaultSettingConfiguration().get(CCorePlugin.BINARY_PARSER_UNIQ_ID);
for (ICConfigExtensionReference configExtensionReference : parsers) {
if (configExtensionReference.getID().equals(parserID))
{
existsAlready = true;
break;
}
}
if (!existsAlready)
{
pd.getDefaultSettingConfiguration().create(CCorePlugin.BINARY_PARSER_UNIQ_ID, parserID);
CCorePlugin.getDefault().setProjectDescription(exeProject, pd, true, new NullProgressMonitor());
}
} catch (CoreException e) {
}
return true;

View file

@ -23,7 +23,7 @@ import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage;
public class StandardSourceFileRemapping implements ISourceFileRemapping {
public String remapSourceFile(String filePath) {
public String remapSourceFile(Executable executable, String filePath) {
try {
Object[] foundElements = CDebugCorePlugin.getDefault().getCommonSourceLookupDirector().findSourceElements(filePath);