[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Binary/SourceMapper cdt.core
|
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.83
diff -u -r1.83 ChangeLog
--- ChangeLog 1 Apr 2003 19:51:35 -0000 1.83
+++ ChangeLog 2 Apr 2003 04:47:14 -0000
@@ -1,5 +1,19 @@
2003-04-01 Alain Magloire
+ Implement SourceRefence and SourceManipulation for IBinary, this is
+ done in BinaryElement, BinaryFunction, BinaryVariable.
+
+ * model/org/eclipse/cdt/internal/core/model/Binary.java:
+ * model/org/eclipse/cdt/internal/core/model/BinaryFunction.java:
+ * model/org/eclipse/cdt/internal/core/model/BinaryVariable.java:
+ * model/org/eclipse/cdt/internal/core/model/BinaryElement.java:
+
+ Corrected typo ISymbol.getAdress() should be ISymbol.getAddress().
+ * model/org/eclipse/cdt/internal/core/model/parser/Symbol.java:
+ * src/org/eclipse/cdt/core/IBinaryParser.java:
+
+2003-04-01 Alain Magloire
+
Patch form Hoda.
IStructure extends IVariableDeclaration.
INamespace extends IParent.
Index: model/org/eclipse/cdt/internal/core/model/Binary.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Binary.java,v
retrieving revision 1.6
diff -u -r1.6 Binary.java
--- model/org/eclipse/cdt/internal/core/model/Binary.java 31 Mar 2003 03:46:57 -0000 1.6
+++ model/org/eclipse/cdt/internal/core/model/Binary.java 2 Apr 2003 04:47:16 -0000
@@ -172,15 +172,13 @@
hash.put(path, module);
info.addChild(module);
}
- function = new BinaryFunction(module, symbol.getName());
+ function = new BinaryFunction(module, symbol.getName(), symbol.getAddress());
function.setLines(symbol.getStartLine(), symbol.getEndLine());
- function.setAddress(symbol.getAdress());
module.addChild(function);
} else {
//function = new Function(parent, symbol.getName());
- function = new BinaryFunction(this, symbol.getName());
+ function = new BinaryFunction(this, symbol.getName(), symbol.getAddress());
function.setLines(symbol.getStartLine(), symbol.getEndLine());
- function.setAddress(symbol.getAdress());
info.addChild(function);
}
// if (function != null) {
@@ -204,14 +202,12 @@
hash.put(path, module);
info.addChild(module);
}
- variable = new BinaryVariable(module, symbol.getName());
+ variable = new BinaryVariable(module, symbol.getName(), symbol.getAddress());
variable.setLines(symbol.getStartLine(), symbol.getEndLine());
- variable.setAddress(symbol.getAdress());
module.addChild(variable);
} else {
- variable = new BinaryVariable(this, symbol.getName());
+ variable = new BinaryVariable(this, symbol.getName(), symbol.getAddress());
variable.setLines(symbol.getStartLine(), symbol.getEndLine());
- variable.setAddress(symbol.getAdress());
info.addChild(variable);
}
Index: model/org/eclipse/cdt/internal/core/model/BinaryElement.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryElement.java,v
retrieving revision 1.2
diff -u -r1.2 BinaryElement.java
--- model/org/eclipse/cdt/internal/core/model/BinaryElement.java 1 Apr 2003 16:55:15 -0000 1.2
+++ model/org/eclipse/cdt/internal/core/model/BinaryElement.java 2 Apr 2003 04:47:16 -0000
@@ -4,17 +4,23 @@
*/
package org.eclipse.cdt.internal.core.model;
+import java.io.IOException;
+
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.core.model.IBinaryElement;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICModelStatusConstants;
+import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ISourceManipulation;
import org.eclipse.cdt.core.model.ISourceRange;
import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
/**
*/
@@ -22,23 +28,15 @@
long addr;
- public BinaryElement(ICElement parent, String name, int type) {
+ public BinaryElement(ICElement parent, String name, int type, long a) {
super(parent, name, type);
- }
-
- public void setAddress(long a) {
addr = a;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ISourceManipulation#copy(org.eclipse.cdt.core.model.ICElement, org.eclipse.cdt.core.model.ICElement, java.lang.String, boolean, org.eclipse.core.runtime.IProgressMonitor)
*/
- public void copy(
- ICElement container,
- ICElement sibling,
- String rename,
- boolean replace,
- IProgressMonitor monitor)
+ public void copy(ICElement container, ICElement sibling, String rename, boolean replace, IProgressMonitor monitor)
throws CModelException {
throw new CModelException(new CModelStatus(ICModelStatusConstants.READ_ONLY, this));
}
@@ -46,20 +44,14 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ISourceManipulation#delete(boolean, org.eclipse.core.runtime.IProgressMonitor)
*/
- public void delete(boolean force, IProgressMonitor monitor)
- throws CModelException {
+ public void delete(boolean force, IProgressMonitor monitor) throws CModelException {
throw new CModelException(new CModelStatus(ICModelStatusConstants.READ_ONLY, this));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ISourceManipulation#move(org.eclipse.cdt.core.model.ICElement, org.eclipse.cdt.core.model.ICElement, java.lang.String, boolean, org.eclipse.core.runtime.IProgressMonitor)
*/
- public void move(
- ICElement container,
- ICElement sibling,
- String rename,
- boolean replace,
- IProgressMonitor monitor)
+ public void move(ICElement container, ICElement sibling, String rename, boolean replace, IProgressMonitor monitor)
throws CModelException {
throw new CModelException(new CModelStatus(ICModelStatusConstants.READ_ONLY, this));
}
@@ -67,8 +59,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ISourceManipulation#rename(java.lang.String, boolean, org.eclipse.core.runtime.IProgressMonitor)
*/
- public void rename(String name, boolean replace, IProgressMonitor monitor)
- throws CModelException {
+ public void rename(String name, boolean replace, IProgressMonitor monitor) throws CModelException {
throw new CModelException(new CModelStatus(ICModelStatusConstants.READ_ONLY, this));
}
@@ -76,24 +67,65 @@
* @see org.eclipse.cdt.core.model.ISourceReference#getSource()
*/
public String getSource() throws CModelException {
- // TODO Auto-generated method stub
- return null;
+ ITranslationUnit tu = getTranslationUnit();
+ if (tu != null) {
+ try {
+ IResource res = tu.getResource();
+ if (res != null && res instanceof IFile) {
+ StringBuffer buffer = Util.getContent((IFile)res);
+ return buffer.substring(getStartPos(),
+ getStartPos() + getLength());
+ }
+ } catch (IOException e) {
+ throw new CModelException(e, ICModelStatusConstants.IO_EXCEPTION);
+ }
+ }
+ return "";
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ISourceReference#getSourceRange()
*/
public ISourceRange getSourceRange() throws CModelException {
- // TODO Auto-generated method stub
- return null;
+ return new SourceRange(getStartPos(),
+ getLength(),
+ getIdStartPos(),
+ getIdLength(),
+ getStartLine(),
+ getEndLine());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ISourceReference#getTranslationUnit()
*/
public ITranslationUnit getTranslationUnit() {
- // TODO Auto-generated method stub
- return null;
+ ITranslationUnit tu = null;
+ CModelManager mgr = CModelManager.getDefault();
+ ICElement parent = getParent();
+ if (parent != null) {
+ IPath path = parent.getPath();
+ if (path != null && path.isAbsolute()) {
+ IResource res = mgr.getCModel().getWorkspace().getRoot().getFileForLocation(path);
+ if (res != null && res.exists() && res.getType() == IResource.FILE) {
+ ICElement e = CModelManager.getDefault().create(res);
+ if (e instanceof ITranslationUnit) {
+ tu = (ITranslationUnit)e;
+ }
+ }
+ } else {
+ // ??? assert()
+ path = new Path("");
+ }
+ // Fall back to the project sourcemapper.
+ if (tu == null) {
+ ICProject cproject = getCProject();
+ SourceMapper mapper = mgr.getSourceMapper(cproject);
+ if (mapper != null) {
+ tu = mapper.findTranslationUnit(path.lastSegment());
+ }
+ }
+ }
+ return tu;
}
/* (non-Javadoc)
@@ -114,8 +146,7 @@
* @see org.eclipse.cdt.core.model.IBinaryElement#getAddress()
*/
public long getAddress() throws CModelException {
- // TODO Auto-generated method stub
- return 0;
+ return addr;
}
/* (non-Javadoc)
@@ -126,7 +157,7 @@
do {
if (current instanceof IBinary) {
return (IBinary) current;
- }
+ }
} while ((current = current.getParent()) != null);
return null;
}
Index: model/org/eclipse/cdt/internal/core/model/BinaryFunction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryFunction.java,v
retrieving revision 1.2
diff -u -r1.2 BinaryFunction.java
--- model/org/eclipse/cdt/internal/core/model/BinaryFunction.java 1 Apr 2003 16:55:15 -0000 1.2
+++ model/org/eclipse/cdt/internal/core/model/BinaryFunction.java 2 Apr 2003 04:47:16 -0000
@@ -12,8 +12,8 @@
*/
public class BinaryFunction extends BinaryElement implements IFunction {
- public BinaryFunction(ICElement parent, String name) {
- super(parent, name, ICElement.C_FUNCTION);
+ public BinaryFunction(ICElement parent, String name, long a) {
+ super(parent, name, ICElement.C_FUNCTION, a);
}
/* (non-Javadoc)
Index: model/org/eclipse/cdt/internal/core/model/BinaryVariable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryVariable.java,v
retrieving revision 1.1
diff -u -r1.1 BinaryVariable.java
--- model/org/eclipse/cdt/internal/core/model/BinaryVariable.java 31 Mar 2003 03:46:57 -0000 1.1
+++ model/org/eclipse/cdt/internal/core/model/BinaryVariable.java 2 Apr 2003 04:47:17 -0000
@@ -12,8 +12,8 @@
*/
public class BinaryVariable extends BinaryElement implements IVariable {
- public BinaryVariable(ICElement parent, String name) {
- super(parent, name, ICElement.C_VARIABLE);
+ public BinaryVariable(ICElement parent, String name, long a) {
+ super(parent, name, ICElement.C_VARIABLE, a);
}
/* (non-Javadoc)
Index: model/org/eclipse/cdt/internal/core/model/CModelManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java,v
retrieving revision 1.19
diff -u -r1.19 CModelManager.java
--- model/org/eclipse/cdt/internal/core/model/CModelManager.java 31 Mar 2003 03:46:57 -0000 1.19
+++ model/org/eclipse/cdt/internal/core/model/CModelManager.java 2 Apr 2003 04:47:19 -0000
@@ -93,6 +93,11 @@
* The list of started BinaryRunners on projects.
*/
private HashMap binaryRunners = new HashMap();
+
+ /**
+ * The lis of the SourceMappers on projects.
+ */
+ private HashMap sourceMappers = new HashMap();
public static final String [] sourceExtensions = {"c", "cxx", "cc", "C", "cpp"};
@@ -498,6 +503,17 @@
return runner;
}
+ public SourceMapper getSourceMapper(ICProject cProject) {
+ SourceMapper mapper = null;
+ synchronized(sourceMappers) {
+ mapper = (SourceMapper) sourceMappers.get(cProject);
+ if (mapper == null) {
+ mapper = new SourceMapper(cProject);
+ sourceMappers.put(cProject, mapper);
+ }
+ }
+ return mapper;
+ }
/**
* addElementChangedListener method comment.
*/
Index: model/org/eclipse/cdt/internal/core/model/SourceMapper.java
===================================================================
RCS file: model/org/eclipse/cdt/internal/core/model/SourceMapper.java
diff -N model/org/eclipse/cdt/internal/core/model/SourceMapper.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ model/org/eclipse/cdt/internal/core/model/SourceMapper.java 2 Apr 2003 04:47:19 -0000
@@ -0,0 +1,54 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.internal.core.model;
+
+import java.util.ArrayList;
+
+import org.eclipse.cdt.core.model.ICContainer;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+
+/**
+ */
+public class SourceMapper {
+ ICProject cproject;
+
+ public SourceMapper(ICProject p) {
+ cproject = p;
+ }
+
+ public ITranslationUnit findTranslationUnit(String filename) {
+ return findTranslationUnit(cproject, filename);
+ }
+
+ public ITranslationUnit findTranslationUnit(ICContainer container, String filename) {
+ ArrayList list = container.getChildrenOfType(ICElement.C_UNIT);
+ for (int i = 0; i < list.size(); i++) {
+ Object o = list.get(i);
+ if (o instanceof ITranslationUnit) {
+ ITranslationUnit tu = (ITranslationUnit)o;
+ // TODO: What about non case sensitive filesystems.
+ if (filename.equals(tu.getElementName())) {
+ return tu;
+ }
+ }
+ }
+
+ // TODO: This to simple, we are not protected against
+ // loop in the file system symbolic links etc ..
+ list = container.getChildrenOfType(ICElement.C_CCONTAINER);
+ for (int i = 0; i < list.size(); i++) {
+ Object o = list.get(i);
+ if (o instanceof ICContainer) {
+ ITranslationUnit tu = findTranslationUnit((ICContainer)o, filename);
+ if (tu != null) {
+ return tu;
+ }
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
Index: model/org/eclipse/cdt/internal/core/model/parser/Symbol.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/parser/Symbol.java,v
retrieving revision 1.3
diff -u -r1.3 Symbol.java
--- model/org/eclipse/cdt/internal/core/model/parser/Symbol.java 31 Mar 2003 03:43:23 -0000 1.3
+++ model/org/eclipse/cdt/internal/core/model/parser/Symbol.java 2 Apr 2003 04:47:19 -0000
@@ -41,7 +41,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.IBinaryParser.ISymbol#getAdress()
*/
- public long getAdress() {
+ public long getAddress() {
return addr;
}
Index: src/org/eclipse/cdt/core/IBinaryParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IBinaryParser.java,v
retrieving revision 1.3
diff -u -r1.3 IBinaryParser.java
--- src/org/eclipse/cdt/core/IBinaryParser.java 31 Mar 2003 03:43:47 -0000 1.3
+++ src/org/eclipse/cdt/core/IBinaryParser.java 2 Apr 2003 04:47:20 -0000
@@ -79,7 +79,7 @@
static final int VARIABLE = 0x02;
String getName();
- long getAdress();
+ long getAddress();
int getStartLine();
int getEndLine();
String getFilename();