Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Initial Dependency Tree Patch


Here's a first take at the dependency tree service which is needed by both the managed build and the indexer. The service is in a really early form with no persistance or notification mechanisms in place yet. There is just enough in here to allow Sean to get his makefile dependencies. I added a check box to the indexer tab to enable the service on a per project basis. Note that this is the only trigger at the moment for generating a dependency tree... (This patch has no direct influence on any other components)

- Bogdan

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.125
diff -u -r1.125 ChangeLog
--- ChangeLog	22 Jul 2003 00:44:14 -0000	1.125
+++ ChangeLog	23 Jul 2003 20:08:17 -0000
@@ -1,3 +1,7 @@
+2003-07-23  Bogdan Gheorghe
+	Added checkbox to Indexer tab to turn on dependency tree
+	service
+	
 2003-07-21	Bogdan Gheorghe
 	Update to CSearchResultLabelProvider to ensure that search labels
 	show up on subsequent runs.
Index: src/org/eclipse/cdt/ui/wizards/IndexerBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/IndexerBlock.java,v
retrieving revision 1.2
diff -u -r1.2 IndexerBlock.java
--- src/org/eclipse/cdt/ui/wizards/IndexerBlock.java	27 Jun 2003 14:31:32 -0000	1.2
+++ src/org/eclipse/cdt/ui/wizards/IndexerBlock.java	23 Jul 2003 20:08:17 -0000
@@ -8,6 +8,7 @@
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.index.IndexModel;
 import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
 import org.eclipse.cdt.utils.ui.swt.IValidation;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -20,6 +21,7 @@
 public class IndexerBlock implements IWizardTab {
 	private Button indexerSwitch;
 	private Button indexerSwitch2;
+	private Button dTreeSwitch;
 	IProject project;
 	IValidation page;
 
@@ -48,6 +50,12 @@
 		indexerSwitch2.setAlignment(SWT.LEFT);
 		indexerSwitch2.setText("Enable NEW indexing service for this project");
 		indexerSwitch2.setSelection(false);
+		
+		dTreeSwitch = new Button(composite, SWT.CHECK | SWT.RIGHT);
+		dTreeSwitch.setAlignment(SWT.LEFT);
+		dTreeSwitch.setText("Enable dependency tree service for this project");
+		dTreeSwitch.setSelection(false);
+				
 		return composite;
 	}
 
@@ -60,6 +68,9 @@
 		
 		IndexManager newIndexer = CCorePlugin.getDefault().getCoreModel().getIndexManager();
 		newIndexer.setEnabled(project, indexerSwitch2.getSelection());
+		
+		DependencyManager depManager = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
+		depManager.setEnabled(project, dTreeSwitch.getSelection());
 	}
 
 
@@ -98,10 +109,14 @@
 		}
 		
 		if (indexerSwitch2 != null) {
-			//indexerSwitch.setAlignment(SWT.LEFT);
-			//indexerSwitch.setText("Enable indexing service for this project");
 			indexerSwitch2.setSelection(newIndexer.isEnabled(project));
 		}
+		
+		DependencyManager depManager = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
+			
+		if (dTreeSwitch != null) {
+			dTreeSwitch.setSelection(depManager.isEnabled(project));
+		}		
 		
 		
 	}
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.29
diff -u -r1.29 ChangeLog
--- ChangeLog	22 Jul 2003 22:02:24 -0000	1.29
+++ ChangeLog	23 Jul 2003 20:07:55 -0000
@@ -1,3 +1,6 @@
+2003-07-23 Bogdan Gheorghe
+	Added new dependency tree test
+	
 2003-07-22 John Camelon
 	Updated CompleteParseASTTests.
 
Index: indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java,v
retrieving revision 1.4
diff -u -r1.4 IndexManagerTests.java
--- indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java	22 Jul 2003 18:51:41 -0000	1.4
+++ indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java	23 Jul 2003 20:07:55 -0000
@@ -11,18 +11,23 @@
 package org.eclipse.cdt.core.indexer.tests;
 
 import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.search.ICSearchConstants;
 import org.eclipse.cdt.internal.core.index.IEntryResult;
 import org.eclipse.cdt.internal.core.index.IIndex;
 import org.eclipse.cdt.internal.core.index.IQueryResult;
 import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
 import org.eclipse.cdt.internal.core.search.indexing.IIndexConstants;
 import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyQueryJob;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
