Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-patch] Fixes for 43099, 43100, 42400, 42717


Heeding advice from Dave and Doug here's an updated patch that will automatically reindex any file that's indexed using the old index format...

Thanks
Bogdan






Bogdan Gheorghe/Ottawa/IBM@IBMCA
Sent by: cdt-patch-admin@xxxxxxxxxxx

09/25/2003 07:42 PM

Please respond to
cdt-patch@xxxxxxxxxxx

To
cdt-patch@xxxxxxxxxxx
cc
Subject
[cdt-patch] Fixes for 43099, 43100, 42400, 42717






This patch integrates the dependency calculator into the indexer. As a result the underlying indexer file storage format has changes so please delete the .metadata folder from your CDT workspace to avoid having any weird results with search/code complete. Lots of detail in the change logs of exactly what changed...


This patch has been tested on Windows and Linux.


43099  -  Dep Tree Persistence

43100 - Dep Tree/Indexer Concurrency Problem

42400 - junit error on linux for indexer tests

42717 - UI: Context menus for search


- Bogdan


[attachment "cdt-managedbuilder-core-patch.txt" deleted by Bogdan Gheorghe/Ottawa/IBM] [attachment "cdt-ui-patch.txt" deleted by Bogdan Gheorghe/Ottawa/IBM] [attachment "cdt-core-tests.txt" deleted by Bogdan Gheorghe/Ottawa/IBM] [attachment "cdt-core-patch.txt" deleted by Bogdan Gheorghe/Ottawa/IBM]
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/ChangeLog,v
retrieving revision 1.5
diff -u -r1.5 ChangeLog
--- ChangeLog	25 Sep 2003 03:19:24 -0000	1.5
+++ ChangeLog	26 Sep 2003 17:27:46 -0000
@@ -1,3 +1,11 @@
+2003-09-25 Bogdan Gheorghe
+	Modified ResourceDeltaVisitor.visit() to use the new mechanism to get the
+	projects that dependend a file.
+	
+	Modified addSourceDependencies() to use the new mechanism to perform a DependencyQueryJob
+	
+	* src/org/eclipse/cdt/managedbuilder/internal/core/MakeFileGenerator.java
+	
 2003-09-24 Sean Evoy
 	Changed the implementor of IScannerInfo to answer only absolute paths when asked for 
 	includes paths. Users will specify the includes paths in the managed build UI in such a way
Index: src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java,v
retrieving revision 1.3
diff -u -r1.3 MakefileGenerator.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java	22 Sep 2003 02:32:08 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java	26 Sep 2003 17:27:46 -0000
@@ -17,14 +17,19 @@
 import java.util.List;
 import java.util.ListIterator;
 
-import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.search.ICSearchConstants;
+import org.eclipse.cdt.core.search.ICSearchScope;
+import org.eclipse.cdt.core.search.SearchEngine;
 import org.eclipse.cdt.internal.core.model.Util;
-import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
+import org.eclipse.cdt.internal.core.search.PathCollector;
+import org.eclipse.cdt.internal.core.search.PatternSearchJob;
+import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
 import org.eclipse.cdt.internal.core.sourcedependency.DependencyQueryJob;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -160,13 +165,24 @@
 								// Here's the container
 								generator.appendModifiedSubdirectory(resource);
 								// and all the dependents
