Skip to main content

[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();



Back to the top