@@ -36,6 +41,7 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubProgressMonitor;
 
 /**
  * @author bgheorgh
@@ -80,7 +86,7 @@
 
 	public static Test suite() {
 		//TestSuite suite = new TestSuite();
-		//suite.addTest(new IndexManagerTests("testIndexContents"));
+		//suite.addTest(new IndexManagerTests("testDependencyTree"));
 		//return suite;
 		return new TestSuite(IndexManagerTests.class);
 	}
@@ -114,7 +120,7 @@
 	   return cproject; 
 	}
 	
-	private void importFile(String fileName, String resourceLocation)throws Exception{
+	private IFile importFile(String fileName, String resourceLocation)throws Exception{
 	   //Obtain file handle
        file = testProject.getProject().getFile(fileName); 
 	   String pluginRoot=org.eclipse.core.runtime.Platform.getPlugin("org.eclipse.cdt.core.tests").find(new Path("/")).getFile();
@@ -124,6 +130,7 @@
 		 file.create(new FileInputStream(pluginRoot + resourceLocation),false,monitor);
 	   }
 	   fileDoc = new IFileDocument(file);
+	   return file;
 	}
 	
 	private void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException {
@@ -342,4 +349,79 @@
 			assertEquals(methodResultModel[i],methodresults[i].toString());
 		}
   }
+  
+  public void testDependencyTree() throws Exception{
+	//Add a file to the project
+	IFile depTest = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
+	importFile("DepTest.h","resources/dependency/DepTest.h");
+	importFile("a.h","resources/dependency/a.h");
+	importFile("c.h","resources/dependency/c.h");
+	importFile("d.h","resources/dependency/d.h");
+	importFile("Inc1.h","resources/dependency/Inc1.h");
+	importFile("DepTest2.h","resources/dependency/DepTest2.h");
+	IFile depTest2 = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
+	//Enable indexing on the created project
+	//By doing this, we force the Dependency Manager to do a g()
+	DependencyManager dependencyManager = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
+	dependencyManager.setEnabled(testProject,true);
+	Thread.sleep(10000);
+	String[] depTestModel = {"\\IndexerTestProject\\d.h", "\\IndexerTestProject\\Inc1.h", "\\IndexerTestProject\\c.h", "\\IndexerTestProject\\a.h", "\\IndexerTestProject\\DepTest.h"};
+	String[] depTest2Model = {"\\IndexerTestProject\\d.h", "\\IndexerTestProject\\DepTest2.h"};
+	
+	ArrayList includes = new ArrayList();
+	dependencyManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest,dependencyManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+	//Thread.sleep(5000);
+	String[] depTestModelLocal = convertToLocalPath(depTestModel);
+	String[] depTestIncludes = new String[includes.size()];
+	Iterator includesIterator = includes.iterator();
+	int i=0;
+	while(includesIterator.hasNext()){
+		depTestIncludes[i] = (String) includesIterator.next();
+		i++;
+	}
+	
+	if (depTestModelLocal.length != depTestIncludes.length)
+			fail("Number of included files differsfrom model");
+	
+	for (i=0;i<depTestIncludes.length; i++)
+	{
+		assertEquals(depTestModelLocal[i],depTestIncludes[i]);
+	}
+	
+	ArrayList includes2 = new ArrayList();
+	dependencyManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest2,dependencyManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+	//Thread.sleep(5000);
+	String[] depTest2ModelLocal = convertToLocalPath(depTest2Model);
+	String[] depTest2Includes = new String[includes2.size()];
+	Iterator includes2Iterator = includes2.iterator();
+	i=0;
+	while(includes2Iterator.hasNext()){
+		depTest2Includes[i] = (String) includes2Iterator.next();
+		i++;
+	}
+	
+	if (depTest2ModelLocal.length != depTest2Includes.length)
+			fail("Number of included files differsfrom model");
+	
+	for (i=0;i<depTest2Includes.length; i++)
+	{
+		assertEquals(depTest2ModelLocal[i],depTest2Includes[i]);
+	}
+  }
+
+	/**
+	 * @param depTestModel
+	 * @return
+	 */
+	private String[] convertToLocalPath(String[] model) {
+		IPath defaultPath = Platform.getLocation();
+		String[] tempLocalArray = new String[model.length];
+		for (int i=0;i<model.length;i++){
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(defaultPath.toOSString());
+			buffer.append(model[i]);
+			tempLocalArray[i]=buffer.toString();
+		}
+		return tempLocalArray;
+	}
 }
Index: .classpath
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/.classpath,v
retrieving revision 1.8
diff -u -r1.8 .classpath
--- .classpath	16 Jun 2003 17:35:46 -0000	1.8
+++ .classpath	23 Jul 2003 20:07:08 -0000
@@ -16,5 +16,6 @@
     <classpathentry kind="src" path="/org.eclipse.core.boot"/>
     <classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
     <classpathentry kind="src" path="search"/>