-								DependencyManager depMgr = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
-								List deps = depMgr.getProjectDependsForFile(resource.getLocation().toOSString());
-								if (deps != null) {
-									ListIterator iter = deps.listIterator();
-									while (iter.hasNext()) {
+								PathCollector pathCollector = new PathCollector();
+								ICSearchScope scope = SearchEngine.createWorkspaceScope();
+								CSearchPattern pattern = CSearchPattern.createPattern(resource.getLocation().toOSString(),ICSearchConstants.INCLUDE, ICSearchConstants.REFERENCES,ICSearchConstants.EXACT_MATCH,true);
+								IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+							    indexManager.performConcurrentJob( 
+								  new PatternSearchJob(
+									  (CSearchPattern) pattern,
+									  scope,
+									  pathCollector,
+									  indexManager 
+								  ),
+								  ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
+								  null );
+								 String[] deps = pathCollector.getPaths();
+								 if (deps.length > 0 ) {
+								 	for (int i=0; i<deps.length; i++){
 										generator.appendModifiedSubdirectory(resource);
-									}
+								 	}
 								}
 								// A build should run						
 								generator.shouldRunBuild(true);
@@ -240,7 +256,7 @@
 		// Create the buffer to hold the output for the module and a dep calculator
 		StringBuffer buffer = new StringBuffer();
 		buffer.append(ManagedBuilderCorePlugin.getResourceString(AUTO_DEP) + NEWLINE);
-		DependencyManager dependencyManager = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
+		IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
 
 		/*
 		 * Visit each resource in the folder that we have a rule to build.
@@ -264,7 +280,7 @@
 					// ASk the dep generator to find all the deps for this resource
 					ArrayList dependencies = new ArrayList();
 					try {
-						dependencyManager.performConcurrentJob(new DependencyQueryJob(project, (IFile)resource, dependencyManager, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null);
+						indexManager.performConcurrentJob(new DependencyQueryJob(project, (IFile)resource, indexManager, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null);
 					} catch (Exception e) {
 						continue;
 					}
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.115
diff -u -r1.115 ChangeLog
--- ChangeLog	25 Sep 2003 19:51:50 -0000	1.115
+++ ChangeLog	26 Sep 2003 17:27:04 -0000
@@ -1,3 +1,15 @@
+2003-09-25 Bogdan Gheorghe
+	- separated dependency tests from the indexer tests
+	- modified the AutomatedIntegrationSuite to include new dependency
+	  tests
+	- added the following tests: 
+	 * testDepTable
+	 * testDepSourceChangeTree
+	 * testDepHeaderChangeTree
+	 * testDepHeaderChangeReindex
+	 * testDepSourceChangeTable
+	 * testDepHeaderChangeTable
+	 
 2003-09-25 Hoda Amer
 	Enabled CompleteParseASTExpressionTest.testPostfixTypenameIdentifier()
 	
Index: indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java
===================================================================
RCS file: indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java
diff -N indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java	26 Sep 2003 17:27:04 -0000
@@ -0,0 +1,713 @@
+/*
+ * Created on Sep 25, 2003
+ */
+package org.eclipse.cdt.core.indexer.tests;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Set;
+
+import junit.extensions.TestDecorator;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.cdt.core.CCProjectNature;
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.search.ICSearchConstants;
+import org.eclipse.cdt.core.search.ICSearchPattern;
+import org.eclipse.cdt.core.search.ICSearchResultCollector;
+import org.eclipse.cdt.core.search.ICSearchScope;
+import org.eclipse.cdt.core.search.IMatch;
+import org.eclipse.cdt.core.search.SearchEngine;
+import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
+import org.eclipse.cdt.internal.core.search.PathCollector;
+import org.eclipse.cdt.internal.core.search.PatternSearchJob;
+import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
+import org.eclipse.cdt.internal.core.sourcedependency.DependencyQueryJob;
+import org.eclipse.cdt.internal.ui.search.CSearchResultCollector;
+import org.eclipse.core.internal.resources.ResourceException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+
+	/**
+ 	* @author bgheorgh
+ 	*/
+	public class DependencyTests extends TestCase {
+	IFile 					file;
+	IFileDocument 			fileDoc;
+	IProject 				testProject;
+	NullProgressMonitor		monitor;
+	IndexManager 			indexManager;
+	IWorkspace 				workspace;
+	CSearchResultCollector	resultCollector;
+	SearchEngine			searchEngine;
+	ICSearchScope 			scope;
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(DependencyTests.class.getName());
+
+		suite.addTest(new DependencyTests("testDependencyTree"));
+		suite.addTest(new DependencyTests("testDepTable"));
+		suite.addTest(new DependencyTests("testDepSourceChangeTree"));
+		suite.addTest(new DependencyTests("testDepHeaderChangeTree"));
+		suite.addTest(new DependencyTests("testDepHeaderChangeReindex"));
+		suite.addTest(new DependencyTests("testDepSourceChangeTable"));
+		suite.addTest(new DependencyTests("testDepHeaderChangeTable"));
+		return suite;
+	}
+	/**
+	 * @param name
+	 */
+	public DependencyTests(String name) {
+		super(name);
+		// TODO Auto-generated constructor stub
+	}
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		//Create temp project
+		testProject = createProject("DepTestProject");
+		if (testProject==null)
+			fail("Unable to create project");	
+		
+		indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+		indexManager.reset();
+		
+		workspace = ResourcesPlugin.getWorkspace();
+		
+		scope = SearchEngine.createWorkspaceScope();
+		monitor = new NullProgressMonitor();
+		resultCollector = new CSearchResultCollector();
+		resultCollector.setProgressMonitor( monitor );
+	
+		searchEngine = new SearchEngine();
+	}
+	/*
+	 * @see TestCase#tearDown()
+	 */
+	protected void tearDown() {
+		try {
+			super.tearDown();
+		} catch (Exception e1) {
+		}
+		//Delete project
+		if (testProject.exists()){
+			try {
+				testProject.delete(true,monitor);
+			} catch (ResourceException e) {
+			} catch (CoreException e) {
+			}
+		}
+	}
+	public void testDependencyTree() throws Exception{
+   //Add a file to the project
+   importFile("c.h","resources/dependency/c.h");
+   importFile("a.h","resources/dependency/a.h");
+   importFile("Inc1.h","resources/dependency/Inc1.h");
+   importFile("DepTest.h","resources/dependency/DepTest.h");
+   importFile("d.h","resources/dependency/d.h");
+   importFile("DepTest2.h","resources/dependency/DepTest2.h");
+   IFile depTest = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
+   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()
+
+   IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+   //indexManager.setEnabled(testProject,true);
+   
+
+   String[] depTestModel = {File.separator + "DepTestProject" + File.separator + "d.h", File.separator + "DepTestProject" + File.separator + "Inc1.h", File.separator + "DepTestProject" + File.separator + "c.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "DepTest.h"};
+   String[] depTest2Model = {File.separator + "DepTestProject" + File.separator + "d.h", File.separator + "DepTestProject" + File.separator + "DepTest2.h"};
+	
+   ArrayList includes = new ArrayList();
+   indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+
+   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");
+	
+   Arrays.sort(depTestModelLocal);
+   Arrays.sort(depTestIncludes);
+		
+   for (i=0;i<depTestIncludes.length; i++)
+   {
+	   assertEquals(depTestModelLocal[i],depTestIncludes[i]);
+   }
+	
+   ArrayList includes2 = new ArrayList();
+   indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest2,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+   
+   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");
+	
+   Arrays.sort(depTest2ModelLocal);
+   Arrays.sort(depTest2Includes);
+	
+   for (i=0;i<depTest2Includes.length; i++)
+   {
+	   assertEquals(depTest2ModelLocal[i],depTest2Includes[i]);
+   }
+ }
+
+ public void testDepTable() throws Exception{
+   //Add a file to the project
+   
+   IFile cH = importFile("c.h","resources/dependency/c.h");
+   IFile aH = importFile("a.h","resources/dependency/a.h");
+   IFile Inc1H = importFile("Inc1.h","resources/dependency/Inc1.h");
+   IFile dH = importFile("d.h","resources/dependency/d.h");
+   IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
+   IFile depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.h");
+   IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
+   IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
+   
+   PathCollector pathCollector = new PathCollector();
+   getTableRefs(dH, pathCollector);
+				
+   String[] dHModel = {IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest2.cpp", IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
+   String[] iPath = pathCollector.getPaths();
+	
+   if (dHModel.length != iPath.length)
+	   fail("Number of included files differsfrom model");
+	
+   Arrays.sort(dHModel);
+   Arrays.sort(iPath);
+	
+   for (int i=0;i<iPath.length; i++)
+   {
+	   assertEquals(iPath[i],dHModel[i]);
+   }
+	
+   pathCollector = new PathCollector();
+   getTableRefs(Inc1H, pathCollector);
+				
+   String[] Inc1HModel = {IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
+   iPath = pathCollector.getPaths();
+	
+   if (Inc1HModel.length != iPath.length)
+	   fail("Number of included files differsfrom model");
+	
+   Arrays.sort(Inc1HModel);
+   Arrays.sort(iPath);
+	
+   for (int i=0;i<iPath.length; i++)
+   {
+	   assertEquals(iPath[i],Inc1HModel[i]);
+   }
+ }
+  
+ public void testDepSourceChangeTable() throws Exception{
+
+   //Add a file to the project
+   IFile cH = importFile("c.h","resources/dependency/c.h"); 
+   IFile aH = importFile("a.h","resources/dependency/a.h");
+   IFile Inc1H = importFile("Inc1.h","resources/dependency/Inc1.h");
+   IFile dH = importFile("d.h","resources/dependency/d.h");
+   IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
+   IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
+
+   String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
+	
+   PathCollector pathCollector = new PathCollector();
+   getTableRefs(depTestH, pathCollector);
+				
+   String[] iPath = pathCollector.getPaths();
+	
+   compareArrays(iPath,beforeModel);
+	
+   pathCollector = new PathCollector();
+   getTableRefs(dH, pathCollector);
+				
+   iPath = pathCollector.getPaths();
+		
+   compareArrays(iPath,beforeModel);
+	
+   pathCollector = new PathCollector();
+   getTableRefs(Inc1H, pathCollector);
+				
+   iPath = pathCollector.getPaths();
+		
+   compareArrays(iPath,beforeModel);
+	
+   pathCollector = new PathCollector();
+   getTableRefs(aH, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+	
+   compareArrays(iPath,beforeModel);
+	
+   pathCollector = new PathCollector();
+   getTableRefs(cH, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+	
+   compareArrays(iPath,beforeModel);
+	
+   editCode(depTestC,"#include \"DepTest.h\"","//#include \"DepTest.h\"");
+	
+
+   pathCollector = new PathCollector();
+   getTableRefs(depTestH, pathCollector);
+				
+   iPath = pathCollector.getPaths();
+	
+   if (iPath.length != 0)
+	   fail("Number of included files differs from model");
+	
+	
+   pathCollector = new PathCollector();
+   getTableRefs(dH, pathCollector);
+				
+   iPath = pathCollector.getPaths();
+		
+   compareArrays(iPath,beforeModel);
+	
+   pathCollector = new PathCollector();
+   getTableRefs(Inc1H, pathCollector);
+				
+   iPath = pathCollector.getPaths();
+		
+   if (iPath.length != 0)
+	   fail("Number of included files differs from model");
+	
+   pathCollector = new PathCollector();
+   getTableRefs(aH, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+	
+   if (iPath.length != 0)
+	   fail("Number of included files differs from model");
+	
+	
+   pathCollector = new PathCollector();
+   getTableRefs(cH, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+	
+   if (iPath.length != 0)
+	   fail("Number of included files differs from model");
+
+ }
+  
+ public void testDepSourceChangeTree() throws Exception{
+// Add a file to the project
+	 IFile cH = importFile("c.h","resources/dependency/c.h");
+	 IFile aH = importFile("a.h","resources/dependency/a.h");
+	 IFile Inc1H = importFile("Inc1.h","resources/dependency/Inc1.h");
+	 IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
+	 IFile dH = importFile("d.h","resources/dependency/d.h");
+	 IFile depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.h");
+	 IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
+	 IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
+
+	 IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+	  
+	 String[] preDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest.h", File.separator + "DepTestProject" + File.separator + "Inc1.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "c.h", File.separator + "DepTestProject" + File.separator + "d.h"};
+	
+	 ArrayList includes = new ArrayList();
+	 indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+
+	 String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel);
+	 String[] preDepTestIncludes = new String[includes.size()];
+	
+	 Iterator includesIterator = includes.iterator();
+	 int i=0;
+	 while(includesIterator.hasNext()){
+		 preDepTestIncludes[i] = (String) includesIterator.next();
+		 i++;
+	 }
+
+	 if (preDepTestModelLocal.length != preDepTestIncludes.length)
+			 fail("Number of included files differs from model");
+
+	 Arrays.sort(preDepTestModelLocal);
+	 Arrays.sort(preDepTestIncludes);
+	
+	 for (i=0;i<preDepTestIncludes.length; i++){
+		 assertEquals(preDepTestModelLocal[i],preDepTestIncludes[i]);
+	 }
+	
+	 editCode(depTestC,"#include \"DepTest.h\"","//#include \"DepTest.h\"");
+	 String[] postDepTestModel = {File.separator + "DepTestProject" + File.separator + "d.h"};
+	
+	 ArrayList includes2 = new ArrayList();
+
+	 testProject.refreshLocal(IResource.DEPTH_INFINITE,null);
+	
+	 indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+	
+	
+	 String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel);
+	 String[] postDepTestIncludes = new String[includes2.size()];
+	
+	 Iterator includesIterator2 = includes2.iterator();
+	
+	 int j=0;
+	 while(includesIterator2.hasNext()){
+		 postDepTestIncludes[j] = (String) includesIterator2.next();
+		 j++;
+	 }
+
+	 if (postDepTestModelLocal.length != postDepTestIncludes.length)
+			 fail("Number of included files differs from model");
+
+	 Arrays.sort(postDepTestModelLocal);
+	 Arrays.sort(postDepTestIncludes);
+	
+	 for (i=0;i<postDepTestIncludes.length; i++){
+		 assertEquals(postDepTestModelLocal[i],postDepTestIncludes[i]);
+	 }
+	
+ }
+  
+ public void testDepHeaderChangeTree() throws Exception{
+	 //	Add a file to the project
+	 IFile cH = importFile("c.h","resources/dependency/c.h");
+	 IFile aH = importFile("a.h","resources/dependency/a.h");
+	 IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
+	 IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
+
+	 IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+	  
+	 String[] preDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest3.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "c.h"};
+	
+	 ArrayList includes = new ArrayList();
+	 indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+
+	 String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel);
+	 String[] preDepTestIncludes = new String[includes.size()];
+	
+	 Iterator includesIterator = includes.iterator();
+	 int i=0;
+	 while(includesIterator.hasNext()){
+		 preDepTestIncludes[i] = (String) includesIterator.next();
+		 i++;
+	 }
+
+	 if (preDepTestModelLocal.length != preDepTestIncludes.length)
+			 fail("Number of included files differs from model");
+
+	 Arrays.sort(preDepTestModelLocal);
+	 Arrays.sort(preDepTestIncludes);
+	
+	 for (i=0;i<preDepTestIncludes.length; i++){
+		 assertEquals(preDepTestModelLocal[i],preDepTestIncludes[i]);
+	 }
+	
+	 editCode(aH,"#include \"c.h\"","//#include \"c.h\"");
+	 String[] postDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest3.h", File.separator + "DepTestProject" + File.separator + "a.h"};
+	
+	 ArrayList includes2 = new ArrayList();
+
+	 testProject.refreshLocal(IResource.DEPTH_INFINITE,null);
+	
+	 indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
+	
+	
+	 String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel);
+	 String[] postDepTestIncludes = new String[includes2.size()];
+	
+	 Iterator includesIterator2 = includes2.iterator();
+	
+	 int j=0;
+	 while(includesIterator2.hasNext()){
+		 postDepTestIncludes[j] = (String) includesIterator2.next();
+		 j++;
+	 }
+
+	 if (postDepTestModelLocal.length != postDepTestIncludes.length)
+			 fail("Number of included files differs from model");
+
+	 Arrays.sort(postDepTestModelLocal);
+	 Arrays.sort(postDepTestIncludes);
+	
+	 for (i=0;i<postDepTestIncludes.length; i++){
+		 assertEquals(postDepTestModelLocal[i],postDepTestIncludes[i]);
+	 }
+	
+ }
+  
+ public void testDepHeaderChangeTable() throws Exception{
+   
+	//	Add a file to the project
+	IFile cH = importFile("c.h","resources/dependency/c.h");
+	IFile aH = importFile("a.h","resources/dependency/a.h");
+	IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
+	IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
+	 
+	String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"};
+	
+	PathCollector pathCollector = new PathCollector();
+	getTableRefs(depTest3H, pathCollector);
+				
+	String[] iPath = pathCollector.getPaths();
+	
+	compareArrays(iPath,beforeModel);
+	 
+	pathCollector = new PathCollector();
+	getTableRefs(cH, pathCollector);
+				
+	iPath = pathCollector.getPaths();
+	
+	compareArrays(iPath,beforeModel);
+	
+	pathCollector = new PathCollector();
+	getTableRefs(aH, pathCollector);
+				
+	iPath = pathCollector.getPaths();
+	
+	compareArrays(iPath,beforeModel);
+	
+
+   editCode(aH,"#include \"c.h\"","//#include \"c.h\"");
+	
+   pathCollector = new PathCollector();
+   getTableRefs(depTest3H, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+
+   compareArrays(iPath,beforeModel);
+	
+   pathCollector = new PathCollector();
+   getTableRefs(cH, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+
+   if (iPath.length != 0)
+	   fail("Number of included files differs from model");
+	
+   pathCollector = new PathCollector();
+   getTableRefs(aH, pathCollector);
+			
+   iPath = pathCollector.getPaths();
+
+   compareArrays(iPath,beforeModel);
+   
+ }
+  
+
+ public void testDepHeaderChangeReindex() throws Exception{
+   //	Add a file to the project
+   IFile cH = importFile("c.h","resources/dependency/c.h");
+   IFile aH = importFile("a.h","resources/dependency/a.h");
+   IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
+   IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
+ 	
+   ICSearchPattern pattern = SearchEngine.createSearchPattern( "Z", ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, true );
+		
+   search(workspace,pattern,scope,resultCollector);
+ 	
+   Set resultSet = resultCollector.getSearchResults();
+   if (resultSet.size() != 1)
+	   fail("Expected 1 match");
+ 	
+   Iterator iter = resultSet.iterator();
+   IMatch match = (IMatch) iter.next();
+   if (!(match.getName().equals("Z")) && 
+	   (match.getElementType() != 64 ))
+	   fail("Wrong search result");
+   
+   editCode(depTest3H,"#include \"a.h\"","//#include \"a.h\"");
+    
+   search(workspace,pattern,scope,resultCollector);
+ 	
+   resultSet = resultCollector.getSearchResults();
+	
+   if (resultSet.size() != 0)
+		   fail("Expected no matches");
+ }
+
+
+   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;
+   }
+	
+   private void getTableRefs(IFile tempFile, PathCollector pathCollector) throws InterruptedException{
+	   
+	   ICSearchScope scope = SearchEngine.createWorkspaceScope();
+	   CSearchPattern pattern = CSearchPattern.createPattern(tempFile.getLocation().toOSString(),ICSearchConstants.INCLUDE, ICSearchConstants.REFERENCES,ICSearchConstants.EXACT_MATCH,true);
+	   IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+	   indexManager.performConcurrentJob( 
+		   new PatternSearchJob(
+			   (CSearchPattern) pattern,
+			   scope,
+			   pathCollector,
+			   indexManager 
+		   ),
+		   ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
+		   null );
+   }
+	
+   private void editCode(IFile tempFile, String beforeString, String afterString) throws IOException, CoreException, InterruptedException{
+	   FileReader fileReader = null;
+	   try {
+		   fileReader = new FileReader(tempFile.getLocation().toOSString());
+	   } catch (FileNotFoundException e) {
+		   fail(e.getMessage());
+	   }
+	
+	   BufferedReader buff = new BufferedReader(fileReader);
+	   String tempString;
+	   File tempUtilFile= new File(tempFile.getLocation().toOSString() + "TempFile"); 
+	   FileWriter writer = new FileWriter(tempUtilFile);
+
+	   try {
+			  while ((tempString = buff.readLine())!= null ) {
+			   if (tempString.equals(beforeString)){
+				   writer.write(afterString + "\n" );
+				   writer.flush();
+			   }
+			   else{
+				   writer.write(tempString + "\n" );
+				   writer.flush();
+			   }
+				
+			  }
+	   } catch (IOException e1) {
+		   fail(e1.getMessage());
+	   }		  
+	   writer.close();
+	
+	   FileInputStream buff2 = new FileInputStream(tempUtilFile);
+	   tempFile.setContents(buff2,true,false,null);
+	   tempFile.refreshLocal(IResource.DEPTH_INFINITE, null);
+	   //buff2.close();
+		
+		
+   }
+	
+   private void compareArrays(String[] first, String[] second){
+		
+	   if (first.length != second.length)
+			   fail("Number of included files differs from model");
+	
+	   Arrays.sort(first);
+	   Arrays.sort(second);
+
+	   for (int i=0;i<first.length; i++)
+	   {
+		   assertEquals(first[i],second[i]);
+	   }
+   }
+	
+   protected void search(IWorkspace workspace, ICSearchPattern pattern, ICSearchScope scope, ICSearchResultCollector collector) {
+	   resultCollector.setProgressMonitor( monitor );
+	   searchEngine.search( workspace, pattern, scope, collector, false );
+   }
+   
+   /*
+	* Utils
+	*/
+   private IProject createProject(String projectName) throws CoreException
+   {
+	  IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
+	  IProject project= root.getProject(projectName);
+	  IProject cproject = null;
+	  try{
+		  if (!project.exists()) {
+			project.create(null);
+		  } else {
+			project.refreshLocal(IResource.DEPTH_INFINITE, null);
+		  }
+		  if (!project.isOpen()) {
+			project.open(null);
+		  }  
+		  
+		  //Fill out a project description
+		  IPath defaultPath = Platform.getLocation();
+		  IPath newPath = project.getFullPath();
+		  if (defaultPath.equals(newPath))
+			newPath = null;
+		  IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		  IProjectDescription description = workspace.newProjectDescription(project.getName());
+		  description.setLocation(newPath);
+		  //Create the project
+		  cproject = CCorePlugin.getDefault().createCProject(description,project,monitor,CCorePlugin.PLUGIN_ID + ".make"); //.getCoreModel().create(project);
+		    
+		  if( !cproject.hasNature(CCProjectNature.CC_NATURE_ID) ){
+			  addNatureToProject(cproject, CCProjectNature.CC_NATURE_ID, null);
+		  }
+	  }
+	  catch (CoreException e){
+		 cproject = project;
+		 cproject.open(null);
+	  }
+	  
+	  return cproject;
+	   
+   }
+	
+   private IFile importFile(String fileName, String resourceLocation)throws Exception{
+	  String testCaseName = this.getName();
+	
+	  //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();
+	  //Create file input stream
+	  monitor = new NullProgressMonitor();
+	  if (!file.exists()){
+		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 {
+		  IProjectDescription description = proj.getDescription();
+		  String[] prevNatures= description.getNatureIds();
+		  String[] newNatures= new String[prevNatures.length + 1];
+		  System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
+		  newNatures[prevNatures.length]= natureId;
+		  description.setNatureIds(newNatures);
+		  proj.setDescription(description, monitor);
+	}
+}
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.18
diff -u -r1.18 IndexManagerTests.java
--- indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java	23 Sep 2003 15:17:03 -0000	1.18
+++ indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java	26 Sep 2003 17:27:04 -0000
@@ -14,10 +14,6 @@
 import java.io.FileInputStream;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Set;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -25,20 +21,12 @@
 
 import org.eclipse.cdt.core.CCProjectNature;
 import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.search.ICSearchConstants;
-import org.eclipse.cdt.core.search.ICSearchPattern;
-import org.eclipse.cdt.core.search.ICSearchResultCollector;
-import org.eclipse.cdt.core.search.ICSearchScope;
-import org.eclipse.cdt.core.search.SearchEngine;
 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.cdt.internal.ui.search.CSearchResultCollector;
 import org.eclipse.core.internal.resources.ResourceException;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
@@ -63,7 +51,7 @@
 	IProject 				testProject;
 	NullProgressMonitor		monitor;
 	IndexManager 			indexManager;
-	
+
 	public static final int TIMEOUT = 5000;
 	/**
 	 * Constructor for IndexManagerTest.
@@ -80,6 +68,9 @@
 	 */
 	protected void setUp() throws Exception {
 		super.setUp();
+		
+		monitor = new NullProgressMonitor();
+		
 		//Create temp project
 		testProject = createProject("IndexerTestProject");
 		if (testProject==null)
@@ -118,8 +109,7 @@
 		suite.addTest(new IndexManagerTests("testRemoveFileFromIndex"));
 		suite.addTest(new IndexManagerTests("testRemoveProjectFromIndex"));
 		suite.addTest(new IndexManagerTests("testIndexShutdown"));
-		suite.addTest(new IndexManagerTests("testDependencyTree"));
-		
+	
 		return suite;
 	
 	}
@@ -604,86 +594,5 @@
 	  assertEquals(fwdDclRefModel[i],fwdDclRefResults[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 = {File.separator + "IndexerTestProject" + File.separator + "d.h", File.separator + "IndexerTestProject" + File.separator + "Inc1.h", File.separator + "IndexerTestProject" + File.separator + "c.h", File.separator + "IndexerTestProject" + File.separator + "a.h", File.separator + "IndexerTestProject" + File.separator + "DepTest.h"};
-	String[] depTest2Model = {File.separator + "IndexerTestProject" + File.separator + "d.h", File.separator + "IndexerTestProject" + File.separator + "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");
-	
-	Arrays.sort(depTestModelLocal);
-	Arrays.sort(depTestIncludes);
-		
-	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");
-	
-	Arrays.sort(depTest2ModelLocal);
-	Arrays.sort(depTest2Includes);
-	
-	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: resources/dependency/DepTest3.cpp
===================================================================
RCS file: resources/dependency/DepTest3.cpp
diff -N resources/dependency/DepTest3.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ resources/dependency/DepTest3.cpp	26 Sep 2003 17:27:05 -0000
@@ -0,0 +1,7 @@
+#include "DepTest3.h"
+
+DepTest3::DepTest3()
+{};
+DepTest3::~DepTest3()
+{};
+
Index: resources/dependency/DepTest3.h
===================================================================
RCS file: resources/dependency/DepTest3.h
diff -N resources/dependency/DepTest3.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ resources/dependency/DepTest3.h	26 Sep 2003 17:27:05 -0000
@@ -0,0 +1,8 @@
+#include "a.h"
+
+class DepTest3{
+public:
+
+	DepTest3();
+	~DepTest3();
+};
Index: suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java,v
retrieving revision 1.20
diff -u -r1.20 AutomatedIntegrationSuite.java
--- suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java	18 Sep 2003 15:22:42 -0000	1.20
+++ suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java	26 Sep 2003 17:27:05 -0000
@@ -20,6 +20,7 @@
 import org.eclipse.cdt.core.build.managed.tests.ManagedBuildTests;
 import org.eclipse.cdt.core.build.managed.tests.StandardBuildTests;
 import org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest;
+import org.eclipse.cdt.core.indexer.tests.DependencyTests;
 import org.eclipse.cdt.core.indexer.tests.IndexManagerTests;
 import org.eclipse.cdt.core.model.failedTests.CModelElementsFailedTests;
 import org.eclipse.cdt.core.model.tests.AllCoreTests;
@@ -85,6 +86,7 @@
 		suite.addTest(WorkingCopyTests.suite());
 		suite.addTest(SearchTestSuite.suite());
 		suite.addTestSuite( CompletionProposalsTest.class);
+		suite.addTest(DependencyTests.suite());
 		//Indexer Tests need to be run after any indexer client tests
 		//as the last test shuts down the indexing thread
 		suite.addTest(IndexManagerTests.suite());
Index: .options
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/.options,v
retrieving revision 1.3
diff -u -r1.3 .options
--- .options	12 Sep 2003 18:51:34 -0000	1.3
+++ .options	26 Sep 2003 17:26:32 -0000
@@ -18,8 +18,5 @@
 # Reports search matches
 org.eclipse.cdt.core/debug/matchlocator=false
 
-# Reports background dependency tree activity
-org.eclipse.cdt.core/debug/dependency=false
-
 # Reports delta processor tree activity
 org.eclipse.cdt.core/debug/deltaprocessor=false
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.154
diff -u -r1.154 ChangeLog
--- ChangeLog	24 Sep 2003 15:02:44 -0000	1.154
+++ ChangeLog	26 Sep 2003 17:26:33 -0000
@@ -1,3 +1,13 @@
+2003-09-25 Bogdan Gheorghe
+
+	- Got rid of refs to old dependency service; restructured
+	  index request section 
+	
+	* 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-09-24 Alain Magloire
 
 	With the removal of the old CDT parser, there was no
Index: dependency/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dependency/ChangeLog,v
retrieving revision 1.4
diff -u -r1.4 ChangeLog
--- dependency/ChangeLog	23 Sep 2003 15:17:13 -0000	1.4
+++ dependency/ChangeLog	26 Sep 2003 17:26:33 -0000
@@ -1,3 +1,25 @@
+2003-09-25 Bogdan Gheorghe
+	- As a result of folding the dependency service into the indexer
+	  have removed the following files:
+	  
+	* src/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java
+	* src/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java
+
+	
+	  
 2003-09-22 Bogdan Gheorghe
 	- Took out enable section for DependencyManager
 	
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java	9 Sep 2003 17:53:51 -0000	1.4
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,116 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.io.IOException;
-
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.ParserLanguage;
-import org.eclipse.cdt.internal.core.index.IDocument;
-import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
-import org.eclipse.cdt.internal.core.parser.ScannerInfo;
-import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
-import org.eclipse.cdt.internal.core.search.processing.JobManager;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-
-public class AddFileToDependencyTree extends DependencyRequest {
-	public static final String[] FILE_TYPES= new String[] {"cpp","c", "cc", "cxx"}; //$NON-NLS-1$
-
-	IFile resource;
-	char[] contents;
-	IScannerInfo buildInfo;
-	
-	/**
-	 * @param path
-	 * @param manager
-	 */
-	public AddFileToDependencyTree(
-		IFile resource,
-		IPath path,
-		DependencyManager manager,
-		IScannerInfo info) {
-		super(path, manager);
-		this.resource = resource;
-		this.buildInfo = info;
-	}
- 
-	public boolean execute(IProgressMonitor progressMonitor) {
-		if (progressMonitor != null && progressMonitor.isCanceled()) return true;
-		/* ensure no concurrent write access to tree */
-		IDependencyTree tree = manager.getDependencyTree(this.dependencyTreePath, true, /*reuse tree file*/ true /*create if none*/);
-		if (tree == null) return true;
-		ReadWriteMonitor monitor = manager.getMonitorFor(tree);
-		if (monitor == null) return true; // tree got deleted since acquired
-		try {
-			monitor.enterWrite(); // ask permission to write
-			if (!addDocumentToTree(tree)) return false;
-		} catch (IOException e) {
-			if (DependencyManager.VERBOSE) {
-				JobManager.verbose("-> failed to calculate dependency for " + this.resource + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
-				e.printStackTrace();
-			}
-			return false;
-		} finally {
-			monitor.exitWrite(); // free write lock
-		}
-		return true;
-	}
-	
-	protected boolean addDocumentToTree(IDependencyTree dTree) throws IOException {
-		if (!initializeContents()) return false;
-		//Need to create document to get string content...
-		IDocument document = new IFileDocument(resource, this.contents);
-		if (!shouldAddToTree(document)) return false;
-		
-		String docPath = resource.getLocation().toOSString();
-		IScannerInfo newInfo = new ScannerInfo((this.buildInfo != null) ? this.buildInfo.getDefinedSymbols() : null,(this.buildInfo != null) ? this.buildInfo.getIncludePaths() : null);
-		
-		ParserLanguage language = CoreModel.getDefault().hasCCNature( resource.getProject() ) ? ParserLanguage.CPP : ParserLanguage.C;
-		dTree.add(document,docPath,newInfo, resource, language);
-
-		return true;
-	}
-	
-	public boolean initializeContents() {
-		if (this.contents == null) {
-			try {
-				IPath location = resource.getLocation();
-				if (location != null)
-					this.contents = org.eclipse.cdt.internal.core.Util.getFileCharContent(location.toFile(), null);
-			} catch (IOException e) {
-			}
-		}
-		return this.contents != null;
-	}
-
-	public String toString() {
-		return "calculating dependency for:  " + this.resource.getFullPath(); //$NON-NLS-1$
-	}
-	
-	public String[] getFileTypes(){
-		return FILE_TYPES;
-	}
-	
-	public boolean shouldAddToTree(IDocument document) {
-			String type = document.getType();
-			String[] supportedTypes = this.getFileTypes();
-			for (int i = 0; i < supportedTypes.length; ++i) {
-				if (supportedTypes[i].equals(type))
-					return true;
-			}
-			return false;
-	}
-
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java	23 Sep 2003 15:17:13 -0000	1.5
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,423 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.zip.CRC32;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.internal.core.CharOperation;
-import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
-import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
-import org.eclipse.cdt.internal.core.search.processing.JobManager;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.QualifiedName;
-
-/**
- * @author bgheorgh
- */
-public class DependencyManager extends JobManager implements ISourceDependency {
-	/* number of file contents in memory */
-	public static int MAX_FILES_IN_MEMORY = 0;
-
-	public SimpleLookupTable projectNames = new SimpleLookupTable();
-	public SimpleLookupTable dependencyTable;
-	private Map dependencyTrees = new HashMap(5);
-
-	/* read write monitors */
-	private Map monitors = new HashMap(5);
-
-	/* need to save ? */
-	private boolean needToSave = false;
-	private static final CRC32 checksumCalculator = new CRC32();
-	private IPath ccorePluginLocation = null;
-
-	/* can only replace a current state if its less than the new one */
-	private SimpleLookupTable dTreeStates = null;
-	private File savedDTreesFile =
-		new File(getCCorePluginWorkingLocation().append("savedDTrees.txt").toOSString()); //$NON-NLS-1$
-	public static Integer SAVED_STATE = new Integer(0);
-	public static Integer UPDATING_STATE = new Integer(1);
-	public static Integer UNKNOWN_STATE = new Integer(2);
-	public static Integer REBUILDING_STATE = new Integer(3);
-    
-	public static boolean VERBOSE = false;
-	
-	public String processName(){
-		//TODO: BOG Add name to .properties file
-		return "Dependency Tree"; //org.eclipse.cdt.internal.core.search.Util.bind("process.name"); //$NON-NLS-1$
-	}
-	
-	public void reset(){
-		super.reset();
-		
-	    //Get handles on the info providers
-	    //register yourself for updates
-	    
-		if (this.dependencyTrees!= null) {
-			this.dependencyTrees = new HashMap(5);
-			this.monitors = new HashMap(5);
-			this.dTreeStates = null;
-		}
-		
-		this.projectNames = new SimpleLookupTable();
-		this.dependencyTable = new SimpleLookupTable();
-		this.ccorePluginLocation = null;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.ISourceDependency#getProjects(org.eclipse.core.resources.IFile)
-	 */
-	public IProject[] getProjects(IFile file) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.ISourceDependency#getFileDependencies(org.eclipse.core.resources.IProject, org.eclipse.core.resources.IFile)
-	 */
-	public synchronized String[] getFileDependencies(IProject project, IFile file) {
-		IPath path =project.getFullPath();
-		IDependencyTree dTree= this.getDependencyTree(path,true,false);
-		try{
-			if (dTree != null) { 
-			//dTree.printIncludeEntries();
-			//dTree.printIndexedFiles();
-			String[] files = dTree.getFileDependencies(file.getFullPath());
-			 return files;
-			}
-		}
-		catch(Exception e){}
-		return null;
-	}
-
-	public synchronized IDependencyTree getDependencyTree(IPath path, boolean reuseExistingFile, boolean createIfMissing) {
-		IDependencyTree dTree = (IDependencyTree) dependencyTrees.get(path);
-		if (dTree == null){
-			String treeName = computeTreeName(path);
-			Object state = getTreeStates().get(treeName);
-			Integer currentDTreeState = state == null ? UNKNOWN_STATE : (Integer) state;
-			if (currentDTreeState == UNKNOWN_STATE) {
-				// should only be reachable for query jobs
-					rebuildDTree(treeName, path);
-					return null;
-			}
-			// tree isn't cached, consider reusing an existing tree file
-			if (reuseExistingFile) {
-				File treeFile = new File(treeName);
-				if (treeFile.exists()) { // check before creating tree so as to avoid creating a new empty tree if file is missing
-					try {
-						dTree = new DependencyTree(treeName, "Tree for " + path.toOSString(), true /*reuse tree file*/); //$NON-NLS-1$
-						dependencyTrees.put(path, dTree);
-						monitors.put(dTree, new ReadWriteMonitor());
-						return dTree;
-					} catch (IOException e) {
-						//	failed to read the existing file or its no longer compatible
-						 if (currentDTreeState != REBUILDING_STATE) { // rebuild tree if existing file is corrupt, unless the tree is already being rebuilt
-							 if (DependencyManager.VERBOSE)
-								JobManager.verbose("-> cannot reuse existing tree: "+ treeName +" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
-							 rebuildDTree(treeName, path);
-							 return null;
-						 } else {
-							 dTree = null; // will fall thru to createIfMissing & create a empty tree for the rebuild all job to populate
-						 }
-					}
-				}
-				if (currentDTreeState == SAVED_STATE) { // rebuild tree if existing file is missing
-					rebuildDTree(treeName, path);
-					return null;
-				}
-				
-				if (createIfMissing) {
-					try {
-						if (VERBOSE)
-							JobManager.verbose("-> create empty tree: "+treeName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
-						dTree = new DependencyTree(treeName, "Tree for " + path.toOSString(), false /*do not reuse tree file*/); //$NON-NLS-1$
-						dependencyTrees.put(path, dTree);
-						monitors.put(dTree, new ReadWriteMonitor());
-						return dTree;
-					} catch (IOException e) {
-						if (VERBOSE)
-							JobManager.verbose("-> unable to create empty tree: "+treeName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
-						// The file could not be created. Possible reason: the project has been deleted.
-						return null;
-					}
-				}
-			} 	
-		}
-		
-		return dTree;
-	}
-	
-	String computeTreeName(IPath path) {
-			String name = (String) projectNames.get(path);
-			if (name == null) {
-				String pathString = path.toOSString();
-				checksumCalculator.reset();
-				checksumCalculator.update(pathString.getBytes());
-				String fileName = Long.toString(checksumCalculator.getValue()) + ".depTree"; //$NON-NLS-1$
-				if (DependencyManager.VERBOSE)
-					JobManager.verbose("-> dependency tree name for " + pathString + " is " + fileName); //$NON-NLS-1$ //$NON-NLS-2$
-				name = getCCorePluginWorkingLocation().append(fileName).toOSString();
-				projectNames.put(path, name);
-			}
-			return name;
-	}
-		
-	private IPath getCCorePluginWorkingLocation() {
-		if (this.ccorePluginLocation != null) return this.ccorePluginLocation;
-
-		return this.ccorePluginLocation = CCorePlugin.getDefault().getStateLocation();
-	}
-	/**
-	 * DTree access is controlled through a read-write monitor so as
-	 * to ensure there is no concurrent read and write operations
-	 * (only concurrent reading is allowed).
-	 */
-	public ReadWriteMonitor getMonitorFor(IDependencyTree dTree){
-		return (ReadWriteMonitor) monitors.get(dTree);
-	}
-		
-	private SimpleLookupTable getTreeStates() {
-		if (dTreeStates != null) return dTreeStates;
-	
-		this.dTreeStates = new SimpleLookupTable();
-		char[] savedDTreeNames = readDTreeState();
-		if (savedDTreeNames.length > 0) {
-			char[][] names = CharOperation.splitOn('\n', savedDTreeNames);
-			for (int i = 0, l = names.length; i < l; i++) {
-				char[] name = names[i];
-				if (name.length > 0)
-					this.dTreeStates.put(new String(name), SAVED_STATE);
-			}
-		}
-		return this.dTreeStates;
-	}
-	
-	private char[] readDTreeState() {
-		try {
-			return org.eclipse.cdt.internal.core.Util.getFileCharContent(savedDTreesFile, null);
-		} catch (IOException ignored) {
-			if (DependencyManager.VERBOSE)
-				JobManager.verbose("Failed to read saved dTree file names"); //$NON-NLS-1$
-			return new char[0];
-		}
-	}
-	
-	private void rebuildDTree(String treeName, IPath path) {
-		Object target = org.eclipse.cdt.internal.core.Util.getTarget(ResourcesPlugin.getWorkspace().getRoot(), path, true);
-		if (target == null) return;
-	
-		if (DependencyManager.VERBOSE)
-			JobManager.verbose("-> request to rebuild dTree: "+treeName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
-	
-		updateTreeState(treeName, REBUILDING_STATE);
-		DependencyRequest request = null;
-		if (target instanceof IProject) {
-			IProject p = (IProject) target;
-			request = new EntireProjectDependencyTree(p, this);
-		}
-	
-		if (request != null)
-			request(request);
-	}
-	/**
-	 * Trigger addition of the entire content of a project
-	 * Note: the actual operation is performed in background 
-	 */
-	public void generateEntireDependencyTree(IProject project) {
-		if (CCorePlugin.getDefault() == null) return;
-		
-		 /******
-		 *TODO: BOG Remove these methods once the depTree is
-		 *fully integrated
-		 */
-//		 if (!isEnabled(project)) return;
-
-		// check if the same request is not already in the queue
-		DependencyRequest request = new EntireProjectDependencyTree(project, this);
-		for (int i = this.jobEnd; i > this.jobStart; i--) // NB: don't check job at jobStart, as it may have already started (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=32488)
-			if (request.equals(this.awaitingJobs[i])) return;
-		this.request(request);
-	}
-
-	private void updateTreeState(String treeName, Integer treeState) {
-		getTreeStates(); // ensure the states are initialized
-		if (treeState != null) {
-			if (treeState.equals(dTreeStates.get(treeName))) return; // not changed
-			dTreeStates.put(treeName, treeState);
-		} else {
-			if (!dTreeStates.containsKey(treeName)) return; // did not exist anyway
-			dTreeStates.removeKey(treeName);
-		}
-
-		BufferedWriter writer = null;
-		try {
-			writer = new BufferedWriter(new FileWriter(savedDTreesFile));
-			Object[] indexNames = dTreeStates.keyTable;
-			Object[] states = dTreeStates.valueTable;
-			for (int i = 0, l = states.length; i < l; i++) {
-				if (states[i] == SAVED_STATE) {
-					writer.write((String) indexNames[i]);
-					writer.write('\n');
-				}
-			}
-		} catch (IOException ignored) {
-			if (DependencyManager.VERBOSE)
-				JobManager.verbose("Failed to write saved dTree file names"); //$NON-NLS-1$
-		} finally {
-			if (writer != null) {
-				try {
-					writer.close();
-				} catch (IOException e) {}
-			}
-		}
-		if (DependencyManager.VERBOSE) {
-			String state = "?"; //$NON-NLS-1$
-			if (treeState == SAVED_STATE) state = "SAVED"; //$NON-NLS-1$
-			else if (treeState == UPDATING_STATE) state = "UPDATING"; //$NON-NLS-1$
-			else if (treeState == UNKNOWN_STATE) state = "UNKNOWN"; //$NON-NLS-1$
-			else if (treeState == REBUILDING_STATE) state = "REBUILDING"; //$NON-NLS-1$
-			JobManager.verbose("-> dTree state updated to: " + state + " for: "+treeName); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-	
-	public void jobWasCancelled(IPath path) {
-		Object o = this.dependencyTrees.get(path);
-		if (o instanceof IDependencyTree) {
-			this.monitors.remove(o);
-			this.dependencyTrees.remove(path);
-		}
-		updateTreeState(computeTreeName(path), UNKNOWN_STATE);
-	}
-	/**
-	 * Trigger removal of a resource from a tree
-	 * Note: the actual operation is performed in background
-	 */
-	public void remove(String resourceName, IPath indexedContainer){
-		//request(new RemoveFromIndex(resourceName, indexedContainer, this));
-		if (DependencyManager.VERBOSE)
-		  JobManager.verbose("remove file from tree " + resourceName);
-	}
-	/**
-	 * Removes the tree for a given path. 
-	 * This is a no-op if the tree did not exist.
-	 */
-	public synchronized void removeTree(IPath path) {
-		if (DependencyManager.VERBOSE)
-			JobManager.verbose("removing dependency tree " + path); //$NON-NLS-1$
-		String treeName = computeTreeName(path);
-		File indexFile = new File(treeName);
-		if (indexFile.exists())
-			indexFile.delete();
-		Object o = this.dependencyTrees.get(path);
-		if (o instanceof IDependencyTree)
-			this.monitors.remove(o);
-		this.dependencyTrees.remove(path);
-		updateTreeState(treeName, null);
-	}
-	
-	public synchronized void addToTable(String fileName, IFile resource){
-		ArrayList projectContainer = (ArrayList) dependencyTable.get(fileName);
-		if (projectContainer == null) {
-			ArrayList newProjectContainer = new ArrayList();
-			newProjectContainer.add(resource.getLocation());
-			
-			dependencyTable.put(fileName, newProjectContainer);
-		}
-		else {
-		  if (!projectContainer.contains(resource.getLocation())){
-		  	projectContainer.add(resource.getLocation());
-		  }
-		}
-	}
-	
-	public synchronized void removeFromTable(String fileName, IPath refToRemove){
-		ArrayList projectContainer = (ArrayList) dependencyTable.get(fileName);
-		if (projectContainer != null) {
-			int index = projectContainer.indexOf(refToRemove);
-			projectContainer.remove(refToRemove);
-		}
-	}
-	
-	public synchronized ArrayList getProjectDependsForFile(String fileName){
-		ArrayList projectContainer = (ArrayList) dependencyTable.get(fileName);
-		return projectContainer;
-	}	
-	
-	/**
-	 * @param file
-	 * @param path
-	 * @param info
-	 */
-	public void addSource(IFile file, IPath path, IScannerInfo info) {
-		if (CCorePlugin.getDefault() == null) return;	
-			AddFileToDependencyTree job = new AddFileToDependencyTree(file, path, this, info);
-			if (this.awaitingJobsCount() < MAX_FILES_IN_MEMORY) {
-				// reduces the chance that the file is open later on, preventing it from being deleted
-				if (!job.initializeContents()) return;
-			}
-			request(job);
-	}
-	
-//	/*************
-//	 *TODO: Remove these methods once the depTree is
-//	 *fully integrated
-//	 * START OF TEMP D-TREE ENABLE SECTION
-//	 */
-//	final static String DEP_MODEL_ID = CCorePlugin.PLUGIN_ID + ".dependencytree";
-//	final static String ACTIVATION = "enable";
-//	
-//	static QualifiedName activationKey = new QualifiedName(DEP_MODEL_ID, ACTIVATION);
-//	
-//	public boolean isEnabled(IProject project) {
-//		String prop = null;
-//		try {
-//			if (project != null) {
-//				prop = project.getPersistentProperty(activationKey);
-//			}
-//		} catch (CoreException e) {
-//		}
-//		return ((prop != null) && prop.equalsIgnoreCase("true"));
-//	}
-//	
-//	public void setEnabled(IProject project, boolean on) {
-//		try {
-//			if (project != null) {
-//				Boolean newValue = new Boolean(on);
-//				Boolean oldValue = new Boolean(isEnabled(project));
-//				if (!oldValue.equals(newValue)) {
-//					project.setPersistentProperty(activationKey, newValue.toString());
-//					if (on) {
-//						generateEntireDependencyTree(project);
-//					} else {
-//						//remove(project);
-//					}
-//				}
-//			}
-//		} catch (CoreException e) {
-//		}
-//	}
-//
-//	/************
-//	 * END OF TEMP D-TREE ENABLE SECTION
-//	 */
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyQueryJob.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyQueryJob.java,v
retrieving revision 1.2
diff -u -r1.2 DependencyQueryJob.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyQueryJob.java	9 Sep 2003 17:53:51 -0000	1.2
+++ dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyQueryJob.java	26 Sep 2003 17:26:33 -0000
@@ -3,14 +3,27 @@
  */
 package org.eclipse.cdt.internal.core.sourcedependency;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.cdt.core.search.SearchEngine;
+import org.eclipse.cdt.internal.core.index.IDocument;
+import org.eclipse.cdt.internal.core.index.IIndex;
+import org.eclipse.cdt.internal.core.index.impl.BlocksIndexInput;
+import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
+import org.eclipse.cdt.internal.core.index.impl.IncludeEntry;
+import org.eclipse.cdt.internal.core.index.impl.IndexInput;
+import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
+import org.eclipse.cdt.internal.core.search.IndexSelector;
+import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
 import org.eclipse.cdt.internal.core.search.processing.IJob;
+import org.eclipse.cdt.internal.core.search.processing.JobManager;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
 
 /**
  * @author bgheorgh
@@ -20,13 +33,14 @@
 	IProject project;
 	IFile file;
 	ArrayList includeFiles;
-	DependencyManager depManager;
-	protected DependencySelector depSelector;
+	IndexManager indexManager;
+	protected IndexSelector indexSelector;
+	protected long executionTime = 0;
 	
-	public DependencyQueryJob(IProject project, IFile file, DependencyManager depMan, List includeFiles) {
+	public DependencyQueryJob(IProject project, IFile file, IndexManager inMan, List includeFiles) {
 		this.project = project;
 		this.file = file;
-		this.depManager = depMan;
+		this.indexManager = inMan;
 		this.includeFiles = (ArrayList) includeFiles;
 	}
 
@@ -46,27 +60,167 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.search.processing.IJob#execute(org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public boolean execute(IProgressMonitor progress) {
+	public boolean execute(IProgressMonitor progressMonitor) {
+		if ((project == null) ||(file == null)) return false;
+		//
+		if (progressMonitor != null && progressMonitor.isCanceled())
+					throw new OperationCanceledException();
+				boolean isComplete = COMPLETE;
+				executionTime = 0;
+				if (this.indexSelector == null) {
+					this.indexSelector =
+						new IndexSelector(SearchEngine.createWorkspaceScope(), null, false, this.indexManager);
+				}
+				IIndex[] searchIndexes = this.indexSelector.getIndexes();
+				try {
+					int max = searchIndexes.length;
+					if (progressMonitor != null) {
+						progressMonitor.beginTask("", max); //$NON-NLS-1$
+					}
+					for (int i = 0; i < max; i++) {
+						isComplete &= getFileDeps(searchIndexes[i], progressMonitor);
+						if (progressMonitor != null) {
+							if (progressMonitor.isCanceled()) {
+								throw new OperationCanceledException();
+							} else {
+								progressMonitor.worked(1);
+							}
+						}
+					}
+					if (JobManager.VERBOSE) {
+						JobManager.verbose("-> execution time: " + executionTime + "ms - " + this);//$NON-NLS-1$//$NON-NLS-2$
+					}
+					return isComplete;
+				} finally {
+					if (progressMonitor != null) {
+						progressMonitor.done();
+					}
+				}
+	}
+
+	/**
+	 * @param index
+	 * @param progressMonitor
+	 * @return
+	 */
+	public boolean getFileDeps(IIndex index, IProgressMonitor progressMonitor){
+	
+		if (progressMonitor != null && progressMonitor.isCanceled())
+			throw new OperationCanceledException();
+
+//			IIndex inMemIndex = indexManager.peekAtIndex(new Path(((Index)index).toString.substring("Index for ".length()).replace('\\','/')));
+//			if (inMemIndex != index) {
+//				System.out.println("SANITY CHECK: search job using obsolete index: ["+index+ "] instead of: ["+inMemIndex+"]");
+//			}
+	
+		if (index == null)
+			return COMPLETE;
+		ReadWriteMonitor monitor = indexManager.getMonitorFor(index);
+		if (monitor == null)
+			return COMPLETE; // index got deleted since acquired
+		try {
+			monitor.enterRead(); // ask permission to read
+
+			/* if index has changed, commit these before querying */
+			if (index.hasChanged()) {
+				try {
+					monitor.exitRead(); // free read lock
+					monitor.enterWrite(); // ask permission to write
+					this.indexManager.saveIndex(index);
+				} catch (IOException e) {
+					return FAILED;
+				} finally {
+					monitor.exitWriteEnterRead(); // finished writing and reacquire read permission
+				}
+			}
+			long start = System.currentTimeMillis();
+			//
+			IndexInput input = new BlocksIndexInput(index.getIndexFile());
+			try {
+				input.open();
+				findDep(input);
+			} finally {
+				input.close();
+			}
+			//
+			//String[] tempFiles = this.indexManager.getFileDependencies(project,file);
+//			if (tempFiles != null){
+//				System.out.println("DQJOB File Deps : " + tempFiles.length);
+//				for (int i=0; i<tempFiles.length; i++){
+//							includeFiles.add(tempFiles[i]);
+//				}
+//			}
+			executionTime += System.currentTimeMillis() - start;
+			return COMPLETE;
+		}
+		catch (IOException e){
+			return FAILED;
+		}
+		 finally {
+			monitor.exitRead(); // finished reading
+		}
+	}
+	
+	/**
+	 * @param input
+	 * @param includeFiles
+	 */
+	private void findDep(IndexInput input) throws IOException {
 		
-		if ((project == null) ||(file == null)) return false;		
+		IDocument temp = new IFileDocument(file);
+		IndexedFile dude = input.getIndexedFile(temp);
+		if (dude == null) return;
 		
-		String[] tempFiles = this.depManager.getFileDependencies(project,file);
-		if (tempFiles != null){
-			for (int i=0; i<tempFiles.length; i++){
-						includeFiles.add(tempFiles[i]);
-			}
-			return true;
+		
+		int fileNum =dude.getFileNumber();
+		IncludeEntry[] tempEntries = input.queryIncludeEntries(fileNum);
+		if (tempEntries != null){
+			for (int r=0; r<tempEntries.length; r++){
+			   char[] tempFile = tempEntries[r].getFile();
+			   StringBuffer tempString = new StringBuffer();
+			   tempString.append(tempFile);
+			   includeFiles.add(tempString.toString());
+		   }
 		}
-		return false;
+       
+		
+		//
+//		if (indexFile == null)
+//				 return new String[0];
+//		 
+//				int fileNum = indexFile.getFileNumber();
+//				IncludeEntry[] tempEntries = addsIndex.getIncludeEntries();
+//				for (int i=0; i<tempEntries.length; i++)
+//				{
+//					int[] fileRefs = tempEntries[i].getRefs();
+//					for (int j=0; j<fileRefs.length; j++)
+//					{
+//						if (fileRefs[j] == fileNum)
+//						{ 
+//							//System.out.println(filePath.toString() + " references " + y[i].toString());
+//							char[] tempFile = tempEntries[i].getFile();
+//							StringBuffer tempString = new StringBuffer();
+//							tempString.append(tempFile);
+//							tempFileReturn.add(tempString.toString());
+//							break;
+//						}
+//					}
+//				}
+//				
+		//
+	}
+
+	public String toString() {
+		return "searching for the dependencies of" + file.getName(); //$NON-NLS-1$
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.search.processing.IJob#isReadyToRun()
 	 */
 	public boolean isReadyToRun() {
-		if (this.depSelector == null) { // only check once. As long as this job is used, it will keep the same index picture
-			this.depSelector = new DependencySelector(SearchEngine.createWorkspaceScope(), null, false, this.depManager);
-			this.depSelector.getIndexes(); // will only cache answer if all indexes were available originally
+		if (this.indexSelector == null) { // only check once. As long as this job is used, it will keep the same index picture
+			this.indexSelector = new IndexSelector(SearchEngine.createWorkspaceScope(), null, false, this.indexManager);
+			this.indexSelector.getIndexes(); // will only cache answer if all indexes were available originally
 		}
 		return true;
 	}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java	24 Jul 2003 14:15:06 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,64 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.io.IOException;
-
-import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
-import org.eclipse.cdt.internal.core.search.processing.IJob;
-import org.eclipse.core.runtime.IPath;
-
-public abstract class DependencyRequest implements IJob {
-	protected boolean isCancelled = false;
-	protected DependencyManager manager;
-	protected IPath dependencyTreePath;
-		
-	public DependencyRequest(IPath path, DependencyManager manager) {
-		this.dependencyTreePath = path;
-		this.manager = manager;
-	}
-
-	public DependencyRequest(DependencyManager manager) {
-			this.manager = manager;
-	}
-	
-	public boolean belongsTo(String projectName) {
-		return projectName.equals(this.dependencyTreePath.segment(0));
-	}
-	
-	public void cancel() {
-		this.manager.jobWasCancelled(this.dependencyTreePath);
-		this.isCancelled = true;
-	}
-	
-	public boolean isReadyToRun() {
-		return true;
-	}
-	/*
-	 * This code is assumed to be invoked while monitor has read lock
-	 */
-	protected void saveIfNecessary(IDependencyTree tree, ReadWriteMonitor monitor) throws IOException {
-		/* if tree has changed, commit these before querying */
-		if (tree.hasChanged()) {
-			try {
-				monitor.exitRead(); // free read lock
-				monitor.enterWrite(); // ask permission to write
-				//this.manager.saveTree(tree);
-			} finally {
-				monitor.exitWriteEnterRead(); // finished writing and reacquire read permission
-			}
-		}
-	}
-	
-	protected Integer updatedIndexState() {
-		return DependencyManager.UPDATING_STATE;
-	}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java	24 Jul 2003 14:15:06 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,60 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.util.LinkedList;
-
-import org.eclipse.cdt.core.parser.ast.IASTInclusion;
-import org.eclipse.cdt.internal.core.index.IDocument;
-import org.eclipse.cdt.internal.core.parser.NullSourceElementRequestor;
-
-public class DependencyRequestor extends NullSourceElementRequestor {
-	PreprocessorOutput preprocessor;
-	IDocument document;
-	private IASTInclusion currentInclude = null;
-	private LinkedList includeStack = new LinkedList();
-
-    public DependencyRequestor(PreprocessorOutput p, IDocument doc){
-    	this.preprocessor = p;
-    	this.document = doc;
-    }
-	
-	public void enterInclusion(IASTInclusion inclusion) {
-		//System.out.println("enterInclusion " + inclusion.getName());
-		//Get parent
-		IASTInclusion parent = peekInclude();
-		preprocessor.addInclude(inclusion, parent);
-		//Push on stack
-		pushInclude(inclusion);
-	}
-	
-	public void exitInclusion(IASTInclusion inclusion) {
-		// TODO Auto-generated method stub
-		//System.out.println("Exit inclusion " + inclusion.getFullFileName());
-		//Pop
-		popInclude();
-	}
-	
-	private void pushInclude( IASTInclusion inclusion ){
-			includeStack.addFirst( currentInclude );
-			currentInclude = inclusion;
-	}
-	
-	private IASTInclusion popInclude(){
-		IASTInclusion oldInclude = currentInclude;
-		currentInclude = (includeStack.size() > 0 ) ? (IASTInclusion) includeStack.removeFirst() : null;
-		return oldInclude;
-	}
-	
-	private IASTInclusion peekInclude(){
-		return currentInclude;
-	}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java	9 Sep 2003 17:53:51 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,114 +0,0 @@
-/*
- * Created on Aug 26, 2003
- */
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.util.ArrayList;
-
-import org.eclipse.cdt.core.model.ICElement;
-import org.eclipse.cdt.core.model.ICModel;
-import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.core.search.ICSearchScope;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * @author bgheorgh
- */
-public class DependencySelector {
-
-	/**
-	 * 
-	 */
-	public DependencySelector(
-	ICSearchScope searchScope,
-	ICElement focus,
-	boolean isPolymorphicSearch,
-	DependencyManager depManager) {
-			this.searchScope = searchScope;
-			this.focus = focus;
-			this.depManager = depManager;
-			this.isPolymorphicSearch = isPolymorphicSearch;
-	}
-	    ICSearchScope searchScope;
-		ICElement focus;
-		DependencyManager depManager;
-		IPath[] treeKeys; // cache of the keys for looking index up
-		boolean isPolymorphicSearch;
-
-		/**
-		 * Returns whether elements of the given project can see the given focus (an ICProject) 
-		 */
-		public static boolean canSeeFocus(ICElement focus, boolean isPolymorphicSearch, IPath projectPath) {
-			//TODO: BOG Temp - Provide Proper Impl
-			ICModel model = focus.getCModel();
-			ICProject project = getCProject(projectPath, model);
-			return true;
-		}
-		/*
-		 *  Compute the list of paths which are keying index files.
-		 */
-		private void initializeIndexKeys() {
-		
-			ArrayList requiredIndexKeys = new ArrayList();
-			IPath[] projects = this.searchScope.enclosingProjects();
-			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-			ICElement projectFocus = this.focus == null ? null : getProject(this.focus);
-			for (int i = 0; i < projects.length; i++) {
-				IPath location;
-				IPath path = projects[i];
-				if ((!root.getProject(path.lastSegment()).exists()) // if project does not exist
-					&& path.segmentCount() > 1
-					&& ((location = root.getFile(path).getLocation()) == null
-						|| !new java.io.File(location.toOSString()).exists()) // and internal jar file does not exist
-					&& !new java.io.File(path.toOSString()).exists()) { // and external jar file does not exist
-						continue;
-				}
-				if (projectFocus == null || canSeeFocus(projectFocus, this.isPolymorphicSearch, path)) {
-					if (requiredIndexKeys.indexOf(path) == -1) {
-						requiredIndexKeys.add(path);
-					}
-				}
-			}
-			this.treeKeys = new IPath[requiredIndexKeys.size()];
-			requiredIndexKeys.toArray(this.treeKeys);
-		}
-		
-		public IDependencyTree[] getIndexes() {
-			if (this.treeKeys == null) {
-				this.initializeIndexKeys(); 
-			}
-			// acquire the in-memory indexes on the fly
-			int length = this.treeKeys.length;
-			IDependencyTree[] indexes = new IDependencyTree[length];
-			int count = 0;
-			for (int i = 0; i < length; i++){
-				// may trigger some index recreation work
-				IDependencyTree index = depManager.getDependencyTree(treeKeys[i], true /*reuse index file*/, false /*do not create if none*/);
-				if (index != null) indexes[count++] = index; // only consider indexes which are ready yet
-			}
-			if (count != length) {
-				System.arraycopy(indexes, 0, indexes=new IDependencyTree[count], 0, count);
-			}
-			return indexes;
-		}
-		/**
-		 * Returns the project that corresponds to the given path.
-		 * Returns null if the path doesn't correspond to a project.
-		 */
-		private static ICProject getCProject(IPath path, ICModel model) {
-			ICProject project = model.getCProject(path.lastSegment());
-			if (project.exists()) {
-				return project;
-			} else {
-				return null;
-			}
-		}
-		public static ICElement getProject(ICElement element) {
-			while (!(element instanceof ICProject)) {
-				element = element.getParent();
-			}
-			return element;
-		}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java	11 Sep 2003 17:13:03 -0000	1.4
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,195 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.cdt.core.parser.IPreprocessor;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.ParserLanguage;
-import org.eclipse.cdt.core.parser.ParserFactory;
-import org.eclipse.cdt.core.parser.ParserMode;
-import org.eclipse.cdt.internal.core.index.IDocument;
-import org.eclipse.cdt.internal.core.index.IQueryResult;
-import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
-import org.eclipse.cdt.internal.core.sourcedependency.impl.InMemoryTree;
-import org.eclipse.cdt.internal.core.sourcedependency.impl.IncludeEntry;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
-
-
-public class DependencyTree implements IDependencyTree {
-	/**
-	 * Maximum size of the index in memory.
-	 */
-	public static final int MAX_FOOTPRINT= 1000000;
-	protected InMemoryTree addsTree;
-	
-	public DependencyTree(String treeName, String string, boolean b) throws IOException{
-		super();
-		initialize();
-	}
-
-	public DependencyTree() throws IOException {
-		initialize();
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#empty()
-	 */
-	public void empty() throws IOException {
-		// TODO Auto-generated method stub
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#getIndexFile()
-	 */
-	public File getIndexFile() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	/**
-	 * Returns the number of referencing files in this tree. 
-	 */
-	public int getNumDocuments() throws IOException {
-		return addsTree.getNumFiles();
-	}
-	/**
-	 * Returns the number of include entries in this tree.
-	 * @return
-	 * @throws IOException
-	 */
-	public int getNumIncludes() throws IOException {
-		return addsTree.getNumIncludes();
-	}
-	/**
-	 * Returns the path corresponding to a given document number
-	 */
-	public String getPath(int documentNumber) throws IOException {
-		return null;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#hasChanged()
-	 */
-	public boolean hasChanged() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#query(java.lang.String)
-	 */
-	public IQueryResult[] query(String word) throws IOException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#queryInDocumentNames(java.lang.String)
-	 */
-	public IQueryResult[] queryInDocumentNames(String word)
-		throws IOException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#save()
-	 */
-	public void save() throws IOException {
-		// TODO Auto-generated method stub
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#remove(java.lang.String)
-	 */
-	public void remove(String documentName) throws IOException {
-		//IndexedFile file= addsTree.getIndexedFile(documentName);
-		//if (file != null) {
-		//}
-	
-	}
-	/**
-	 * Add the file that will be preprocessed to the tree, create a new
-	 * preprocessor output and preprocess!
-	 */
-	public void add(IDocument document, String docPath, IScannerInfo newInfo, IFile file, ParserLanguage language) throws IOException  {
-		IndexedFile indexedFile= addsTree.getIndexedFile(document.getName());
-		//if (indexedFile != null)
-			//remove(indexedFile, 0);
-		PreprocessorOutput output= new PreprocessorOutput(addsTree, file);
-		DependencyRequestor depReq = new DependencyRequestor(output,document);
-		
-		output.addDocument(document);
-		
-		IPreprocessor preprocessor = ParserFactory.createPreprocessor( new StringReader( document.getStringContent() ),docPath , newInfo, ParserMode.COMPLETE_PARSE, language, depReq);
-		preprocessor.process();
-	}
-	/**
-	 * Initialises the indexGenerator.
-	 */
-	public void initialize() throws IOException {
-		//initialisation of addsTree
-		addsTree= new InMemoryTree();
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#getFileDepencies(int)
-	 */
-	public String[] getFileDependencies(IPath filePath) throws IOException {
-		List tempFileReturn = new ArrayList();
-		IndexedFile indexFile = addsTree.getIndexedFile(filePath.toString());
-		
-		if (indexFile == null)
-		 return new String[0];
-		 
-		int fileNum = indexFile.getFileNumber();
-		IncludeEntry[] tempEntries = addsTree.getIncludeEntries();
-		for (int i=0; i<tempEntries.length; i++)
-		{
-			int[] fileRefs = tempEntries[i].getRefs();
-		    for (int j=0; j<fileRefs.length; j++)
-		    {
-		    	if (fileRefs[j] == fileNum)
-		    	{ 
-		    		//System.out.println(filePath.toString() + " references " + y[i].toString());
-		    		char[] tempFile = tempEntries[i].getFile();
-		    		StringBuffer tempString = new StringBuffer();
-		    		tempString.append(tempFile);
-		    		tempFileReturn.add(tempString.toString());
-		    		break;
-		    	}
-		    }
-		}
-		return (String []) tempFileReturn.toArray(new String[tempFileReturn.size()]);
-	}
-	//TODO: BOG Debug Method Take out
-	public void printIncludeEntries(){
-	 IncludeEntry[] tempEntries = addsTree.getIncludeEntries();
-	 for (int i=0; i<tempEntries.length; i++){
-	 	System.out.println(tempEntries[i].toString());
-	 }
-	}
-	//TODO: BOG Debug Method Take out
-	public void printIndexedFiles() {
-		IndexedFile[] tempFiles = addsTree.getIndexedFiles();
-		for (int i=0;i<tempFiles.length;i++){
-			System.out.println(tempFiles[i].toString());
-		}
-		
-	}
-	
-	/**
-	 * Returns true if the in memory index reaches a critical size, 
-	 * to merge it with the index on the disk.
-	 */
-	protected boolean timeToMerge() {
-		return (addsTree.getFootprint() >= MAX_FOOTPRINT);
-	}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java	9 Sep 2003 17:53:51 -0000	1.3
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,200 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.util.HashSet;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.IScannerInfoProvider;
-import org.eclipse.cdt.internal.core.Util;
-import org.eclipse.cdt.internal.core.index.IQueryResult;
-import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
-import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
-import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
-import org.eclipse.cdt.internal.core.search.processing.JobManager;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceProxy;
-import org.eclipse.core.resources.IResourceProxyVisitor;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-/**
- * @author bgheorgh
- */
-public class EntireProjectDependencyTree extends DependencyRequest {
-	IProject project;
-	
-	public EntireProjectDependencyTree(IProject project, DependencyManager manager) {
-		super(project.getFullPath(), manager);
-		this.project = project;
-	}
-
-	public boolean equals(Object o) {
-		if (o instanceof EntireProjectDependencyTree)
-			return this.project.equals(((EntireProjectDependencyTree) o).project);
-		return false;
-	}
-	
-	public boolean execute(IProgressMonitor progressMonitor) {
-
-		if (progressMonitor != null && progressMonitor.isCanceled()) return true;
-		if (!project.isAccessible()) return true; // nothing to do
-
-		IDependencyTree dTree = this.manager.getDependencyTree(this.dependencyTreePath, true, /*reuse index file*/ true /*create if none*/);
-		if (dTree == null) return true;
-		ReadWriteMonitor monitor = this.manager.getMonitorFor(dTree);
-		if (monitor == null) return true; // tree got deleted since acquired
-
-		try {
-			monitor.enterRead(); // ask permission to read
-			saveIfNecessary(dTree, monitor);
-
-			IQueryResult[] results = dTree.queryInDocumentNames(""); // get all file names already stored in this project //$NON-NLS-1$
-			int max = results == null ? 0 : results.length;
-			final SimpleLookupTable indexedFileNames = new SimpleLookupTable(max == 0 ? 33 : max + 11);
-			final String OK = "OK"; //$NON-NLS-1$
-			final String DELETED = "DELETED"; //$NON-NLS-1$
-			for (int i = 0; i < max; i++)
-				indexedFileNames.put(results[i].getPath(), DELETED);
-			final long indexLastModified = max == 0 ? 0L : dTree.getIndexFile().lastModified();
-
-			IPath cProjectPath = project.getFullPath();
-		
-			IWorkspaceRoot root = this.project.getWorkspace().getRoot();
-			IResource sourceFolder = root.findMember(cProjectPath);
-		
-			if (this.isCancelled) return false;
-
-			if (sourceFolder != null) {
-					
-				//collect output locations if source is project (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=32041)
-				final HashSet outputs = new HashSet();
-		
-				final boolean hasOutputs = !outputs.isEmpty();
-					
-				final char[][] patterns = null;
-				if (max == 0) {
-					sourceFolder.accept(
-							new IResourceProxyVisitor() {
-								public boolean visit(IResourceProxy proxy) {
-									if (isCancelled) return false;
-									switch(proxy.getType()) {
-										case IResource.FILE :
-//											TODO: BOG Put the file name checking back
-										//if (Util.isCCFileName(proxy.getName())) {
-											IResource resource = proxy.requestResource();
-											if (resource.getLocation() != null && (patterns == null || !Util.isExcluded(resource, patterns))) {
-												String name = new IFileDocument((IFile) resource).getName();
-												indexedFileNames.put(name, resource);
-											}
-										//}
-											return false;
-		
-										case IResource.FOLDER :
-												if (patterns != null && Util.isExcluded(proxy.requestResource(), patterns))
-													return false;
-												if (hasOutputs && outputs.contains(proxy.requestFullPath())) {
-													return false;
-												}
-										}
-										return true;
-								 }
-								},
-								IResource.NONE
-							);
-						} else {
-							sourceFolder.accept(
-								new IResourceProxyVisitor() {
-									public boolean visit(IResourceProxy proxy) {
-										if (isCancelled) return false;
-										switch(proxy.getType()) {
-											case IResource.FILE :
-//												TODO: BOG Put the file name checking back
-											//	if (Util.isCCFileName(proxy.getName())) {
-													IResource resource = proxy.requestResource();
-													IPath path = resource.getLocation();
-													if (path != null && (patterns == null || !Util.isExcluded(resource, patterns))) {
-														String name = new IFileDocument((IFile) resource).getName();
-														indexedFileNames.put(name,
-															indexedFileNames.get(name) == null || indexLastModified < path.toFile().lastModified()
-																? (Object) resource
-																: (Object) OK);
-													}
-												//}
-												return false;
-											case IResource.FOLDER :
-												if (patterns != null && Util.isExcluded(proxy.requestResource(), patterns))
-													return false;
-												if (hasOutputs && outputs.contains(proxy.requestFullPath())) {
-													return false;
-												}
-										}
-										return true;
-									}
-								},
-								IResource.NONE
-							);
-						}
-					}
-									
-			Object[] names = indexedFileNames.keyTable;
-			Object[] values = indexedFileNames.valueTable;
-			boolean shouldSave = false;
-			for (int i = 0, length = names.length; i < length; i++) {
-				String name = (String) names[i];
-				if (name != null) {
-					if (this.isCancelled) return false;
-
-					Object value = values[i];
-					if (value != OK) {
-						shouldSave = true;
-					if (value == DELETED)
-							this.manager.remove(name, this.dependencyTreePath);
-					else{
-						IScannerInfo scanInfo = null;
-						IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
-						if (provider != null){
-							scanInfo = provider.getScannerInformation(project);
-						}
-						this.manager.addSource((IFile) value, this.dependencyTreePath, scanInfo);
-					}
-				}
-			  }
-			}
-		} catch (/*IO*/Exception e) {
-			if (DependencyManager.VERBOSE) {
-				JobManager.verbose("-> failed to generate tree " + this.project + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
-				e.printStackTrace();
-			}
-			this.manager.removeTree(this.dependencyTreePath);
-			return false;
-		} finally {
-			monitor.exitRead(); // free read lock
-		}
-	 return true;
-	}
-
-	public int hashCode() {
-		  return this.project.hashCode();
-	}
-	
-    protected Integer updatedIndexState() {
-	  return DependencyManager.REBUILDING_STATE;
-    }
-
-    public String toString() {
-	  return "calculating dependency tree for project " + this.project.getFullPath(); //$NON-NLS-1$
-    }
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java	9 Sep 2003 17:53:51 -0000	1.3
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,85 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.ParserLanguage;
-import org.eclipse.cdt.internal.core.index.IDocument;
-import org.eclipse.cdt.internal.core.index.IQueryResult;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
-
-public interface IDependencyTree {
-	/**
-	 * Adds the given document to the index.
-	 */
-	void add(IDocument document, String docPath, IScannerInfo newInfo, IFile file, ParserLanguage language) throws IOException;
-
-	/**
-	 * Empties the index.
-	 */
-	void empty() throws IOException;
-	/**
-	 * Returns the index file on the disk.
-	 */
-	File getIndexFile();
-	/**
-	 * Returns the number of documents indexed.
-	 */
-	int getNumDocuments() throws IOException;
-	/**
-	 * Returns the number of unique words indexed.
-	 */
-	int getNumIncludes() throws IOException;
-	/**
-	 * Returns the path corresponding to a given document number
-	 */
-	String getPath(int documentNumber) throws IOException;
-	/**
-	 * Ansers true if has some changes to save.
-	 */
-	boolean hasChanged();
-	/**
-	 * Returns the paths of the documents containing the given word.
-	 */
-	IQueryResult[] query(String word) throws IOException;
-	/**
-	 * Returns the paths of the documents whose names contain the given word.
-	 */
-	IQueryResult[] queryInDocumentNames(String word) throws IOException;
-		
-	/**
-	 * Removes the corresponding document from the tree.
-	 */
-	void remove(String documentName) throws IOException;
-	/**
-	 * Saves the index on the disk.
-	 */
-	void save() throws IOException;
-	/**
-	 * Gets the files that are included by the passed in file.
-	 */
-	String[] getFileDependencies(IPath filePath) throws IOException;
-	//	TODO: BOG Debug Method Take out
-	/**
-	 * Prints all of the IncludeEntries for this project.
-	 */
-	public void printIncludeEntries();
-	//	TODO: BOG Debug Method Take out
-	/**
-	 * Prints all of the IndexedFiles for this project.
-	 */
-	public void printIndexedFiles();
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java	24 Jul 2003 14:15:06 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import org.eclipse.cdt.internal.core.index.IDocument;
-
-public interface IPreprocessorOutput {
-	public void addDocument(IDocument document);
-	public void addRef(char[] word);
-	public void addRef(String word);
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java	24 Jul 2003 14:15:06 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
- 
-package org.eclipse.cdt.internal.core.sourcedependency;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-
-public interface ISourceDependency {
-	IProject[] getProjects(IFile file);
-	String[] getFileDependencies(IProject project, IFile file);
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/Node.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/Node.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/Node.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ dependency/org/eclipse/cdt/internal/core/sourcedependency/Node.java	26 Sep 2003 17:26:33 -0000
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.internal.core.sourcedependency;
+
+/**
+ * @author bgheorgh
+ */
+public class Node {
+
+	int fileRef;
+	int nodeId;
+	
+	public Node(int file, int id){
+		this.fileRef = file;
+		this.nodeId = id;
+	}
+	
+	public int getFileRef(){
+		return fileRef;
+	}
+	
+	public int getNodeId(){
+		return nodeId;
+	}
+	
+	public String toString() {
+	 StringBuffer tempBuffer = new StringBuffer();
+	 tempBuffer.append("[FileRef: ");
+	 tempBuffer.append(fileRef);
+	 tempBuffer.append(", Id: ");
+	 tempBuffer.append(nodeId);	
+	 tempBuffer.append("]");
+	 return tempBuffer.toString();
+	}
+
+}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java	9 Sep 2003 17:53:51 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,66 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * IBM Rational Software - Initial API and implementation
-***********************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency;
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.parser.ast.IASTInclusion;
-import org.eclipse.cdt.internal.core.index.IDocument;
-import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
-import org.eclipse.cdt.internal.core.sourcedependency.impl.InMemoryTree;
-import org.eclipse.core.resources.IFile;
-
-
-public class PreprocessorOutput implements IPreprocessorOutput {
-	protected InMemoryTree tree;
-	protected IndexedFile indexedFile;
-	protected IDocument document;
-	protected IFile file;
-	
-	public PreprocessorOutput(InMemoryTree tree, IFile file) {
-		this.tree = tree;
-		this.file = file;
-	}
-
-	public void addInclude(IASTInclusion inclusion, IASTInclusion parent){
-		addRef(inclusion.getFullFileName());
-		addRelatives(inclusion.getFullFileName(),(parent != null ) ? parent.getFullFileName() : null);
-	
-		DependencyManager depMan = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
-		depMan.addToTable(inclusion.getFullFileName(),this.file);	
-		
-	}
-	
-	public void addRelatives(String inclusion, String parent) {
-		if (indexedFile == null) {
-					throw new IllegalStateException();
-		}
-		tree.addRelatives(indexedFile, inclusion, parent);	
-	}
-
-	public void addDocument(IDocument document) {
-		if (indexedFile == null) {
-			indexedFile= tree.addDocument(document);
-		} else {
-			throw new IllegalStateException();
-		}
-	}
-
-	public void addRef(char[] word) {
-		if (indexedFile == null) {
-			throw new IllegalStateException();
-		}
-			tree.addRef(indexedFile, word);	
-	}
-
-	public void addRef(String word) {
-		addRef(word.toCharArray());
-	}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java	9 Sep 2003 17:53:51 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,58 +0,0 @@
-/*
- * Created on Sep 5, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.cdt.internal.core.sourcedependency;
-
-import java.io.IOException;
-
-import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
-import org.eclipse.cdt.internal.core.search.processing.JobManager;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * @author bgheorgh
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class RemoveFromDependencyTree extends DependencyRequest {
-	String resourceName;
-
-		public RemoveFromDependencyTree(String resourceName, IPath dependencyTreePath, DependencyManager manager) {
-			super(dependencyTreePath, manager);
-			this.resourceName = resourceName;
-		}
-	
-		public boolean execute(IProgressMonitor progressMonitor) {
-
-			if (progressMonitor != null && progressMonitor.isCanceled()) return true;
-
-			/* ensure no concurrent write access to index */
-			IDependencyTree depTree = manager.getDependencyTree(this.dependencyTreePath, true, /*reuse index file*/ false /*create if none*/);
-			if (depTree == null) return true;
-			ReadWriteMonitor monitor = manager.getMonitorFor(depTree);
-			if (monitor == null) return true; // index got deleted since acquired
-
-			try {
-				monitor.enterWrite(); // ask permission to write
-				depTree.remove(resourceName);
-			} catch (IOException e) {
-				if (DependencyManager.VERBOSE) {
-					JobManager.verbose("-> failed to remove " + this.resourceName + " from index because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
-					e.printStackTrace();
-				}
-				return false;
-			} finally {
-				monitor.exitWrite(); // free write lock
-			}
-			return true;
-		}
-	
-		public String toString() {
-			return "removing " + this.resourceName + " from dep Tree " + this.dependencyTreePath; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java	9 Sep 2003 17:53:51 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,150 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency.impl;
-
-import org.eclipse.cdt.internal.core.index.IDocument;
-import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
-import org.eclipse.cdt.internal.core.index.impl.IndexedFileHashedArray;
-
-public class InMemoryTree {
-
-	/**
-	* hashtable of IncludeEntrys = includeFiles+numbers of the files they appear in.
-	*/
-	protected IncludeEntryHashedArray includes;
-	/**
-	 * List of IndexedFiles = file name + a unique number.
-	 */
-	protected IndexedFileHashedArray files;
-	/**
-	 * Size of the tree.
-	 */
-	protected long footprint;	
-	private int lastId;
-
-	public InMemoryTree() {
-		init();
-	}
-	/**
-	 * Initialises the fields of the tree
-	 */
-	public void init() {
-		includes= new IncludeEntryHashedArray(501);
-		files= new IndexedFileHashedArray(101);
-		footprint= 0;
-		lastId=0;
-	}
-	
-	public IndexedFile addDocument(IDocument document) {
-		IndexedFile indexedFile= this.files.add(document);
-	    this.footprint += indexedFile.footprint() + 4;
-		
-		return indexedFile;
-	}
-	/**
-	 * Adds the references of the include to the tree (reference = number of the file the include belongs to).
-	 */
-	protected void addRef(char[] include, int[] references) {
-		int size= references.length;
-		int i= 0;
-		while (i < size) {
-			if (references[i] != 0)
-				addRef(include, references[i]);
-			i++;
-		}
-	}
-	/**
-	 * Looks if the include already exists to the tree and adds the fileNum to this include.
-	 * If the include does not exist, it adds it to the tree.
-	 */
-	protected void addRef(char[] include, int fileNum) {
-		IncludeEntry entry= (IncludeEntry) this.includes.get(include);
-		if (entry == null) {
-			entry= new IncludeEntry(include, ++lastId);
-			entry.addRef(fileNum);
-			this.includes.add(entry);
-		} else {
-			this.footprint += entry.addRef(fileNum);
-		}
-	}
-
-	public void addRef(IndexedFile indexedFile, char[] include) {
-		addRef(include, indexedFile.getFileNumber());
-	}
-
-	public void addRef(IndexedFile indexedFile, String include) {
-		addRef(include.toCharArray(), indexedFile.getFileNumber());
-	}
-	/**
-	 * Returns the indexed file with the given path, or null if such file does not exist.
-	 */
-	public IndexedFile getIndexedFile(String path) {
-		return files.get(path);
-	}
-	/**
-	 * @see IIndex#getNumDocuments()
-	 */
-	public int getNumFiles() {
-		return files.size();
-	}
-	/**
-	 * @see IIndex#getNumWords()
-	 */
-	public int getNumIncludes() {
-		return includes.elementSize;
-	}
-	
-	/**
-	 * Returns the include entry corresponding to the given include.
-	 */
-	protected IncludeEntry getIncludeEntry(char[] include) {
-		return (IncludeEntry) includes.get(include);
-	}
-
-	public void addRelatives(IndexedFile indexedFile, String inclusion, String parent) {
-		addRelatives(indexedFile.getFileNumber(),inclusion.toCharArray(),(parent != null ) ? parent.toCharArray() : null);
-	}
-	
-    protected void addRelatives(int fileNumber, char[] inclusion, char[] parent) {
-		IncludeEntry childEntry=null;
-		IncludeEntry parentEntry=null;
-		
-		if (inclusion != null)
-			childEntry= (IncludeEntry) this.includes.get(inclusion);
-	
-		if (parent != null)
-			parentEntry= (IncludeEntry) this.includes.get(parent);
-		
-
-		childEntry.addParent(fileNumber,(parentEntry!=null) ? parentEntry.getID() : -1);
-		
-		if (parent!=null)
-			parentEntry.addChild(fileNumber,(childEntry!=null) ? childEntry.getID() : -1);
-	}	
-	/**
-	 * Returns the include entries contained in the hashtable of includes.
-	 */
-	public IncludeEntry[] getIncludeEntries() {
-		return this.includes.asArray();
-	}
-	
-	public IndexedFile[] getIndexedFiles(){
-		return this.files.asArray();
-	}
-	
-	/**
-	 * Returns the footprint of the index.
-	 */
-	public long getFootprint() {
-		return this.footprint;
-	}
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java	12 Aug 2003 20:20:04 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency.impl;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.eclipse.cdt.internal.core.CharOperation;
-
-/**
- * @author bgheorgh
- */
-public class IncludeEntry {
-
-  protected char[] fFile;
-  protected int fId;
-  protected int fNumRefs;
-  protected int[] fRefs;
-  //TODO: BOG Consider making these arrays...
-  protected ArrayList fParent;
-  protected ArrayList fChild;
-  protected int fNumParent;
-  protected int fNumChild;
-   
-  public IncludeEntry(int id) {
-	this(CharOperation.NO_CHAR,id);
-  }
-		
-  public IncludeEntry(char[] file, int id) {
-	fFile = file;
-	fNumRefs= 0;
-	fRefs= new int[1];
-	fId=id;
-	
-	fParent = new ArrayList(5);
-	fChild = new ArrayList(5);
-	fNumParent = 0;
-	fNumChild = 0;
-  }
-  /**
-   * Adds a reference and records the change in footprint.
-   */
-    public int addRef(int fileNum) {
-      if (fNumRefs > 0 && fRefs[fNumRefs - 1] == fileNum) {
-	   return 0;
-      }
-      if (fNumRefs < fRefs.length) {
-   	    fRefs[fNumRefs++]= fileNum;
-	    return 0;
-      } 
-
-      int newSize= fNumRefs < 4 ? 4 : fNumRefs * 2; // so will start @ 1, grow to 4, 8, 16, 32, 64 etc.
-	  System.arraycopy(fRefs, 0, fRefs= new int[newSize], 0, fNumRefs);
-	  fRefs[fNumRefs++]= fileNum;
-	  return (newSize - fNumRefs + 1) * 4;
-    }
-	  
-	public void addParent(int fileRef, int parentId){
-		Node newParent = new Node(fileRef,parentId);
-		fParent.add(newParent);
-		fNumParent++;
-	}
-	
-	public void addChild(int fileRef, int parentId){
-		Node newChild = new Node(fileRef,parentId);
-		fChild.add(newChild);
-		fNumChild++;
-	}
-	/**
-	 * Returns the number of references, e.g. the number of files this word appears in.
-	 */
-	public int getNumRefs() {
-		return fNumRefs;
-	}
-	/**
-	 * returns the file number in the i position in the list of references.
-	 */
-	public int getRef(int i) {
-		if (i < fNumRefs) return fRefs[i];
-		throw new IndexOutOfBoundsException();
-	}
-	/**
-	 * Returns the references of the includeEntry (the number of the files it appears in).
-	 */
-	public int[] getRefs() {
-		int[] result= new int[fNumRefs];
-		System.arraycopy(fRefs, 0, result, 0, fNumRefs);
-		return result;
-	}
-	/**
-	 * returns the word of the includeEntry.
-	 */
-	public char[] getFile() {
-		return fFile;
-	}
-	
-	/**
-	 * Clears the includeEntry.
-	 */
-	public void reset(char[] word) {
-		for (int i= fNumRefs; i-- > 0;) {
-			fRefs[i]= 0;
-		}
-		fNumRefs= 0;
-		fFile= word;
-	}
-	
-	public int getID(){
-		return fId;
-	}
-	
-	public String toString() {
-		StringBuffer tempBuffer = new StringBuffer();
-		tempBuffer.append("<Name: ");
-		tempBuffer.append(fFile);
-		tempBuffer.append(", Id: ");
-		tempBuffer.append(fId);
-		tempBuffer.append(", Refs:{");
-		for (int i = 0; i < fRefs.length; i++){
-			if (i > 0) tempBuffer.append(',');
-			tempBuffer.append(' ');
-			tempBuffer.append(fRefs[i]);
-		}
-		tempBuffer.append("}, Parents:{");
-		Iterator x = fParent.iterator();
-		while (x.hasNext())
-		{
-			Node tempNode = (Node) x.next();
-			tempBuffer.append(tempNode.toString());
-			if (x.hasNext()) {
-				tempBuffer.append(',');
-				tempBuffer.append(' ');
-			}
-		}
-		tempBuffer.append("}, Children:{");
-		Iterator y = fChild.iterator();
-		while (y.hasNext())
-		{
-			Node tempNode = (Node) y.next();
-			tempBuffer.append(tempNode.toString());
-			if (y.hasNext()) {
-				tempBuffer.append(',');
-				tempBuffer.append(' ');
-			}
-		}
-		tempBuffer.append("} >");
-		return tempBuffer.toString();
-	}
-	
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java	12 Aug 2003 20:20:04 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency.impl;
-
-import org.eclipse.cdt.internal.core.CharOperation;
-
-public final class IncludeEntryHashedArray {
-
-	public IncludeEntry elements[];
-	public int elementSize; // number of elements in the table
-	public int threshold;
-	
-	public IncludeEntryHashedArray(int size) {
-		if (size < 7) size = 7;
-		this.elements = new IncludeEntry[2 * size + 1];
-		this.elementSize = 0;
-		this.threshold = size + 1; // size is the expected number of elements
-	}
-	
-	public IncludeEntry add(IncludeEntry entry) {
-		int length = elements.length;
-		char[] word = entry.getFile();
-		int index = CharOperation.hashCode(word) % length;
-		IncludeEntry current;
-		while ((current = elements[index]) != null) {
-			if (CharOperation.equals(current.getFile(), word)) return elements[index] = entry;
-			if (++index == length) index = 0;
-		}
-		elements[index] = entry;
-	
-		// assumes the threshold is never equal to the size of the table
-		if (++elementSize > threshold) grow();
-		return entry;
-	}
-	
-	public IncludeEntry[] asArray() {
-		IncludeEntry[] array = new IncludeEntry[elementSize];
-		for (int i = 0, j = 0, length = elements.length; i < length; i++) {
-			IncludeEntry current = elements[i];
-			if (current != null) array[j++] = current;
-		}
-		return array;
-	}
-	
-	public IncludeEntry get(char[] word) {
-		int length = elements.length;
-		int index = CharOperation.hashCode(word) % length;
-		IncludeEntry current;
-		while ((current = elements[index]) != null) {
-			if (CharOperation.equals(current.getFile(), word)) return current;
-			if (++index == length) index = 0;
-		}
-		return null;
-	}
-	
-	private void grow() {
-		IncludeEntryHashedArray newArray = new IncludeEntryHashedArray(elementSize * 2); // double the number of expected elements
-		for (int i = 0, length = elements.length; i < length; i++)
-			if (elements[i] != null)
-				newArray.add(elements[i]);
-	
-		this.elements = newArray.elements;
-		this.elementSize = newArray.elementSize;
-		this.threshold = newArray.threshold;
-	}
-	
-	public String toString() {
-		String s = ""; //$NON-NLS-1$
-		IncludeEntry[] entries = asArray();
-		for (int i = 0, length = entries.length; i < length; i++)
-			s += entries[i].toString() + "\n"; 	//$NON-NLS-1$
-		return s;
-	}
-
-}
Index: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/Node.java
===================================================================
RCS file: dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/Node.java
diff -N dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/Node.java
--- dependency/org/eclipse/cdt/internal/core/sourcedependency/impl/Node.java	24 Jul 2003 14:15:06 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.cdt.internal.core.sourcedependency.impl;
-
-/**
- * @author bgheorgh
- */
-public class Node {
-
-	int fileRef;
-	int nodeId;
-	
-	public Node(int file, int id){
-		this.fileRef = file;
-		this.nodeId = id;
-	}
-	
-	public int getFileRef(){
-		return fileRef;
-	}
-	
-	public int getNodeId(){
-		return nodeId;
-	}
-	
-	public String toString() {
-	 StringBuffer tempBuffer = new StringBuffer();
-	 tempBuffer.append("[FileRef: ");
-	 tempBuffer.append(fileRef);
-	 tempBuffer.append(", Id: ");
-	 tempBuffer.append(nodeId);	
-	 tempBuffer.append("]");
-	 return tempBuffer.toString();
-	}
-
-}
Index: index/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/ChangeLog,v
retrieving revision 1.20
diff -u -r1.20 ChangeLog
--- index/ChangeLog	23 Sep 2003 15:17:13 -0000	1.20
+++ index/ChangeLog	26 Sep 2003 17:26:34 -0000
@@ -1,3 +1,35 @@
+2003-09-25 Bogdan Gheorghe
+	Integrated the dependency service into the indexer. Changes
+	as follows:
+	
+	org.eclipse.cdt.internal.core.index.impl:
+	* IIndex - added getFileDependencies methods
+	* IIndexerOutput - modified to allow dep inputs into the index
+	* BlocksIndexInput - modified to allow the reading of the new index (which includes dep entries)
+	* BlocksIndexOutput - added facilities to write includes to the index
+	* GammaCompressedIndexBlock - modified with addIncludeEntry() and nextEntry()
+	* IncludeEntry - new file
+	* IncludeEntryHashedArray - new file
+	* Index - Added getFileDepenendencies to query includeEntries from the index
+	* IndexBlock - modified to reflect changes in GammaCompressedIndexBlock
+	* IndexerOutput - added new methods from IIndexerOutput
+	* IndexInput - modified to allow reading of includes from index files
+	* IndexSummary - modified to save/read new format which contains include info
+	* InMemoryIndex - modified InMemoryIndex to keep track of includes
+	* MergeFactory - modified MergeFactory to accomodate new index file format
+	* SimpleIndexInput - modified to use the new functions for includes in InMemoryIndex
+	* Util - Added a quickSort for includeEntry[]
+	
+	org.eclipse.cdt.internal.core.search.indexing:
+	* AbstractIndexer - modified to getResourceFile being indexed, added bestIncludePrefix 
+	  to find include table entries, addInclude() which accepts IASTInclusion node and adds it
+	  to the index
+	* IIndexConstants - added includeRef constant
+	* IndexManager - got rid of all dependency table references
+	* SourceIndexer - modified to return resource being indexed
+	* SourceIndexerRequestor - Added inclusion handling code; stack for includes
+	
+	
 2003-09-22 Bogdan Gheorghe
 	
 	Took out the old CTags Indexer. Modified IndexAllProject to get
Index: index/org/eclipse/cdt/internal/core/index/IIndex.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/IIndex.java,v
retrieving revision 1.2
diff -u -r1.2 IIndex.java
--- index/org/eclipse/cdt/internal/core/index/IIndex.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/IIndex.java	26 Sep 2003 17:26:34 -0000
@@ -13,6 +13,9 @@
 import java.io.File;
 import java.io.IOException;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+
 /**
  * An IIndex is the interface used to generate an index file, and to make queries on
  * this index.
@@ -71,5 +74,11 @@
 		 * Saves the index on the disk.
 		 */
 		void save() throws IOException;
+		/**
+		 * @param path
+		 * @return
+		 */
+		String[] getFileDependencies(IPath path) throws IOException;
+	    String[] getFileDependencies(IFile file) throws IOException;
 
 }
Index: index/org/eclipse/cdt/internal/core/index/IIndexerOutput.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/IIndexerOutput.java,v
retrieving revision 1.2
diff -u -r1.2 IIndexerOutput.java
--- index/org/eclipse/cdt/internal/core/index/IIndexerOutput.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/IIndexerOutput.java	26 Sep 2003 17:26:34 -0000
@@ -19,4 +19,8 @@
 	public void addDocument(IDocument document);
 	public void addRef(char[] word);
 	public void addRef(String word);
+	//For Dep Tree
+	public void addIncludeRef(char[] word);
+	public void addIncludeRef(String word);
+	public void addRelatives(String inclusion, String parent);
 }
Index: index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexInput.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexInput.java,v
retrieving revision 1.3
diff -u -r1.3 BlocksIndexInput.java
--- index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexInput.java	12 Aug 2003 20:20:04 -0000	1.3
+++ index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexInput.java	26 Sep 2003 17:26:34 -0000
@@ -31,6 +31,7 @@
 	protected int currentFileListBlockNum;
 	protected int currentIndexBlockNum;
 	protected IndexBlock currentIndexBlock;
+	protected IndexBlock currentIncludeIndexBlock;
 	private RandomAccessFile raf;
 	protected File indexFile;
 	protected LRUCache blockCache;
@@ -157,6 +158,12 @@
 		return summary.getNumWords();
 	}
 	/**
+	 * @see IndexInput#getNumIncludes()
+	 */
+	public int getNumIncludes() {
+		return summary.getNumIncludes();
+	}
+	/**
 	 * @see IndexInput#getSource()
 	 */
 	public Object getSource() {
@@ -169,6 +176,7 @@
 		clearCache();
 		setFirstFile();
 		setFirstWord();
+		setFirstInclude();
 	}
 	/**
 	 * @see IndexInput#moveToNextFile()
@@ -388,4 +396,79 @@
 			currentIndexBlock.nextEntry(currentWordEntry);
 		}
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.index.impl.IndexInput#moveToNextIncludeEntry()
+	 */
+	public void moveToNextIncludeEntry() throws IOException {
+		includePosition++;
+		if (!hasMoreIncludes()) {
+			return;
+		}
+		//if end of the current block, we load the next one.
+		boolean endOfBlock= !currentIncludeIndexBlock.nextEntry(currentIncludeEntry);
+		if (endOfBlock) {
+			currentIncludeIndexBlock= getIndexBlock(++currentIndexBlockNum);
+			currentIncludeIndexBlock.nextEntry(currentWordEntry);
+		}
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.index.impl.IndexInput#setFirstInclude()
+	 */
+	protected void setFirstInclude() throws IOException {
+		includePosition= 1;
+		if (getNumIncludes() > 0) {
+			currentIndexBlockNum= summary.getFirstIncludeBlockNum();
+			currentIncludeIndexBlock= getIndexBlock(currentIndexBlockNum);
+			currentIncludeEntry= new IncludeEntry(0);
+			currentIncludeIndexBlock.reset();
+			currentIncludeIndexBlock.nextEntry(currentIncludeEntry);
+		}
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.index.impl.IndexInput#queryIncludeEntries()
+	 */
+	public IncludeEntry[] queryIncludeEntries() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.index.impl.IndexInput#queryIncludeEntries(int)
+	 */
+	public IncludeEntry[] queryIncludeEntries(int fileNum) throws IOException {
+		open();
+		
+		if (fileNum < 0) return null;
+		int[] blockNums = null;
+		blockNums = summary.getBlockNumsForIncludes();
+		
+		if (blockNums == null || blockNums.length == 0)	return null;
+				
+		IncludeEntry[] entries = new IncludeEntry[5];
+		int count = 0;
+		for (int i = 0, max = blockNums.length; i < max; i++) {
+			IndexBlock block = getIndexBlock(blockNums[i]);
+			block.reset();
+			boolean found = false;
+			IncludeEntry entry = new IncludeEntry(0);
+			
+			while (block.nextEntry(entry)) {
+				if (count == entries.length){
+					System.arraycopy(entries, 0, entries = new IncludeEntry[count*2], 0, count);
+				}
+				for (int j=0; j<entry.getNumRefs(); j++){
+					if (entry.getRef(j) == fileNum){
+						entries[count++] = new IncludeEntry(entry.getFile(),entry.getID());
+						break; 
+					}
+				}
+			}
+		}
+		if (count == 0) return null;
+		if (count != entries.length){
+			System.arraycopy(entries, 0, entries = new IncludeEntry[count], 0, count);
+		}
+		return entries;
+	}
+
 }
Index: index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexOutput.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexOutput.java,v
retrieving revision 1.2
diff -u -r1.2 BlocksIndexOutput.java
--- index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexOutput.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/BlocksIndexOutput.java	26 Sep 2003 17:26:34 -0000
@@ -23,18 +23,25 @@
  */
 
 public class BlocksIndexOutput extends IndexOutput {
+
 	protected RandomAccessFile indexOut;
 	protected int blockNum;
 	protected boolean opened= false;
 	protected File indexFile;
+	
 	protected FileListBlock fileListBlock;
 	protected IndexBlock indexBlock;
+	protected IndexBlock includeIndexBlock;
+	
 	protected int numWords= 0;
-	protected IndexSummary summary;
 	protected int numFiles= 0;
+	protected int numIncludes= 0;
+	protected IndexSummary summary;
+	
 	protected boolean firstInBlock;
 	protected boolean firstIndexBlock;
 	protected boolean firstFileListBlock;
+	protected boolean firstIncludeIndexBlock;
 
 	public BlocksIndexOutput(File indexFile) {
 		this.indexFile= indexFile;
@@ -43,6 +50,7 @@
 		firstInBlock= true;
 		firstIndexBlock= true;
 		firstFileListBlock= true;
+		firstIncludeIndexBlock=true;
 	}
 	/**
 	 * @see IndexOutput#addFile
@@ -93,6 +101,31 @@
 		}
 	}
 	/**
+	 * @see IndexOutput#addInclude
+	 */
+	public void addInclude(IncludeEntry entry) throws IOException {
+		if (firstIncludeIndexBlock) {
+			includeIndexBlock= new GammaCompressedIndexBlock(IIndexConstants.BLOCK_SIZE);
+			firstInBlock= true;
+			firstIncludeIndexBlock= false;
+		}
+		if (entry.getNumRefs() == 0)
+			return;
+		if (includeIndexBlock.addIncludeEntry(entry)) {
+			if (firstInBlock) {
+				summary.addFirstIncludeInBlock(entry.getFile(), blockNum);
+				firstInBlock= false;
+			}
+			numIncludes++;
+		} else {
+			if (includeIndexBlock.isEmpty()) {
+				return;
+			}
+			flushWords();
+			addInclude(entry);
+		}
+	}
+	/**
 	 * @see IndexOutput#close
 	 */
 	public void close() throws IOException {
@@ -110,6 +143,7 @@
 		
 		summary.setNumFiles(numFiles);
 		summary.setNumWords(numWords);
+		summary.setNumIncludes(numIncludes);
 		indexOut.seek(blockNum * (long) IIndexConstants.BLOCK_SIZE);
 		summary.write(indexOut);
 		indexOut.seek(0);
@@ -143,6 +177,19 @@
 		}
 	}
 	/**
+	 * 
+	 */
+	public void flushIncludes() throws IOException {
+		if (!firstInBlock 
+			&& includeIndexBlock != null) { // could have added a document without any indexed word, no block created yet
+		includeIndexBlock.flush();
+		includeIndexBlock.write(indexOut, blockNum++);
+		includeIndexBlock.clear();
+		firstInBlock= true;
+	}
+		
+	}
+	/**
 	 * @see IndexOutput#getDestination
 	 */
 	public Object getDestination() {
@@ -156,10 +203,12 @@
 			summary= new IndexSummary();
 			numFiles= 0;
 			numWords= 0;
+			numIncludes=0;
 			blockNum= 1;
 			firstInBlock= true;
 			firstIndexBlock= true;
 			firstFileListBlock= true;
+			firstIncludeIndexBlock=true;
 			indexOut= new SafeRandomAccessFile(this.indexFile, "rw"); //$NON-NLS-1$
 			opened= true;
 		}
Index: index/org/eclipse/cdt/internal/core/index/impl/GammaCompressedIndexBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/GammaCompressedIndexBlock.java,v
retrieving revision 1.2
diff -u -r1.2 GammaCompressedIndexBlock.java
--- index/org/eclipse/cdt/internal/core/index/impl/GammaCompressedIndexBlock.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/GammaCompressedIndexBlock.java	26 Sep 2003 17:26:34 -0000
@@ -57,6 +57,43 @@
 		}
 	}
 	/**
+	 * @see IndexBlock#addEntry
+	 */
+	public boolean addIncludeEntry(IncludeEntry entry) {
+		writeCodeStream.reset();
+		encodeEntry(entry, prevWord, writeCodeStream);
+		if (offset + writeCodeStream.byteLength() > this.blockSize - 2) {
+			return false;
+		}
+		byte[] bytes= writeCodeStream.toByteArray();
+		field.put(offset, bytes);
+		offset += bytes.length;
+		prevWord= entry.getFile();
+		return true;
+	}
+	/**
+	 * @param entry
+	 * @param prevWord
+	 * @param writeCodeStream
+	 */
+	protected void encodeEntry(IncludeEntry entry, char[] prevWord, CodeByteStream codeStream) {
+		char[] file= entry.getFile();
+		int prefixLen= prevWord == null ? 0 : Util.prefixLength(prevWord, file);
+		codeStream.writeByte(prefixLen);
+		codeStream.writeUTF(file, prefixLen, file.length);
+		int n= entry.getNumRefs();
+		codeStream.writeGamma(n);
+		int prevRef= 0;
+		for (int i= 0; i < n; ++i) {
+			int ref= entry.getRef(i);
+			if (ref <= prevRef)
+				throw new IllegalArgumentException();
+			codeStream.writeGamma(ref - prevRef);
+			prevRef= ref;
+		}
+		
+	}
+	/**
 	 * @see IndexBlock#flush
 	 */
 	public void flush() {
@@ -107,6 +144,40 @@
 		}
 	}
 	/**
+	 * @see IndexBlock#nextEntry
+	 */
+	public boolean nextEntry(IncludeEntry entry) {
+		try {
+			readCodeStream.reset(field.buffer(), offset);
+			int prefixLength= readCodeStream.readByte();
+			char[] file= readCodeStream.readUTF();
+			if (prevWord != null && prefixLength > 0) {
+				char[] temp= new char[prefixLength + file.length];
+				System.arraycopy(prevWord, 0, temp, 0, prefixLength);
+				System.arraycopy(file, 0, temp, prefixLength, file.length);
+				file= temp;
+			}
+			if (file.length == 0) {
+				return false;
+			}
+			entry.reset(file);
+			int n= readCodeStream.readGamma();
+			int prevRef= 0;
+			for (int i= 0; i < n; ++i) {
+				int ref= prevRef + readCodeStream.readGamma();
+				if (ref < prevRef)
+					throw new InternalError();
+				entry.addRef(ref);
+				prevRef= ref;
+			}
+			offset= readCodeStream.byteLength();
+			prevWord= file;
+			return true;
+		} catch (UTFDataFormatException e) {
+			return false;
+		}
+	}
+	/**
 	 * @see IndexBlock#reset
 	 */
 	public void reset() {
@@ -114,5 +185,6 @@
 		offset= 0;
 		prevWord= null;
 	}
+	
 }
 
Index: index/org/eclipse/cdt/internal/core/index/impl/IIndexConstants.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/IIndexConstants.java,v
retrieving revision 1.2
diff -u -r1.2 IIndexConstants.java
--- index/org/eclipse/cdt/internal/core/index/impl/IIndexConstants.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/IIndexConstants.java	26 Sep 2003 17:26:34 -0000
@@ -17,7 +17,7 @@
 	/**
 	 * The signature of the index file.
 	 */
-	public static final String SIGNATURE= "INDEX FILE 0.012"; //$NON-NLS-1$
+	public static final String SIGNATURE= "INDEX FILE 0.014"; //$NON-NLS-1$
 	/**
 	 * The separator for files in the index file.
 	 */
Index: index/org/eclipse/cdt/internal/core/index/impl/InMemoryIndex.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/InMemoryIndex.java,v
retrieving revision 1.2
diff -u -r1.2 InMemoryIndex.java
--- index/org/eclipse/cdt/internal/core/index/impl/InMemoryIndex.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/InMemoryIndex.java	26 Sep 2003 17:26:34 -0000
@@ -23,6 +23,10 @@
 public class InMemoryIndex {
 
 	/**
+	* hashtable of IncludeEntrys = includeFiles+numbers of the files they appear in.
+	*/
+	protected IncludeEntryHashedArray includes;
+	/**
 	 * hashtable of WordEntrys = words+numbers of the files they appear in.
 	 */
 	protected WordEntryHashedArray words;
@@ -35,9 +39,14 @@
 	 */
 	protected long footprint;
 
+	private IncludeEntry[] sortedIncludeEntries;
 	private WordEntry[] sortedWordEntries;
 	private IndexedFile[] sortedFiles;
+
+	private int lastId;
+	
 	public InMemoryIndex() {
+		includes= new IncludeEntryHashedArray(501);
 		init();
 	}
 
@@ -47,6 +56,46 @@
 		this.sortedFiles = null;
 		return indexedFile;
 	}
+	
+	public void addIncludeRef(IndexedFile indexedFile, char[] include) {
+		addIncludeRef(include, indexedFile.getFileNumber());
+	}
+	
+	public void addIncludeRef(IndexedFile indexedFile, String include) {
+		addIncludeRef(include.toCharArray(), indexedFile.getFileNumber());
+	}
+	
+	/**
+		 * Adds the references of the include to the tree (reference = number of the file the include belongs to).
+		 */
+		protected void addIncludeRef(char[] include, int[] references) {
+			int size= references.length;
+			int i= 0;
+			while (i < size) {
+				if (references[i] != 0)
+					addIncludeRef(include, references[i]);
+				i++;
+			}
+		}
+		/**
+		 * Looks if the include already exists to the tree and adds the fileNum to this include.
+		 * If the include does not exist, it adds it to the tree.
+		 */
+		protected void addIncludeRef(char[] include, int fileNum) {
+			IncludeEntry entry= (IncludeEntry) this.includes.get(include);
+			if (entry == null) {
+				entry= new IncludeEntry(include, ++lastId);
+				entry.addRef(fileNum);
+				this.includes.add(entry);
+				this.sortedIncludeEntries= null;
+				//TODO: BOG FIGURE OUT FOOTPRINT
+				//this.footprint += entry.getClass(); //footprint();
+				//
+			} else {
+				this.footprint += entry.addRef(fileNum);
+			}
+		}
+
 	/**
 	 * Adds the references of the word to the index (reference = number of the file the word belongs to).
 	 */
@@ -83,6 +132,27 @@
 	public void addRef(IndexedFile indexedFile, String word) {
 		addRef(word.toCharArray(), indexedFile.getFileNumber());
 	}
+	
+	public void addRelatives(IndexedFile indexedFile, String inclusion, String parent) {
+		addRelatives(indexedFile.getFileNumber(),inclusion.toCharArray(),(parent != null ) ? parent.toCharArray() : null);
+	}
+	
+	protected void addRelatives(int fileNumber, char[] inclusion, char[] parent) {
+		IncludeEntry childEntry=null;
+		IncludeEntry parentEntry=null;
+		
+		if (inclusion != null)
+			childEntry= (IncludeEntry) this.includes.get(inclusion);
+	
+		if (parent != null)
+			parentEntry= (IncludeEntry) this.includes.get(parent);
+		
+
+		childEntry.addParent(fileNumber,(parentEntry!=null) ? parentEntry.getID() : -1);
+		
+		if (parent!=null)
+			parentEntry.addChild(fileNumber,(childEntry!=null) ? childEntry.getID() : -1);
+	}	
 	/**
 	 * Returns the footprint of the index.
 	 */
@@ -90,12 +160,30 @@
 		return this.footprint;
 	}
 	/**
+	 * Returns the indexed files contained in the hashtable of includes.
+	 */
+	public IndexedFile[] getIndexedFiles(){
+		return this.files.asArray();
+	}
+	/**
 	 * Returns the indexed file with the given path, or null if such file does not exist.
 	 */
 	public IndexedFile getIndexedFile(String path) {
 		return files.get(path);
 	}
 	/**
+	 * Returns the include entries contained in the hashtable of includes.
+	 */
+	public IncludeEntry[] getIncludeEntries() {
+		return this.includes.asArray();
+	}
+	/**
+	 * Returns the include entry corresponding to the given include.
+	 */
+	protected IncludeEntry getIncludeEntry(char[] include) {
+		return (IncludeEntry) includes.get(include);
+	}
+	/**
 	 * @see IIndex#getNumDocuments()
 	 */
 	public int getNumFiles() {
@@ -107,6 +195,11 @@
 	public int getNumWords() {
 		return words.elementSize;
 	}
+	
+	public int getNumIncludes() {
+		return includes.elementSize;
+	}
+	
 	/**
 	 * Returns the words contained in the hashtable of words, sorted by alphabetical order.
 	 */
@@ -130,6 +223,17 @@
 		return this.sortedWordEntries;
 	}
 	/**
+	 * Returns the include entries contained in the hashtable of includeas, sorted by alphabetical order.
+	 */
+	protected IncludeEntry[] getSortedIncludeEntries() {
+		if (this.sortedIncludeEntries == null) {
+			IncludeEntry[] includes= this.includes.asArray();
+			Util.sort(includes);
+			this.sortedIncludeEntries= includes;
+		}
+		return this.sortedIncludeEntries;
+	}
+	/**
 	 * Returns the word entry corresponding to the given word.
 	 */
 	protected WordEntry getWordEntry(char[] word) {
@@ -139,11 +243,14 @@
 	 * Initialises the fields of the index
 	 */
 	public void init() {
+		includes= new IncludeEntryHashedArray(501);
 		words= new WordEntryHashedArray(501);
 		files= new IndexedFileHashedArray(101);
 		footprint= 0;
+		lastId=0;
 		sortedWordEntries= null;
 		sortedFiles= null;
+		sortedIncludeEntries=null;
 	}
 	/**
 	 * Saves the index in the given file.
Index: index/org/eclipse/cdt/internal/core/index/impl/IncludeEntry.java
===================================================================
RCS file: index/org/eclipse/cdt/internal/core/index/impl/IncludeEntry.java
diff -N index/org/eclipse/cdt/internal/core/index/impl/IncludeEntry.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ index/org/eclipse/cdt/internal/core/index/impl/IncludeEntry.java	26 Sep 2003 17:26:34 -0000
@@ -0,0 +1,223 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.internal.core.index.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.cdt.internal.core.CharOperation;
+import org.eclipse.cdt.internal.core.sourcedependency.Node;
+
+/**
+ * @author bgheorgh
+ */
+public class IncludeEntry {
+
+  protected char[] fFile;
+  protected int fId;
+  protected int fNumRefs;
+  protected int[] fRefs;
+  //TODO: BOG Consider making these arrays...
+  protected ArrayList fParent;
+  protected ArrayList fChild;
+  protected int fNumParent;
+  protected int fNumChild;
+     
+  public IncludeEntry(int id) {
+	this(CharOperation.NO_CHAR,id);
+  }
+		
+  public IncludeEntry(char[] file, int id) {
+	fFile = file;
+	fNumRefs= 0;
+	fRefs= new int[1];
+	fId=id;
+	
+	fParent = new ArrayList(5);
+	fChild = new ArrayList(5);
+	fNumParent = 0;
+	fNumChild = 0;
+  }
+  /**
+   * Adds a reference and records the change in footprint.
+   */
+    public int addRef(int fileNum) {
+      if (fNumRefs > 0 && fRefs[fNumRefs - 1] == fileNum) {
+	   return 0;
+      }
+      if (fNumRefs < fRefs.length) {
+   	    fRefs[fNumRefs++]= fileNum;
+	    return 0;
+      } 
+
+      int newSize= fNumRefs < 4 ? 4 : fNumRefs * 2; // so will start @ 1, grow to 4, 8, 16, 32, 64 etc.
+	  System.arraycopy(fRefs, 0, fRefs= new int[newSize], 0, fNumRefs);
+	  fRefs[fNumRefs++]= fileNum;
+	  return (newSize - fNumRefs + 1) * 4;
+    }
+	  
+	public void addParent(int fileRef, int parentId){
+		Node newParent = new Node(fileRef,parentId);
+		fParent.add(newParent);
+		fNumParent++;
+	}
+	/**
+	 * @param is
+	 */
+	public void addRefs(int[] refs) {
+		int[] newRefs= new int[fNumRefs + refs.length];
+		int pos1= 0;
+		int pos2= 0;
+		int posNew= 0;
+		int compare;
+		int r1= 0;
+		int r2= 0;
+		while (pos1 < fNumRefs || pos2 < refs.length) {
+			if (pos1 >= fNumRefs) {
+				r2= refs[pos2];
+				compare= -1;
+			} else if (pos2 >= refs.length) {
+				compare= 1;
+				r1= fRefs[pos1];
+			} else {
+				r1= fRefs[pos1];
+				r2= refs[pos2];
+				compare= r2 - r1;
+			}
+			if (compare > 0) {
+				newRefs[posNew]= r1;
+				posNew++;
+				pos1++;
+			} else {
+				if (r2 != 0) {
+					newRefs[posNew]= r2;
+					posNew++;
+				}
+				pos2++;
+			}
+		}
+		fRefs= newRefs;
+		fNumRefs= posNew;
+		/*for (int i = 0; i < refs.length; i++)
+		addRef(refs[i]);
+		int[] newRefs = new int[fNumRefs];
+		System.arraycopy(fRefs, 0, newRefs, 0, fNumRefs);
+		fRefs = newRefs;
+		Util.sort(fRefs);*/
+		
+	}
+	
+	public void addChild(int fileRef, int parentId){
+		Node newChild = new Node(fileRef,parentId);
+		fChild.add(newChild);
+		fNumChild++;
+	}
+	/**
+	 * Returns the number of references, e.g. the number of files this word appears in.
+	 */
+	public int getNumRefs() {
+		return fNumRefs;
+	}
+	/**
+	 * returns the file number in the i position in the list of references.
+	 */
+	public int getRef(int i) {
+		if (i < fNumRefs) return fRefs[i];
+		throw new IndexOutOfBoundsException();
+	}
+	/**
+	 * Returns the references of the includeEntry (the number of the files it appears in).
+	 */
+	public int[] getRefs() {
+		int[] result= new int[fNumRefs];
+		System.arraycopy(fRefs, 0, result, 0, fNumRefs);
+		return result;
+	}
+	/**
+	 * returns the word of the includeEntry.
+	 */
+	public char[] getFile() {
+		return fFile;
+	}
+	/**
+	 * Changes the references of the wordEntry to match the mapping. For example,<br>
+	 * if the current references are [1 3 4]<br>
+	 * and mapping is [1 2 3 4 5]<br>
+	 * in references 1 becomes mapping[1] = 2, 3->4, and 4->5<br>
+	 * => references = [2 4 5].<br>
+	 */
+	public void mapRefs(int[] mappings) {
+		int position= 0;
+		for (int i= 0; i < fNumRefs; i++) {
+			int map= mappings[fRefs[i]];
+			if (map != -1 && map != 0)
+				fRefs[position++]= map;
+		}
+		fNumRefs= position;
+
+		//to be changed!
+		System.arraycopy(fRefs, 0, (fRefs= new int[fNumRefs]), 0, fNumRefs);
+		Util.sort(fRefs);
+	}
+	/**
+	 * Clears the includeEntry.
+	 */
+	public void reset(char[] word) {
+		for (int i= fNumRefs; i-- > 0;) {
+			fRefs[i]= 0;
+		}
+		fNumRefs= 0;
+		fFile= word;
+	}
+	
+	public int getID(){
+		return fId;
+	}
+	
+	public String toString() {
+		StringBuffer tempBuffer = new StringBuffer();
+		tempBuffer.append("<Name: ");
+		tempBuffer.append(fFile);
+		tempBuffer.append(", Id: ");
+		tempBuffer.append(fId);
+		tempBuffer.append(", Refs:{");
+		for (int i = 0; i < fRefs.length; i++){
+			if (i > 0) tempBuffer.append(',');
+			tempBuffer.append(' ');
+			tempBuffer.append(fRefs[i]);
+		}
+		tempBuffer.append("}, Parents:{");
+		Iterator x = fParent.iterator();
+		while (x.hasNext())
+		{
+			Node tempNode = (Node) x.next();
+			tempBuffer.append(tempNode.toString());
+			if (x.hasNext()) {
+				tempBuffer.append(',');
+				tempBuffer.append(' ');
+			}
+		}
+		tempBuffer.append("}, Children:{");
+		Iterator y = fChild.iterator();
+		while (y.hasNext())
+		{
+			Node tempNode = (Node) y.next();
+			tempBuffer.append(tempNode.toString());
+			if (y.hasNext()) {
+				tempBuffer.append(',');
+				tempBuffer.append(' ');
+			}
+		}
+		tempBuffer.append("} >");
+		return tempBuffer.toString();
+	}
+}
Index: index/org/eclipse/cdt/internal/core/index/impl/IncludeEntryHashedArray.java
===================================================================
RCS file: index/org/eclipse/cdt/internal/core/index/impl/IncludeEntryHashedArray.java
diff -N index/org/eclipse/cdt/internal/core/index/impl/IncludeEntryHashedArray.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ index/org/eclipse/cdt/internal/core/index/impl/IncludeEntryHashedArray.java	26 Sep 2003 17:26:34 -0000
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.internal.core.index.impl;
+
+import org.eclipse.cdt.internal.core.CharOperation;
+
+public final class IncludeEntryHashedArray {
+
+	public IncludeEntry elements[];
+	public int elementSize; // number of elements in the table
+	public int threshold;
+	
+	public IncludeEntryHashedArray(int size) {
+		if (size < 7) size = 7;
+		this.elements = new IncludeEntry[2 * size + 1];
+		this.elementSize = 0;
+		this.threshold = size + 1; // size is the expected number of elements
+	}
+	
+	public IncludeEntry add(IncludeEntry entry) {
+		int length = elements.length;
+		char[] word = entry.getFile();
+		int index = CharOperation.hashCode(word) % length;
+		IncludeEntry current;
+		while ((current = elements[index]) != null) {
+			if (CharOperation.equals(current.getFile(), word)) return elements[index] = entry;
+			if (++index == length) index = 0;
+		}
+		elements[index] = entry;
+	
+		// assumes the threshold is never equal to the size of the table
+		if (++elementSize > threshold) grow();
+		return entry;
+	}
+	
+	public IncludeEntry[] asArray() {
+		IncludeEntry[] array = new IncludeEntry[elementSize];
+		for (int i = 0, j = 0, length = elements.length; i < length; i++) {
+			IncludeEntry current = elements[i];
+			if (current != null) array[j++] = current;
+		}
+		return array;
+	}
+	
+	public IncludeEntry get(char[] word) {
+		int length = elements.length;
+		int index = CharOperation.hashCode(word) % length;
+		IncludeEntry current;
+		while ((current = elements[index]) != null) {
+			if (CharOperation.equals(current.getFile(), word)) return current;
+			if (++index == length) index = 0;
+		}
+		return null;
+	}
+	
+	private void grow() {
+		IncludeEntryHashedArray newArray = new IncludeEntryHashedArray(elementSize * 2); // double the number of expected elements
+		for (int i = 0, length = elements.length; i < length; i++)
+			if (elements[i] != null)
+				newArray.add(elements[i]);
+	
+		this.elements = newArray.elements;
+		this.elementSize = newArray.elementSize;
+		this.threshold = newArray.threshold;
+	}
+	
+	public String toString() {
+		String s = ""; //$NON-NLS-1$
+		IncludeEntry[] entries = asArray();
+		for (int i = 0, length = entries.length; i < length; i++)
+			s += entries[i].toString() + "\n"; 	//$NON-NLS-1$
+		return s;
+	}
+
+}
Index: index/org/eclipse/cdt/internal/core/index/impl/Index.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/Index.java,v
retrieving revision 1.2
diff -u -r1.2 Index.java
--- index/org/eclipse/cdt/internal/core/index/impl/Index.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/Index.java	26 Sep 2003 17:26:35 -0000
@@ -12,7 +12,9 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.eclipse.cdt.internal.core.index.IDocument;
@@ -20,6 +22,8 @@
 import org.eclipse.cdt.internal.core.index.IIndex;
 import org.eclipse.cdt.internal.core.index.IIndexer;
 import org.eclipse.cdt.internal.core.index.IQueryResult;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
 
 /**
  * An Index is used to create an index on the disk, and to make queries. It uses a set of 
@@ -168,6 +172,19 @@
 		}		
 	}
 	/**
+	 * @see IIndex#getNumWords
+	 */
+	public int getNumIncludes() throws IOException {
+		//save();
+		IndexInput input= new BlocksIndexInput(indexFile);
+		try {
+			input.open();
+			return input.getNumIncludes();
+		} finally {
+			input.close();
+		}		
+	}
+	/**
 	 * Returns the path corresponding to a given document number
 	 */
 	public String getPath(int documentNumber) throws IOException {
@@ -302,6 +319,63 @@
 			input.close();
 		}
 	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.sourcedependency.IDependencyTree#getFileDepencies(int)
+	 */
+	public String[] getFileDependencies(IPath filePath) throws IOException {
+//		List tempFileReturn = new ArrayList();
+//		
+//		IndexedFile indexFile = addsIndex.getIndexedFile(filePath.toString());
+//
+//		if (indexFile == null)
+//		 return new String[0];
+//		 
+//		int fileNum = indexFile.getFileNumber();
+//		IncludeEntry[] tempEntries = addsIndex.getIncludeEntries();
+//		for (int i=0; i<tempEntries.length; i++)
+//		{
+//			int[] fileRefs = tempEntries[i].getRefs();
+//			for (int j=0; j<fileRefs.length; j++)
+//			{
+//				if (fileRefs[j] == fileNum)
+//				{ 
+//					char[] tempFile = tempEntries[i].getFile();
+//					StringBuffer tempString = new StringBuffer();
+//					tempString.append(tempFile);
+//					tempFileReturn.add(tempString.toString());
+//					break;
+//				}
+//			}
+//		}
+//		return (String []) tempFileReturn.toArray(new String[tempFileReturn.size()]);
+		return null;
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.index.IIndex#getFileDependencies(org.eclipse.core.resources.IFile)
+	 */
+	public String[] getFileDependencies(IFile file) throws IOException  {
+		IndexInput input= new BlocksIndexInput(indexFile);
+		int fileNum=0;
+		List tempFileReturn = new ArrayList();
+		try {
+			IDocument temp = new IFileDocument(file);
+			input.open();
+			IndexedFile inFile = input.getIndexedFile(temp);
+			fileNum =inFile.getFileNumber();
+	
+			IncludeEntry[] tempEntries = input.queryIncludeEntries(fileNum);
+			for (int i=0; i<tempEntries.length; i++)
+			{
+				char[] tempFile = tempEntries[i].getFile();
+				StringBuffer tempString = new StringBuffer();
+				tempString.append(tempFile);
+				tempFileReturn.add(tempString.toString());
+			}
+		}
+		finally{input.close();}
+		return (String []) tempFileReturn.toArray(new String[tempFileReturn.size()]);
+	}
 	/**
 	 * @see IIndex#remove
 	 */
@@ -361,4 +435,6 @@
 	str += "(length: "+ getIndexFile().length() +")"; //$NON-NLS-1$ //$NON-NLS-2$
 	return str;
 }
+
+	
 }
Index: index/org/eclipse/cdt/internal/core/index/impl/IndexBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/IndexBlock.java,v
retrieving revision 1.3
diff -u -r1.3 IndexBlock.java
--- index/org/eclipse/cdt/internal/core/index/impl/IndexBlock.java	12 Aug 2003 20:20:04 -0000	1.3
+++ index/org/eclipse/cdt/internal/core/index/impl/IndexBlock.java	26 Sep 2003 17:26:35 -0000
@@ -25,6 +25,10 @@
 	 */
 	public abstract boolean addEntry(WordEntry entry);
 	/**
+	 * Adds the given wordEntry to the indexBlock.
+	 */
+	public abstract boolean addIncludeEntry(IncludeEntry entry);
+	/**
 	 * @see Block#clear()
 	 */
 	public void clear() {
@@ -69,6 +73,9 @@
 	 * Finds the next wordEntry and stores it in the given entry.
 	 */
 	public abstract boolean nextEntry(WordEntry entry);
+	public abstract boolean nextEntry(IncludeEntry entry);
+	
 	public void reset() {
 	}
+	
 }
Index: index/org/eclipse/cdt/internal/core/index/impl/IndexInput.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/IndexInput.java,v
retrieving revision 1.3
diff -u -r1.3 IndexInput.java
--- index/org/eclipse/cdt/internal/core/index/impl/IndexInput.java	11 Jul 2003 22:12:35 -0000	1.3
+++ index/org/eclipse/cdt/internal/core/index/impl/IndexInput.java	26 Sep 2003 17:26:35 -0000
@@ -29,12 +29,14 @@
 	protected int filePosition;
 	protected WordEntry currentWordEntry;
 	protected int wordPosition;
-
+	protected IncludeEntry currentIncludeEntry;
+	protected int includePosition;
 
 	public IndexInput() {
 		super();
 		wordPosition= 1;
 		filePosition= 1;
+		includePosition= 1;
 	}
 	/**
 	 * clears the cache of this indexInput, if it keeps track of the information already read.
@@ -58,6 +60,14 @@
 		return currentWordEntry;
 	}
 	/**
+	 * Returns the current file the indexInput is pointing to in the index.
+	 */
+	public IncludeEntry getCurrentIncludeEntry() throws IOException {
+		if (!hasMoreIncludes())
+			return null;
+		return currentIncludeEntry;
+	}
+	/**
 	 * Returns the position of the current file the input is pointing to in the index.
 	 */
 	public int getFilePosition() {
@@ -83,6 +93,10 @@
 	 */
 	public abstract int getNumWords();
 	/**
+	 * Returns the number of unique words in the index.
+	 */
+	public abstract int getNumIncludes();
+	/**
 	 * Returns the Object the input is reading from. It can be an IIndex,
 	 * a File, ...
 	 */
@@ -100,6 +114,12 @@
 		return wordPosition <= getNumWords();
 	}
 	/**
+	 * Returns true if the input has not reached the end of the index for the files.
+	 */
+	public boolean hasMoreIncludes() {
+		return includePosition <= getNumIncludes();
+	}
+	/**
 	 * Moves the pointer on the current file to the next file in the index.
 	 */
 	public abstract void moveToNextFile() throws IOException;
@@ -108,6 +128,10 @@
 	 */
 	public abstract void moveToNextWordEntry() throws IOException;
 	/**
+	 * Moves the pointer on the current include entry to the next file in the index.
+	 */
+	public abstract void moveToNextIncludeEntry() throws IOException;
+	/**
 	 * Open the Source where the input gets the information from.
 	 */
 	public abstract void open() throws IOException;
@@ -122,6 +146,15 @@
 	 */
 	public abstract IQueryResult[] queryInDocumentNames(String word) throws IOException;
 	/**
+	 * Returns the list of the files whose name contain the given word in the index.
+	 */
+	public abstract IncludeEntry[] queryIncludeEntries();
+	/**
+	 * @param fileNum
+	 * @return
+	 */
+	public abstract IncludeEntry[] queryIncludeEntries(int fileNum) throws IOException;
+	/**
 	 * Set the pointer on the current file to the first file of the index.
 	 */
 	protected abstract void setFirstFile() throws IOException;
@@ -129,4 +162,10 @@
 	 * Set the pointer on the current word to the first word of the index.
 	 */
 	protected abstract void setFirstWord() throws IOException;
+	/**
+	 * Set the pointer on the current include to the first include of the index.
+	 */
+	protected abstract void setFirstInclude() throws IOException;
+
+	
 }
Index: index/org/eclipse/cdt/internal/core/index/impl/IndexSummary.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/IndexSummary.java,v
retrieving revision 1.3
diff -u -r1.3 IndexSummary.java
--- index/org/eclipse/cdt/internal/core/index/impl/IndexSummary.java	12 Aug 2003 20:20:04 -0000	1.3
+++ index/org/eclipse/cdt/internal/core/index/impl/IndexSummary.java	26 Sep 2003 17:26:35 -0000
@@ -32,6 +32,10 @@
 	 */
 	protected ArrayList firstWordsInBlocks= new ArrayList();
 	/**
+	 * First include for each block.
+	 */
+	protected ArrayList firstIncludesInBlocks= new ArrayList();
+	/**
 	 * Number of files in the index.
 	 */
 	protected int numFiles;
@@ -39,7 +43,11 @@
 	 * Number of words in the index.
 	 */
 	protected int numWords;
-
+	/**
+	 * Number of includes in the index.
+	 */
+	protected int numIncludes;
+	
 	static class FirstFileInBlock {
 		IndexedFile indexedFile;
 		int blockNum;
@@ -53,8 +61,19 @@
 		}
 	}
 
+	static class FirstIncludeInBlock {
+		char[] file;
+		int blockNum;
+		public String toString(){
+			return "FirstIncludeInBlock: " + new String(file) + ", blockNum: " + blockNum; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+	
 	protected int firstWordBlockNum;
 	protected boolean firstWordAdded= true;
+	
+	protected int firstIncludeBlockNum;
+	protected boolean firstIncludeBlockAdded= true;
 	/**
 	 * Adds the given file as the first file for the given Block number. 
 	 */
@@ -78,6 +97,19 @@
 		firstWordsInBlocks.add(entry);
 	}
 	/**
+	 * Adds the given include as the first include for the given Block number. 
+	 */
+	public void addFirstIncludeInBlock(char[] file, int blockNum) {
+		if (firstIncludeBlockAdded) {
+			firstIncludeBlockNum= blockNum;
+			firstIncludeBlockAdded= false;
+		}
+		FirstIncludeInBlock entry= new FirstIncludeInBlock();
+		entry.file = file;
+		entry.blockNum= blockNum;
+		firstIncludesInBlocks.add(entry);
+	}
+	/**
 	 * Returns the numbers of all the blocks
 	 */
 	public int[] getAllBlockNums() {
@@ -187,6 +219,14 @@
 		}
 		return result;
 	}
+	public int[] getBlockNumsForIncludes() {
+		int max = firstIncludesInBlocks.size();
+		int[] blockNums = new int[max];
+		for (int i = 0; i < max; i++){
+			blockNums[i] = ((FirstIncludeInBlock)firstIncludesInBlocks.get(i)).blockNum;
+		}
+		return blockNums;
+	}
 	public int getFirstBlockLocationForPrefix(char[] prefix) {
 		int min = 0;
 		int size = firstWordsInBlocks.size();
@@ -229,6 +269,12 @@
 	public int getFirstWordBlockNum() {
 		return firstWordBlockNum;
 	}
+	/**
+	 * Returns the number of the first IndexBlock (containing words).
+	 */
+	public int getFirstIncludeBlockNum() {
+		return firstIncludeBlockNum;
+	}
 	/** 
 	 * Blocks are contiguous, so the next one is a potential candidate if its first word starts with
 	 * the given prefix
@@ -253,12 +299,20 @@
 		return numWords;
 	}
 	/**
+	 * Returns the number of words contained in the index.
+	 */
+	public int getNumIncludes() {
+		return numIncludes;
+	}
+	/**
 	 * Loads the summary in memory.
 	 */
 	public void read(RandomAccessFile raf) throws IOException {
 		numFiles= raf.readInt();
 		numWords= raf.readInt();
+		numIncludes= raf.readInt();
 		firstWordBlockNum= raf.readInt();
+		firstIncludeBlockNum= raf.readInt();
 		int numFirstFiles= raf.readInt();
 		for (int i= 0; i < numFirstFiles; ++i) {
 			FirstFileInBlock entry= new FirstFileInBlock();
@@ -275,6 +329,13 @@
 			entry.blockNum= raf.readInt();
 			firstWordsInBlocks.add(entry);
 		}
+		int numIncludes = raf.readInt();
+		for (int i= 0; i < numIncludes; ++i) {
+			FirstIncludeInBlock entry= new FirstIncludeInBlock();
+			entry.file= raf.readUTF().toCharArray();
+			entry.blockNum= raf.readInt();
+			firstIncludesInBlocks.add(entry);
+		}
 	}
 	/**
 	 * Sets the number of files of the index.
@@ -291,12 +352,20 @@
 		this.numWords= numWords;
 	}
 	/**
+	 * Sets the number of includes of the index.
+	 */
+	public void setNumIncludes(int numIncs) {
+		this.numIncludes= numIncs;
+	}
+	/**
 	 * Saves the summary on the disk.
 	 */
 	public void write(RandomAccessFile raf) throws IOException {
 		raf.writeInt(numFiles);
 		raf.writeInt(numWords);
+		raf.writeInt(numIncludes);
 		raf.writeInt(firstWordBlockNum);
+		raf.writeInt(firstIncludeBlockNum);
 		raf.writeInt(firstFilesInBlocks.size());
 		for (int i= 0, size= firstFilesInBlocks.size(); i < size; ++i) {
 			FirstFileInBlock entry= (FirstFileInBlock) firstFilesInBlocks.get(i);
@@ -308,6 +377,12 @@
 		for (int i= 0, size= firstWordsInBlocks.size(); i < size; ++i) {
 			FirstWordInBlock entry= (FirstWordInBlock) firstWordsInBlocks.get(i);
 			raf.writeUTF(new String(entry.word));
+			raf.writeInt(entry.blockNum);
+		}
+		raf.writeInt(firstIncludesInBlocks.size());
+		for (int i= 0, size= firstIncludesInBlocks.size(); i < size; ++i) {
+			FirstIncludeInBlock entry= (FirstIncludeInBlock) firstIncludesInBlocks.get(i);
+			raf.writeUTF(new String(entry.file));
 			raf.writeInt(entry.blockNum);
 		}
 	}
Index: index/org/eclipse/cdt/internal/core/index/impl/IndexerOutput.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/IndexerOutput.java,v
retrieving revision 1.3
diff -u -r1.3 IndexerOutput.java
--- index/org/eclipse/cdt/internal/core/index/impl/IndexerOutput.java	11 Jul 2003 22:12:35 -0000	1.3
+++ index/org/eclipse/cdt/internal/core/index/impl/IndexerOutput.java	26 Sep 2003 17:26:35 -0000
@@ -55,4 +55,23 @@
 	public void addRef(String word) {
 		addRef(word.toCharArray());
 	}
+		
+	public void addRelatives(String inclusion, String parent) {
+		if (indexedFile == null) {
+					throw new IllegalStateException();
+		}
+		index.addRelatives(indexedFile, inclusion, parent);	
+	}
+
+	public void addIncludeRef(char[] word) {
+		if (indexedFile == null) {
+			throw new IllegalStateException();
+		}
+			index.addIncludeRef(indexedFile, word);	
+	}
+
+	public void addIncludeRef(String word) {
+		addIncludeRef(word.toCharArray());
+	}
+	
 }
Index: index/org/eclipse/cdt/internal/core/index/impl/MergeFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/MergeFactory.java,v
retrieving revision 1.2
diff -u -r1.2 MergeFactory.java
--- index/org/eclipse/cdt/internal/core/index/impl/MergeFactory.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/MergeFactory.java	26 Sep 2003 17:26:35 -0000
@@ -79,6 +79,7 @@
 			//findChanges();
 			mergeFiles();
 			mergeReferences();
+			mergeIncludes();
 			mergeOutput.flush();
 		} finally {
 			//closes everything
@@ -96,6 +97,7 @@
 	protected void mergeFiles() throws IOException {
 		int positionInMerge= 1;
 		int compare;
+
 		while (oldInput.hasMoreFiles() || addsInput.hasMoreFiles()) {
 			IndexedFile file1= oldInput.getCurrentFile();
 			IndexedFile file2= addsInput.getCurrentFile();
@@ -184,6 +186,45 @@
 			}
 		}
 		mergeOutput.flushWords();
+	}
+	/**
+	 * Merges the files of the 2 indexes in the new index, according to the changes
+	 * recorded during mergeFiles().
+	 */
+	protected void mergeIncludes() throws IOException {
+		int compare;
+		
+		while (oldInput.hasMoreIncludes() || addsInput.hasMoreIncludes()) {
+			IncludeEntry inc1= oldInput.getCurrentIncludeEntry();
+			IncludeEntry inc2= addsInput.getCurrentIncludeEntry();
+
+			if (inc1 == null && inc2 == null)
+				break;
+			
+			if (inc1 == null)
+				compare= 1;
+			else if (inc2 == null)
+				compare= -1;
+			else
+				compare= Util.compare(inc1.getFile(), inc2.getFile());
+			if (compare < 0) {
+				inc1.mapRefs(mappingOld);
+				mergeOutput.addInclude(inc1);
+				oldInput.moveToNextIncludeEntry();
+			} else if (compare > 0) {
+				inc2.mapRefs(mappingAdds);
+				mergeOutput.addInclude(inc2);
+				addsInput.moveToNextIncludeEntry();
+			} else {
+				inc1.mapRefs(mappingOld);
+				inc2.mapRefs(mappingAdds);
+				inc1.addRefs(inc2.getRefs());
+				mergeOutput.addInclude(inc1);
+				addsInput.moveToNextIncludeEntry();
+				oldInput.moveToNextIncludeEntry();
+			}
+		}
+		mergeOutput.flushIncludes();
 	}
 	/**
 	 * Records the deletion of one file.
Index: index/org/eclipse/cdt/internal/core/index/impl/SimpleIndexInput.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/SimpleIndexInput.java,v
retrieving revision 1.2
diff -u -r1.2 SimpleIndexInput.java
--- index/org/eclipse/cdt/internal/core/index/impl/SimpleIndexInput.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/SimpleIndexInput.java	26 Sep 2003 17:26:35 -0000
@@ -23,6 +23,7 @@
 
 public class SimpleIndexInput extends IndexInput {
 	protected WordEntry[] sortedWordEntries;
+	protected IncludeEntry[] sortedIncludes;
 	protected IndexedFile currentFile;
 	protected IndexedFile[] sortedFiles;
 	protected InMemoryIndex index;
@@ -78,6 +79,12 @@
 		return index.getNumFiles();
 	}
 	/**
+	 * @see IndexInput#getNumIncludes()
+	 */
+	public int getNumIncludes() {
+		return sortedIncludes.length;
+	}
+	/**
 	 * @see IndexInput#getNumWords()
 	 */
 	public int getNumWords() {
@@ -112,15 +119,26 @@
 			currentWordEntry= sortedWordEntries[wordPosition - 1];
 	}
 	/**
+	 * @see IndexInput#moveToNextIncludeEntry()
+	 */
+	public void moveToNextIncludeEntry() throws IOException {
+		includePosition++;
+		if (hasMoreIncludes())
+			currentIncludeEntry= sortedIncludes[includePosition - 1];
+	}
+	/**
 	 * @see IndexInput#open()
 	 */
 	public void open() throws IOException {
 		sortedWordEntries= index.getSortedWordEntries();
 		sortedFiles= index.getSortedFiles();
+		sortedIncludes = index.getSortedIncludeEntries();
 		filePosition= 1;
 		wordPosition= 1;
+		includePosition=1;
 		setFirstFile();
 		setFirstWord();
+		setFirstInclude();
 	}
 	/**
 	 * @see IndexInput#query(String)
@@ -172,6 +190,20 @@
 		wordPosition= 1;
 		if (sortedWordEntries.length > 0)
 			currentWordEntry= sortedWordEntries[0];
+	}
+	/**
+	 * @see IndexInput#setFirstInclude()
+	 */
+	protected void setFirstInclude() throws IOException {
+		includePosition=1;
+		if (sortedIncludes.length >0)
+			currentIncludeEntry=sortedIncludes[0];
+	}
+	public IncludeEntry[] queryIncludeEntries() {
+		return null;
+	}
+	public IncludeEntry[] queryIncludeEntries(int fileNum) throws IOException {
+		return null;
 	}
 }
 
Index: index/org/eclipse/cdt/internal/core/index/impl/Util.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/impl/Util.java,v
retrieving revision 1.2
diff -u -r1.2 Util.java
--- index/org/eclipse/cdt/internal/core/index/impl/Util.java	4 Jul 2003 03:02:07 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/impl/Util.java	26 Sep 2003 17:26:35 -0000
@@ -195,6 +195,32 @@
 			quickSort(list, left, original_right);
 		}
 	}
+	private static void quickSort(IncludeEntry[] list, int left, int right) {
+			int original_left= left;
+			int original_right= right;
+			char[] mid= list[(left + right) / 2].fFile;
+			do {
+				while (compare(list[left].fFile, mid) < 0) {
+					left++;
+				}
+				while (compare(mid, list[right].fFile) < 0) {
+					right--;
+				}
+				if (left <= right) {
+					IncludeEntry tmp= list[left];
+					list[left]= list[right];
+					list[right]= tmp;
+					left++;
+					right--;
+				}
+			} while (left <= right);
+			if (original_left < right) {
+				quickSort(list, original_left, right);
+			}
+			if (left < original_right) {
+				quickSort(list, left, original_right);
+			}
+		}
 	/**
 	 * Reads in a string from the specified data input stream. The 
 	 * string has been encoded using a modified UTF-8 format. 
@@ -288,6 +314,10 @@
 			quickSort(list, 0, list.length - 1);
 	}
 	public static void sort(WordEntry[] list) {
+		if (list.length > 1)
+			quickSort(list, 0, list.length - 1);
+	}
+	public static void sort(IncludeEntry[] list) {
 		if (list.length > 1)
 			quickSort(list, 0, list.length - 1);
 	}
Index: index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java,v
retrieving revision 1.19
diff -u -r1.19 AbstractIndexer.java
--- index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java	18 Sep 2003 15:15:08 -0000	1.19
+++ index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java	26 Sep 2003 17:26:35 -0000
@@ -21,6 +21,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
 import org.eclipse.cdt.core.parser.ast.IASTField;
 import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IASTInclusion;
 import org.eclipse.cdt.core.parser.ast.IASTMacro;
 import org.eclipse.cdt.core.parser.ast.IASTMethod;
 import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
@@ -33,6 +34,7 @@
 import org.eclipse.cdt.internal.core.index.IDocument;
 import org.eclipse.cdt.internal.core.index.IIndexer;
 import org.eclipse.cdt.internal.core.index.IIndexerOutput;
+import org.eclipse.core.resources.IFile;
 
 public abstract class AbstractIndexer implements IIndexer, IIndexConstants, ICSearchConstants {
 	
@@ -340,6 +342,10 @@
 	 */
 	public abstract String[] getFileTypes();
 	/**
+	 * Returns the file types being indexed.
+	 */
+	public abstract IFile getResourceFile();
+	/**
 	 * @see IIndexer#index(IDocument document, IIndexerOutput output)
 	 */
 	public void index(IDocument document, IIndexerOutput output) throws IOException {
@@ -620,6 +626,34 @@
 		}
 		
 		return bestPrefix( prefix,  (char)0, macroName, null, matchMode, isCaseSenstive );	
+	}
+	
+	/**
+	 * @param _limitTo
+	 * @param simpleName
+	 * @param _matchMode
+	 * @param _caseSensitive
+	 * @return
+	 */
+	public static final char[] bestIncludePrefix( LimitTo limitTo, char[] incName, int matchMode, boolean isCaseSenstive ){
+		//since we only index macro declarations we already know the prefix
+		char [] prefix = null;
+		if( limitTo == REFERENCES ){
+			prefix = INCLUDE_REF;
+		} else {
+			return null;
+		}
+		
+		return bestPrefix( prefix,  (char)0, incName, null, matchMode, isCaseSenstive );	
+	}
+	
+	public void addInclude(IASTInclusion inclusion, IASTInclusion parent){
+		this.output.addIncludeRef(inclusion.getFullFileName());
+		this.output.addRelatives(inclusion.getFullFileName(),(parent != null ) ? parent.getFullFileName() : null);
+		//Add Dep Table entry
+		String[] incName = new String[1];
+		incName[0] = inclusion.getFullFileName();
+		this.output.addRef(encodeEntry(incName, INCLUDE_REF, INCLUDE_REF_LENGTH));
 	}
 }
 
Index: index/org/eclipse/cdt/internal/core/search/indexing/IIndexConstants.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IIndexConstants.java,v
retrieving revision 1.7
diff -u -r1.7 IIndexConstants.java
--- index/org/eclipse/cdt/internal/core/search/indexing/IIndexConstants.java	15 Sep 2003 17:31:23 -0000	1.7
+++ index/org/eclipse/cdt/internal/core/search/indexing/IIndexConstants.java	26 Sep 2003 17:26:36 -0000
@@ -62,6 +62,9 @@
 	
 	char[] MACRO_DECL = "macroDecl/".toCharArray();
 	int MACRO_DECL_LENGTH = 10;
+	
+	char[] INCLUDE_REF = "includeRef/".toCharArray();
+	int INCLUDE_REF_LENGTH = 11;
 	//a Var REF will be treated as  a typeREF
 	//char[] VAR_REF= "varRef/".toCharArray(); //$NON-NLS-1$
 	
Index: index/org/eclipse/cdt/internal/core/search/indexing/IndexAllProject.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexAllProject.java,v
retrieving revision 1.5
diff -u -r1.5 IndexAllProject.java
--- index/org/eclipse/cdt/internal/core/search/indexing/IndexAllProject.java	23 Sep 2003 15:17:13 -0000	1.5
+++ index/org/eclipse/cdt/internal/core/search/indexing/IndexAllProject.java	26 Sep 2003 17:26:36 -0000
@@ -14,6 +14,12 @@
 import java.io.IOException;
 import java.util.HashSet;
 
+import org.eclipse.cdt.internal.core.Util;
+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.SimpleLookupTable;
+import org.eclipse.cdt.internal.core.search.processing.JobManager;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -23,16 +29,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import  org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.internal.core.Util;
-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.processing.JobManager;
-import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
-import org.eclipse.cdt.internal.core.model.CModel;
-import org.eclipse.cdt.internal.core.model.CModelManager;
-import org.eclipse.cdt.core.model.ICElement;
 
 
 public class IndexAllProject extends IndexRequest {
Index: index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java,v
retrieving revision 1.7
diff -u -r1.7 IndexManager.java
--- index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java	23 Sep 2003 15:17:13 -0000	1.7
+++ index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java	26 Sep 2003 17:26:36 -0000
@@ -35,9 +35,7 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.QualifiedName;
 
 
 public class IndexManager extends JobManager implements IIndexConstants {
@@ -106,13 +104,6 @@
 	 */
 	public void addSource(IFile resource, IPath indexedContainer){
 	
-		/******
-		*TODO: BOG Remove these methods once the new indexer is
-		*fully integrated
-		*/
-//		IProject project= resource.getProject();
-//		if (!isEnabled(project)) return;
-
 		if (CCorePlugin.getDefault() == null) return;	
 		AddCompilationUnitToIndex job = new AddCompilationUnitToIndex(resource, indexedContainer, this);
 		if (this.awaitingJobsCount() < MAX_FILES_IN_MEMORY) {
@@ -240,13 +231,7 @@
 	 */
 	public void indexAll(IProject project) {
 		if (CCorePlugin.getDefault() == null) return;
-		
-		 /******
-		 *TODO: BOG Remove these methods once the new indexer is
-		 *fully integrated
-		 */
-//		 if (!isEnabled(project)) return;
-
+	
 		// check if the same request is not already in the queue
 		IndexRequest request = new IndexAllProject(project, this);
 		for (int i = this.jobEnd; i > this.jobStart; i--) // NB: don't check job at jobStart, as it may have already started (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=32488)
@@ -258,11 +243,6 @@
 	 */
 	public void indexSourceFolder(CProject javaProject, IPath sourceFolder, final char[][] exclusionPattern) {
 		IProject project = javaProject.getProject();
-		/******
-		*TODO: BOG Remove these methods once the new indexer is
-		*fully integrated
-		*/
-//		if (!isEnabled(project)) return;
 
 		if (this.jobEnd > this.jobStart) {
 			// check if a job to index the project is not already in the queue
@@ -320,14 +300,7 @@
 		IndexRequest request = null;
 		if (target instanceof IProject) {
 			IProject p = (IProject) target;
-			/******
-			*TODO: BOG Remove these methods once the new indexer is
-			*fully integrated
-			*/
-//			if (!isEnabled(p)) return;
-
-			//if (JavaProject.hasJavaNature(p))
-				request = new IndexAllProject(p, this);
+			request = new IndexAllProject(p, this);
 		}
 	
 		if (request != null)
@@ -409,12 +382,7 @@
 	 */
 	public void removeSourceFolderFromIndex(CProject javaProject, IPath sourceFolder, char[][] exclusionPatterns) {
 		IProject project = javaProject.getProject();
-		/******
-		*TODO: BOG Remove these methods once the new indexer is
-		*fully integrated
-		*/
-//		if (!isEnabled(project)) return;
-
+	
 		if (this.jobEnd > this.jobStart) {
 			// check if a job to index the project is not already in the queue
 			IndexRequest request = new IndexAllProject(project, this);
@@ -596,49 +564,5 @@
 			else if (indexState == REBUILDING_STATE) state = "REBUILDING"; //$NON-NLS-1$
 			JobManager.verbose("-> index state updated to: " + state + " for: "+indexName); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-	}
-
-	/*************
-	 *TODO: BOG Remove these methods once the new indexer is
-	 *fully integrated
-	 * START OF TEMP INDEXER ENABLE SECTION
-	 */
-//	final static String INDEX_MODEL_ID = CCorePlugin.PLUGIN_ID + ".newindexmodel";
-//	final static String ACTIVATION = "enable";
-//	
-//	static QualifiedName activationKey = new QualifiedName(INDEX_MODEL_ID, ACTIVATION);
-//	
-//	public boolean isEnabled(IProject project) {
-//		String prop = null;
-//		try {
-//			if (project != null) {
-//				prop = project.getPersistentProperty(activationKey);
-//			}
-//		} catch (CoreException e) {
-//		}
-//		return ((prop != null) && prop.equalsIgnoreCase("true"));
-//	}
-//	
-//	public void setEnabled(IProject project, boolean on) {
-//		try {
-//			if (project != null) {
-//				Boolean newValue = new Boolean(on);
-//				Boolean oldValue = new Boolean(isEnabled(project));
-//				if (!oldValue.equals(newValue)) {
-//					project.setPersistentProperty(activationKey, newValue.toString());
-//					if (on) {
-//						indexAll(project);
-//					} else {
-//						//remove(project);
-//					}
-//				}
-//			}
-//		} catch (CoreException e) {
-//		}
-//	}
-	
-	/************
-	 * END OF TEMP INDEXER ENABLE SECTION
-	 */
-		
+	}	
 }
Index: index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java,v
retrieving revision 1.10
diff -u -r1.10 SourceIndexer.java
--- index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java	9 Sep 2003 17:53:51 -0000	1.10
+++ index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java	26 Sep 2003 17:26:36 -0000
@@ -108,4 +108,10 @@
 	 */
 	
 	public void setFileTypes(String[] fileTypes){}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer#getResourceFile()
+	 */
+	public IFile getResourceFile() {
+		return resourceFile;
+	}
 }
Index: index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java,v
retrieving revision 1.19
diff -u -r1.19 SourceIndexerRequestor.java
--- index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java	18 Sep 2003 15:15:08 -0000	1.19
+++ index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java	26 Sep 2003 17:26:36 -0000
@@ -15,6 +15,8 @@
 * @author bgheorgh
 */
 
+import java.util.LinkedList;
+
 import org.eclipse.cdt.core.parser.IProblem;
 import org.eclipse.cdt.core.parser.ISourceElementRequestor;
 import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
@@ -69,6 +71,9 @@
 	int depth = 0;
 	int methodDepth = 0;
 	
+	private IASTInclusion currentInclude = null;
+	private LinkedList includeStack = new LinkedList();
+	
 	public SourceIndexerRequestor(SourceIndexer indexer, IDocument document) {
 		super();
 		this.indexer = indexer;
@@ -180,9 +185,10 @@
 	public void enterInclusion(IASTInclusion inclusion) {
 		// TODO Auto-generated method stub
 		
-		//System.out.println("NEW INCLUSION \nInclusion short name: " + inclusion.getName()); 
-		//System.out.println("Inclusion Long Name: " + inclusion.getFullFileName());
-		//System.out.println("enterInclusion");
+		IASTInclusion parent = peekInclude();
+		indexer.addInclude(inclusion, parent);
+		//Push on stack
+		pushInclude(inclusion);
 	}
 
 	/* (non-Javadoc)
@@ -342,8 +348,7 @@
 	 */
 	public void exitInclusion(IASTInclusion inclusion) {
 		// TODO Auto-generated method stub
-		//System.out.println("exitInclusion");
-
+		popInclude();
 	}
 
 	/* (non-Javadoc)
@@ -455,4 +460,19 @@
         	indexer.addParameterReference( (IASTParameterDeclaration) reference.getReferencedElement() );
         
     }
+    
+	private void pushInclude( IASTInclusion inclusion ){
+		includeStack.addFirst( currentInclude );
+		currentInclude = inclusion;
+	}
+	
+	private IASTInclusion popInclude(){
+		IASTInclusion oldInclude = currentInclude;
+		currentInclude = (includeStack.size() > 0 ) ? (IASTInclusion) includeStack.removeFirst() : null;
+		return oldInclude;
+	}
+	
+	private IASTInclusion peekInclude(){
+		return currentInclude;
+	}
 }
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.14
diff -u -r1.14 CoreModel.java
--- model/org/eclipse/cdt/core/model/CoreModel.java	24 Jul 2003 14:15:06 -0000	1.14
+++ model/org/eclipse/cdt/core/model/CoreModel.java	26 Sep 2003 17:26:36 -0000
@@ -9,7 +9,6 @@
 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;
@@ -225,13 +224,5 @@
 	
 	public IndexManager getIndexManager(){
 		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.32
diff -u -r1.32 CModelManager.java
--- model/org/eclipse/cdt/internal/core/model/CModelManager.java	12 Aug 2003 14:29:07 -0000	1.32
+++ model/org/eclipse/cdt/internal/core/model/CModelManager.java	26 Sep 2003 17:26:37 -0000
@@ -28,6 +28,7 @@
 import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.core.model.IElementChangedListener;
 import org.eclipse.cdt.core.model.IParent;
+import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -42,8 +43,6 @@
 import org.eclipse.core.runtime.CoreException;
 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 {
 
@@ -782,10 +781,5 @@
 	public void deleting(IProject project){
 		//	discard all indexing jobs for this project
 		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.15
diff -u -r1.15 DeltaProcessor.java
--- model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java	12 Sep 2003 18:51:18 -0000	1.15
+++ model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java	26 Sep 2003 17:26:37 -0000
@@ -5,9 +5,6 @@
  * All Rights Reserved.
  */
 
-import java.util.ArrayList;
-import java.util.Iterator;
-
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.model.CModelException;
 import org.eclipse.cdt.core.model.CoreModel;
@@ -18,18 +15,20 @@
 import org.eclipse.cdt.core.model.ICModel;
 import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.core.model.IParent;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.IScannerInfoProvider;
 import org.eclipse.cdt.core.search.ICSearchConstants;
+import org.eclipse.cdt.core.search.ICSearchScope;
+import org.eclipse.cdt.core.search.SearchEngine;
+import org.eclipse.cdt.internal.core.search.PathCollector;
+import org.eclipse.cdt.internal.core.search.PatternSearchJob;
 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.cdt.internal.core.search.matching.CSearchPattern;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
 
 /**
  * This class is used by <code>CModelManager</code> to convert
@@ -46,8 +45,6 @@
 	
 	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. */
@@ -465,37 +462,26 @@
 	}
 
 	protected void updateIndexAddResource(ICElement element, IResourceDelta delta) {
-		//CModelManager.getDefault().getIndexManager().addResource(delta.getResource());
 	
 		if (indexManager == null)
 			return;
 		
 	    switch (element.getElementType()) {
 			case ICElement.C_PROJECT :
-					this.indexManager.indexAll(element.getCProject().getProject());
-					this.sourceDependencyManager.generateEntireDependencyTree(element.getCProject().getProject());
-					break;
+				this.indexManager.indexAll(element.getCProject().getProject());
+				break;
 	
 			case ICElement.C_UNIT:
 				IFile file = (IFile) delta.getResource();
 				IProject filesProject = file.getProject();
 				indexManager.addSource(file, filesProject.getFullPath());
-				cleanDependencies(file, filesProject);
-				IScannerInfo scanInfo = null;
-				IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(filesProject);
-				if (provider != null){
-					scanInfo = provider.getScannerInformation(filesProject);
-				}
-
-				this.sourceDependencyManager.addSource(file,filesProject.getFullPath(),scanInfo);
 				break;						
 	    }
 		
 	}
 
 	protected void updateIndexRemoveResource(ICElement element, IResourceDelta delta) {
-		//CModelManager.getDefault().getIndexManager().removeResource(delta.getResource());
-	
+		
 		if (indexManager == null)
 						return;
 
@@ -503,7 +489,6 @@
 			case ICElement.C_PROJECT :
 						this.indexManager.removeIndexFamily(element.getCProject().getProject().getFullPath());
 						// NB: Discarding index jobs belonging to this project was done during PRE_DELETE
-						this.sourceDependencyManager.removeTree(element.getCProject().getProject().getFullPath());
 						break;
 						// NB: Update of index if project is opened, closed, or its c nature is added or removed
 						//     is done in updateCurrentDeltaAndIndex
@@ -511,7 +496,6 @@
 			case ICElement.C_UNIT:
 						IFile file = (IFile) delta.getResource();
 						indexManager.remove(file.getFullPath().toString(), file.getProject().getProject().getFullPath());
-						sourceDependencyManager.remove(file.getFullPath().toString(),file.getProject().getFullPath());
 						break;				
 		}
 	
@@ -519,7 +503,7 @@
 	}
 	
 	private void updateDependencies(ICElement element){
-		//Update table
+	
 		IResource resource = element.getResource();
 		if (resource == null)
 		 return;
@@ -529,41 +513,35 @@
 		if ((fileExtension != null) &&
 			(fileExtension.equals("h") ||
 			fileExtension.equals("hh") ||
-			fileExtension.equals("hpp"))){
-		
-			if (sourceDependencyManager.getProjectDependsForFile(element.getResource().getLocation().toOSString()) == null){
-				//retrigger dep trees
-				 sourceDependencyManager.performConcurrentJob(new DependencyQueryJob(null,null,sourceDependencyManager,null),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null);
-			}
-			
-			ArrayList projs =sourceDependencyManager.getProjectDependsForFile(element.getResource().getLocation().toOSString());
-			if (projs != null){
-				Iterator iter = projs.iterator();
-				while (iter.hasNext()){
-					IPath pathToReindex = (IPath) iter.next();
-					
-					IWorkspaceRoot workRoot = element.getCProject().getProject().getWorkspace().getRoot();
-					IFile fileToReindex = workRoot.getFileForLocation(pathToReindex);
-					
-					if (fileToReindex.exists() ) {
-						if (VERBOSE)
-						 System.out.println("Going to reindex " + fileToReindex.getName());
-						this.indexManager.addSource(fileToReindex,fileToReindex.getProject().getProject().getFullPath());
-					}
+			fileExtension.equals("hpp")))
+		{
+			PathCollector pathCollector = new PathCollector();
+			//SubProgressMonitor subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 5 );
+			ICSearchScope scope = SearchEngine.createWorkspaceScope();
+			CSearchPattern pattern = CSearchPattern.createPattern(resource.getLocation().toOSString(),ICSearchConstants.INCLUDE, ICSearchConstants.REFERENCES,ICSearchConstants.EXACT_MATCH,true);
+			IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
+			indexManager.performConcurrentJob( 
+				new PatternSearchJob(
+					(CSearchPattern) pattern,
+					scope,
+					pathCollector,
+					indexManager 
+				),
+				ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
+				null );
+				
+			String[] iPath = pathCollector.getPaths();
+			for (int i=0;i<iPath.length; i++){
+				IPath pathToReindex = new Path(iPath[i]);
+				IWorkspaceRoot workRoot = element.getCProject().getProject().getWorkspace().getRoot();
+				IFile fileToReindex = workRoot.getFile(pathToReindex);
+				
+				if (fileToReindex!=null && fileToReindex.exists() ) {
+					if (VERBOSE)
+					 System.out.println("Going to reindex " + fileToReindex.getName());
+					this.indexManager.addSource(fileToReindex,fileToReindex.getProject().getProject().getFullPath());
 				}
 			}
 		}
-	}
-	
-	private void cleanDependencies(IFile file, IProject filesProject) {
-		String[] files = sourceDependencyManager.getFileDependencies(filesProject,file);
-		if (files != null){
-			for (int i=0; i<files.length; i++){
-			 if (VERBOSE)
-			  System.out.println("Table Clean Up : " + files[i]+ " removing " + file.getName());
-			  sourceDependencyManager.removeFromTable(files[i],file.getLocation());
-			}
-		}
-		
-	}
+	}	
 }
Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.28
diff -u -r1.28 ChangeLog
--- search/ChangeLog	25 Sep 2003 19:51:46 -0000	1.28
+++ search/ChangeLog	26 Sep 2003 17:26:37 -0000
@@ -1,3 +1,10 @@
+2003-09-25 Bogdan Gheorghe
+	- added SearchFor INCLUDE in ICSearchConstants
+	- added acceptIncludeDeclaration to IIndexSearchRequestor
+	- modified PathCollector to acceptIncludeDeclarations
+	- modified CSearchPattern to create an IncludePattern
+	- added IncludePattern.java
+	
 2003-09-25 Andrew Niefer
 	- partial fix for 43664	Modify Matchlocator to not try and create a link if we have no 
 	resource, instead just use the path
Index: search/org/eclipse/cdt/core/search/ICSearchConstants.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java,v
retrieving revision 1.7
diff -u -r1.7 ICSearchConstants.java
--- search/org/eclipse/cdt/core/search/ICSearchConstants.java	15 Sep 2003 17:31:22 -0000	1.7
+++ search/org/eclipse/cdt/core/search/ICSearchConstants.java	26 Sep 2003 17:26:37 -0000
@@ -96,9 +96,12 @@
 	public static final SearchFor MACRO = new SearchFor( 10 );
 	
 	public static final SearchFor CLASS_STRUCT = new SearchFor( 11 );
-	
+
 	public static final SearchFor TYPEDEF = new SearchFor( 12 );
 	
+	public static final SearchFor INCLUDE = new SearchFor( 13 );
+	
+
 	/* Nature of match */
 	
 	/**
Index: search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java,v
retrieving revision 1.3
diff -u -r1.3 IIndexSearchRequestor.java
--- search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java	12 Aug 2003 14:29:07 -0000	1.3
+++ search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java	26 Sep 2003 17:26:37 -0000
@@ -82,4 +82,6 @@
 
 void acceptMacroDeclaration(String resourcePath, char[] decodedSimpleName);
 
+void acceptIncludeDeclaration(String resourcePath, char[] decodedSimpleName);
+
 }
Index: search/org/eclipse/cdt/internal/core/search/PathCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/PathCollector.java,v
retrieving revision 1.3
diff -u -r1.3 PathCollector.java
--- search/org/eclipse/cdt/internal/core/search/PathCollector.java	12 Aug 2003 14:29:07 -0000	1.3
+++ search/org/eclipse/cdt/internal/core/search/PathCollector.java	26 Sep 2003 17:26:38 -0000
@@ -156,6 +156,12 @@
 	public void acceptMacroDeclaration(String resourcePath, char[] decodedSimpleName) {
 		this.paths.add(resourcePath);
 	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.IIndexSearchRequestor#acceptIncludeDeclaration(java.lang.String, char[])
+	 */
+	public void acceptIncludeDeclaration(String resourcePath, char[] decodedSimpleName) {
+		this.paths.add(resourcePath);
+	}
 
 	
 
Index: search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java,v
retrieving revision 1.23
diff -u -r1.23 CSearchPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	24 Sep 2003 13:36:40 -0000	1.23
+++ search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	26 Sep 2003 17:26:38 -0000
@@ -23,8 +23,8 @@
 import org.eclipse.cdt.core.parser.IQuickParseCallback;
 import org.eclipse.cdt.core.parser.IScanner;
 import org.eclipse.cdt.core.parser.IToken;
-import org.eclipse.cdt.core.parser.ParserLanguage;
 import org.eclipse.cdt.core.parser.ParserFactory;
+import org.eclipse.cdt.core.parser.ParserLanguage;
 import org.eclipse.cdt.core.parser.ParserMode;
 import org.eclipse.cdt.core.parser.ScannerException;
 import org.eclipse.cdt.core.parser.ast.ASTClassKind;
@@ -103,9 +103,25 @@
 			pattern = createNamespacePattern( patternString, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == MACRO ){
 			pattern = createMacroPattern( patternString, limitTo, matchMode, caseSensitive );
+		} else if ( searchFor == INCLUDE){
+			pattern = createIncludePattern( patternString, limitTo, matchMode, caseSensitive);
 		}
 	
 		return pattern;
+	}
+
+	/**
+	 * @param patternString
+	 * @param limitTo
+	 * @param matchMode
+	 * @param caseSensitive
+	 * @return
+	 */
+	private static CSearchPattern createIncludePattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
+		if( limitTo != REFERENCES )
+			return null;
+			
+		return new IncludePattern ( patternString.toCharArray(), matchMode, limitTo, caseSensitive );	
 	}
 
 	/**
Index: search/org/eclipse/cdt/internal/core/search/matching/IncludePattern.java
===================================================================
RCS file: search/org/eclipse/cdt/internal/core/search/matching/IncludePattern.java
diff -N search/org/eclipse/cdt/internal/core/search/matching/IncludePattern.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ search/org/eclipse/cdt/internal/core/search/matching/IncludePattern.java	26 Sep 2003 17:26:38 -0000
@@ -0,0 +1,105 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors: 
+ * IBM Rational Software - Initial API and implementation
+***********************************************************************/
+
+package org.eclipse.cdt.internal.core.search.matching;
+
+import java.io.IOException;
+
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+import org.eclipse.cdt.core.search.ICSearchScope;
+import org.eclipse.cdt.internal.core.CharOperation;
+import org.eclipse.cdt.internal.core.index.IEntryResult;
+import org.eclipse.cdt.internal.core.index.impl.IndexInput;
+import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
+import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
+import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
+
+/**
+ * @author bgheorgh
+ */
+public class IncludePattern extends CSearchPattern {
+	protected char [] simpleName;
+	protected char [] decodedSimpleName;
+	/**
+	 * 
+	 */
+	public IncludePattern(char[] name, int matchMode, LimitTo limitTo, boolean caseSensitive) {
+		super( matchMode, caseSensitive, limitTo );	
+		simpleName = name;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#decodeIndexEntry(org.eclipse.cdt.internal.core.index.IEntryResult)
+	 */
+	protected void decodeIndexEntry(IEntryResult entryResult) {
+		char[] word = entryResult.getWord();
+		int size = word.length;
+	
+		int firstSlash = CharOperation.indexOf( SEPARATOR, word, 0 );
+
+		this.decodedSimpleName = CharOperation.subarray(word, firstSlash + 1, -1);
+	}
+		
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#feedIndexRequestor(org.eclipse.cdt.internal.core.search.IIndexSearchRequestor, int, int[], org.eclipse.cdt.internal.core.index.impl.IndexInput, org.eclipse.cdt.core.search.ICSearchScope)
+	 */
+	public void feedIndexRequestor(IIndexSearchRequestor requestor, int detailLevel, int[] references, IndexInput input, ICSearchScope scope) throws IOException {
+		for (int i = 0, max = references.length; i < max; i++) {
+			IndexedFile file = input.getIndexedFile(references[i]);
+			String path;
+			if (file != null && scope.encloses(path =file.getPath())) {
+				requestor.acceptIncludeDeclaration(path, decodedSimpleName);
+			}
+		}	
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#resetIndexInfo()
+	 */
+	protected void resetIndexInfo() {
+		decodedSimpleName = null;
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#indexEntryPrefix()
+	 */
+	public char[] indexEntryPrefix() {
+		return AbstractIndexer.bestIncludePrefix(
+							_limitTo,
+							simpleName,
+							_matchMode, _caseSensitive
+			);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#matchIndexEntry()
+	 */
+	protected boolean matchIndexEntry() {
+		/* check simple name matches */
+		if (simpleName != null){
+			if( ! matchesName( simpleName, decodedSimpleName ) ){
+				return false; 
+			}
+		}
+		
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.search.ICSearchPattern#matchLevel(org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate, org.eclipse.cdt.core.search.ICSearchConstants.LimitTo)
+	 */
+	public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+}
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.33
diff -u -r1.33 CCorePlugin.java
--- src/org/eclipse/cdt/core/CCorePlugin.java	23 Sep 2003 15:17:13 -0000	1.33
+++ src/org/eclipse/cdt/core/CCorePlugin.java	26 Sep 2003 17:26:38 -0000
@@ -32,7 +32,6 @@
 import org.eclipse.cdt.internal.core.search.indexing.SourceIndexer;
 import org.eclipse.cdt.internal.core.search.matching.MatchLocator;
 import org.eclipse.cdt.internal.core.search.processing.JobManager;
-import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IWorkspace;
@@ -230,9 +229,6 @@
 		//Fired up the indexer
 		fCoreModel.startIndexing();
 		
-		//Fire up dependency manager
-		fCoreModel.startDependencyService();
-		
 		fDescriptorManager = new CDescriptorManager();
 		fDescriptorManager.startup();
 	}
@@ -765,7 +761,6 @@
 	private static final String SEARCH  = CCorePlugin.PLUGIN_ID + "/debug/search" ; //$NON-NLS-1$
 	private static final String MATCH_LOCATOR  = CCorePlugin.PLUGIN_ID + "/debug/matchlocator" ; //$NON-NLS-1$
 	private static final String PARSER = CCorePlugin.PLUGIN_ID + "/debug/parser" ; //$NON-NLS-1$
-	private static final String DEPENDENCY = CCorePlugin.PLUGIN_ID + "/debug/dependency" ; //$NON-NLS-1$
 	private static final String DELTA = CCorePlugin.PLUGIN_ID + "/debug/deltaprocessor" ;
 	/**
 	 * Configure the plugin with respect to option settings defined in ".options" file
@@ -779,13 +774,6 @@
 			option = Platform.getDebugOption(MODEL);
 			if(option != null) Util.VERBOSE_MODEL = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
 
-			boolean depFlag = false;
-			option = Platform.getDebugOption(DEPENDENCY);
-			if(option != null){
-				depFlag = option.equalsIgnoreCase("true"); 
-				DependencyManager.VERBOSE = depFlag;
-			}//$NON-NLS-1$
-			
 			boolean indexFlag = false;
 			option = Platform.getDebugOption(INDEX_MANAGER);
 			if(option != null) {
@@ -805,8 +793,7 @@
 			option = Platform.getDebugOption(MATCH_LOCATOR);
 			if(option != null) MatchLocator.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
 			
-			if (indexFlag == true ||
-			    depFlag == true){
+			if (indexFlag == true){
 			   JobManager.VERBOSE = true; 	
 			}
 		}
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.191
diff -u -r1.191 ChangeLog
--- ChangeLog	25 Sep 2003 19:51:42 -0000	1.191
+++ ChangeLog	26 Sep 2003 17:28:05 -0000
@@ -1,3 +1,10 @@
+2003-09-25 Bogdan Gheorghe
+	Deleted the remaining CProjectPropertyPage artifacts.
+	
+	* src/org/eclipse/cdt/internal/ui/preferences/CProjectOptionBlock.java
+	* src/org/eclipse/cdt/internal/ui/preferences/CProjectPropertyPage.java
+	* src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java	
+	
 2003-09-25 Hoda Amer
 	Solution to bug#43646: Code Assist won't work if missing end bracket
 
Index: src/org/eclipse/cdt/internal/ui/CPluginResources.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginResources.properties,v
retrieving revision 1.23
diff -u -r1.23 CPluginResources.properties
--- src/org/eclipse/cdt/internal/ui/CPluginResources.properties	18 Sep 2003 19:46:12 -0000	1.23
+++ src/org/eclipse/cdt/internal/ui/CPluginResources.properties	26 Sep 2003 17:28:05 -0000
@@ -305,7 +305,7 @@
 
 
 # ------- SearchDialogAction ---------------
-SearchDialogAction.label=C/C++ Search Dialog...
+SearchDialogAction.label=C/C++ Search...
 SearchDialogAction.tooltip=Opens C/C++ Search Dialog
 SearchDialogAction.description=Opens C/C++ Search Dialog
 
Index: src/org/eclipse/cdt/internal/ui/preferences/CProjectOptionBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/internal/ui/preferences/CProjectOptionBlock.java
diff -N src/org/eclipse/cdt/internal/ui/preferences/CProjectOptionBlock.java
--- src/org/eclipse/cdt/internal/ui/preferences/CProjectOptionBlock.java	23 Sep 2003 15:17:20 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,25 +0,0 @@
-/*
- * Created on 7-Aug-2003
- *
- * Copyright (c) 2002,2003 QNX Software Systems Ltd.
- * 
- * Contributors: 
- * QNX Software Systems - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.ui.preferences;
-
-import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
-import org.eclipse.cdt.ui.dialogs.IndexerBlock;
-import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock;
-//TODO: BOG UI Get rid before final 1.2
-public class CProjectOptionBlock extends TabFolderOptionBlock {
-
-	public CProjectOptionBlock(ICOptionContainer parent) {
-		super(parent);
-	}
-
-	protected void addTabs() {
-		addTab(new IndexerBlock());
-	}
-
-}
Index: src/org/eclipse/cdt/internal/ui/preferences/CProjectPropertyPage.java
===================================================================
RCS file: src/org/eclipse/cdt/internal/ui/preferences/CProjectPropertyPage.java
diff -N src/org/eclipse/cdt/internal/ui/preferences/CProjectPropertyPage.java
--- src/org/eclipse/cdt/internal/ui/preferences/CProjectPropertyPage.java	23 Sep 2003 15:17:20 -0000	1.11
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,120 +0,0 @@
-package org.eclipse.cdt.internal.ui.preferences;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.cdt.ui.CUIPlugin;
-import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
-import org.eclipse.ui.dialogs.PropertyPage;
-//TODO: BOG UI Get rid before final 1.2
-public class CProjectPropertyPage extends PropertyPage implements ICOptionContainer {
-
-	private CProjectOptionBlock fOptionBlock;
-
-	private static final String MSG_CLOSEDPROJECT = "CProjectPropertyPage.closedproject";
-
-	public CProjectPropertyPage() {
-		super();
-		fOptionBlock = new CProjectOptionBlock(this);
-	}
-
-	protected Control createContents(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setLayout(new FillLayout());
-
-		IProject project = getProject();
-		if (!project.isOpen()) {
-			contentForClosedProject(composite);
-		} else {
-			contentForCProject(composite);
-		}
-
-		return composite;
-	}
-	private void contentForCProject(Composite parent) {
-		fOptionBlock.createContents(parent);
-		//		WorkbenchHelp.setHelp(parent, ICMakeHelpContextIds.PROJECT_PROPERTY_PAGE);	
-	}
-
-	private void contentForClosedProject(Composite parent) {
-		Label label = new Label(parent, SWT.LEFT);
-		label.setText(CUIPlugin.getResourceString(MSG_CLOSEDPROJECT));
-		label.setFont(parent.getFont());
-
-		noDefaultAndApplyButton();
-	}
-	/**
-		 * @see PreferencePage#performOk
-		 */
-	public boolean performOk() {
-		Shell shell = getControl().getShell();
-		IRunnableWithProgress runnable = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				fOptionBlock.performApply(monitor);
-			}
-		};
-		IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
-		try {
-			new ProgressMonitorDialog(shell).run(false, true, op);
-		} catch (InvocationTargetException e) {
-			return false;
-		} catch (InterruptedException e) {
-			// cancelled
-			return false;
-		}
-		return true;
-	}
-
-	public IProject getProject() {
-		Object element = getElement();
-		if (element instanceof IProject) {
-			return (IProject) element;
-		}
-		return null;
-	}
-
-	/**
-	 * @see DialogPage#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		fOptionBlock.setVisible(visible);
-	}
-
-	public void updateContainer() {
-		boolean ok = true;
-		ok = fOptionBlock.isValid();
-		if (!ok) {
-			setErrorMessage(fOptionBlock.getErrorMessage());
-		}
-		if (ok) {
-			setErrorMessage(null);
-		}
-		setValid(ok);
-	}
-
-	protected void performDefaults() {
-		fOptionBlock.performDefaults();
-		super.performDefaults();
-	}
-
-	public boolean isValid() {
-		updateContainer();
-		return super.isValid();
-	}
-}
Index: src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java
diff -N src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java
--- src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java	23 Sep 2003 15:17:20 -0000	1.3
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,87 +0,0 @@
-package org.eclipse.cdt.ui.dialogs;
-/***********************************************************************
- * Copyright (c) 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v0.5 
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors:
- * QNX Software Systems - Initial API and implementation
-***********************************************************************/
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
-import org.eclipse.cdt.internal.core.sourcedependency.DependencyManager;
-import org.eclipse.cdt.ui.CUIPlugin;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-//TODO: BOG UI Get rid before final 1.2
-public class IndexerBlock extends AbstractCOptionPage {
-	private static final String PREFIX = "IndexerBlock"; // $NON-NLS-1$
-	private static final String LABEL = PREFIX + ".label"; // $NON-NLS-1$
-	private static final String DESC = PREFIX + ".desc"; // $NON-NLS-1$
-
-	private Button indexerSwitch2;
-	private Button dTreeSwitch;
-
-	public IndexerBlock() {
-		super(CUIPlugin.getResourceString(LABEL));
-		setDescription(CUIPlugin.getResourceString(DESC));
-	}
-
-	public void createControl(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NONE);
-		GridLayout grid = new GridLayout();
-		grid.numColumns = 1;
-		composite.setLayout(grid);
-
-		indexerSwitch2 = new Button(composite, SWT.CHECK | SWT.RIGHT);
-		indexerSwitch2.setAlignment(SWT.LEFT);
-		indexerSwitch2.setText("Enable NEW indexing service for this project");
-
-		dTreeSwitch = new Button(composite, SWT.CHECK | SWT.RIGHT);
-		dTreeSwitch.setAlignment(SWT.LEFT);
-		dTreeSwitch.setText("Enable dependency tree service for this project");
-
-		IProject project = getContainer().getProject();
-		if (project != null) {
-			
-//			IndexManager newIndexer = CCorePlugin.getDefault().getCoreModel().getIndexManager();
-//			
-//			if (indexerSwitch2 != null) {
-//				indexerSwitch2.setSelection(newIndexer.isEnabled(project));
-//			}
-
-//			DependencyManager depManager = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
-//
-//			if (dTreeSwitch != null) {
-//				dTreeSwitch.setSelection(depManager.isEnabled(project));
-//			}
-		}
-		setControl(composite);
-	}
-
-	public void performApply(IProgressMonitor monitor) throws CoreException {
-		IProject project = getContainer().getProject();
-		if (project != null) {
-//			IndexManager newIndexer = CCorePlugin.getDefault().getCoreModel().getIndexManager();
-//			newIndexer.setEnabled(project, indexerSwitch2.getSelection());
-
-//			DependencyManager depManager = CCorePlugin.getDefault().getCoreModel().getDependencyManager();
-//			depManager.setEnabled(project, dTreeSwitch.getSelection());
-		}
-	}
-
-	public void performDefaults() {
-		if (getContainer().getProject() != null) {
-			indexerSwitch2.setSelection(false);
-			dTreeSwitch.setSelection(false);
-		}
-	}
-}

Back to the top