+    <classpathentry kind="src" path="dependency"/>
     <classpathentry kind="output" path="bin"/>
 </classpath>
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.112
diff -u -r1.112 ChangeLog
--- ChangeLog	16 Jul 2003 15:02:13 -0000	1.112
+++ ChangeLog	23 Jul 2003 20:07:08 -0000
@@ -1,3 +1,16 @@
+2003-07-23 Bogdan Gheorghe
+
+	Added initial dependency impl
+	Started the new dependency thread on startup
+	Added some methods to access the DependencyManager to CoreModel
+	Changed the ManagedBuildManager.getScannerInfo() to public
+	
+	Modified:
+	* src/org/eclipse/cdt/core/CCorePlugin.java
+	* src/org/eclipse/cdt/core/model/CoreModel.java
+	* src/org/eclipse/cdt/internal/core/model/CModelManager.java
+	* src/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
+
 2003-07-16 Alain Magloire
 
 	Patch from Alex Chapiro
Index: build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java,v
retrieving revision 1.10
diff -u -r1.10 ManagedBuildManager.java
--- build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java	4 Jul 2003 18:36:45 -0000	1.10
+++ build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java	23 Jul 2003 20:07:08 -0000
@@ -420,7 +420,7 @@
 	 * @param resource
 	 * @return
 	 */
-	private static IScannerInfo getScannerInfo(IResource resource) {
+	public static IScannerInfo getScannerInfo(IResource resource) {
 		return (IScannerInfo) getBuildInfo(resource, false);
 	}
 
Index: model/org/eclipse/cdt/core/model/CoreModel.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java,v
retrieving revision 1.13
diff -u -r1.13 CoreModel.java
--- model/org/eclipse/cdt/core/model/CoreModel.java	27 Jun 2003 14:31:27 -0000	1.13
+++ model/org/eclipse/cdt/core/model/CoreModel.java	23 Jul 2003 20:07:09 -0000
@@ -9,6 +9,7 @@
 import org.eclipse.cdt.internal.core.model.BatchOperation;
 import org.eclipse.cdt.internal.core.model.CModelManager;
 import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -226,4 +227,11 @@
 		return manager.getIndexManager();
 	}
 	
+	public void startDependencyService() {
+		manager.getSourceDependencyManager().reset();
+	}
+	
+	public DependencyManager getDependencyManager(){
+		return manager.getSourceDependencyManager();
+	}
 }
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.29
diff -u -r1.29 CModelManager.java
--- model/org/eclipse/cdt/internal/core/model/CModelManager.java	4 Jul 2003 03:02:07 -0000	1.29
+++ model/org/eclipse/cdt/internal/core/model/CModelManager.java	23 Jul 2003 20:07:09 -0000
@@ -43,6 +43,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
 
 public class CModelManager implements IResourceChangeListener {
 
@@ -777,4 +778,8 @@
 		this.getIndexManager().discardJobs(project.getName());
 	}
 	
+	
+	public DependencyManager getSourceDependencyManager() {
+		return this.fDeltaProcessor.sourceDependencyManager;
+	}
 }
Index: model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java,v
retrieving revision 1.12
diff -u -r1.12 DeltaProcessor.java
--- model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java	4 Jul 2003 03:02:07 -0000	1.12
+++ model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java	23 Jul 2003 20:07:09 -0000
@@ -21,6 +21,7 @@
 import org.eclipse.core.runtime.IPath;
 
 import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
 
 /**
  * This class is used by <code>CModelManager</code> to convert
@@ -36,7 +37,9 @@
 	protected CElementDelta fCurrentDelta;
 	
 	protected IndexManager indexManager = new IndexManager();
-
+	
+	protected DependencyManager sourceDependencyManager = new DependencyManager();
+	
 	/* The C element that was last created (see createElement(IResource). 
 	 * This is used as a stack of C elements (using getParent() to pop it, and 
 	 * using the various get*(...) to push it. */
Index: src/org/eclipse/cdt/core/CCorePlugin.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java,v
retrieving revision 1.20
diff -u -r1.20 CCorePlugin.java
--- src/org/eclipse/cdt/core/CCorePlugin.java	10 Jul 2003 18:28:24 -0000	1.20
+++ src/org/eclipse/cdt/core/CCorePlugin.java	23 Jul 2003 20:07:10 -0000
@@ -189,6 +189,9 @@
 		//Fired up the new indexer
 		fCoreModel.startIndexing();
 		
+		//Fire up dependency manager
+		fCoreModel.startDependencyService();
+		
 		fDescriptorManager = new CDescriptorManager();
 		fDescriptorManager.startup();
 		

Attachment: cdt-core-dependency.zip
Description: Zip archive

Attachment: core-tests-resources-dependency.zip
Description: Zip archive


Back to the top