Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorDoug Schaefer2005-10-17 21:34:42 +0000
committerDoug Schaefer2005-10-17 21:34:42 +0000
commitcb04187d5b3238b6a9814d9b10cb9020d20ab5e3 (patch)
treee93de2be2d4cbfe4c0f434f4feab447c7ed2ddb7 /core
parent79e643ba6de5041986e6a5c58ca1e26cfb066889 (diff)
downloadorg.eclipse.cdt-cb04187d5b3238b6a9814d9b10cb9020d20ab5e3.tar.gz
org.eclipse.cdt-cb04187d5b3238b6a9814d9b10cb9020d20ab5e3.tar.xz
org.eclipse.cdt-cb04187d5b3238b6a9814d9b10cb9020d20ab5e3.zip
A little more PDOM magic. Project deletes, incremental parsing.
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java7
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java10
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java4
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java2
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java3
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java21
7 files changed, 50 insertions, 12 deletions
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java
index 22f71d43173..5d6c2c2d621 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java
@@ -34,6 +34,7 @@ import org.eclipse.cdt.core.ICExtensionReference;
import org.eclipse.cdt.core.IBinaryParser.IBinaryArchive;
import org.eclipse.cdt.core.IBinaryParser.IBinaryFile;
import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
+import org.eclipse.cdt.core.dom.PDOM;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ElementChangedEvent;
@@ -63,8 +64,8 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.content.IContentTypeManager.IContentTypeChangeListener;
import org.eclipse.core.runtime.content.IContentTypeManager.ContentTypeChangeEvent;
+import org.eclipse.core.runtime.content.IContentTypeManager.IContentTypeChangeListener;
public class CModelManager implements IResourceChangeListener, ICDescriptorListener, IContentTypeChangeListener {
@@ -1112,11 +1113,17 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
return this.fDeltaProcessor.indexManager;
}
-
public void deleting(IProject project) {
- // discard all indexing jobs for this project
+ // discard all indexing jobs for this project
this.getIndexManager().discardJobs(project.getName());
+ // delete the PDOM for this project
+ try {
+ PDOM.deletePDOM(project);
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ }
+ // stop the binary runner for this project
removeBinaryRunner(project);
}
-} \ No newline at end of file
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java
index 83dec199ce0..97d6ff89d11 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.core.dom;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.core.runtime.CoreException;
/**
@@ -27,4 +28,10 @@ public interface IPDOM {
public IASTName[] getDeclarations(IBinding binding) throws CoreException;
+ public void delete() throws CoreException;
+
+ public ICodeReaderFactory getCodeReaderFactory();
+
+ public ICodeReaderFactory getCodeReaderFactory(IWorkingCopy root);
+
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java
index 38bef67a402..1f00c91db52 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.core.dom;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.IElementChangedListener;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
/**
* @author Doug Schaefer
@@ -36,11 +37,18 @@ public interface IPDOMProvider {
public IPDOM getPDOM(IProject project);
/**
+ * Delete the PDOM for the given project.
+ *
+ * @param project
+ */
+ public void deletePDOM(IProject project) throws CoreException;
+
+ /**
* Return the element changed listener that will handled change
* events that require the PDOM be updated.
*
* @return the element changed listener
*/
public IElementChangedListener getElementChangedListener();
-
+
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java
index 4d292b395a4..061fc828d09 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java
@@ -66,6 +66,10 @@ public class PDOM {
return getPDOMProvider().getPDOM(project);
}
+ public static void deletePDOM(IProject project) throws CoreException {
+ getPDOMProvider().getPDOM(project).delete();
+ }
+
/**
* Startup the PDOM. This mainly sets us up to handle model
* change events.
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java
index 5d460c2cd7d..c4657d00b6a 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java
@@ -75,7 +75,7 @@ public class ParserUtil
{
// this is the file for sure
// check the working copy
- if( workingCopies.hasNext() )
+ if( workingCopies != null && workingCopies.hasNext() )
{
char[] buffer = findWorkingCopy( resultingResource, workingCopies );
if( buffer != null )
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java
index 6407eb7d103..f53c96267d9 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java
@@ -31,4 +31,7 @@ public class NullPDOMProvider implements IPDOMProvider {
return null;
}
+ public void deletePDOM(IProject project) {
+ }
+
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java
index be0d249c76e..2abc1c4614d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java
@@ -16,12 +16,15 @@ import java.util.Set;
import org.eclipse.cdt.core.dom.CDOM;
import org.eclipse.cdt.core.dom.IASTServiceProvider;
+import org.eclipse.cdt.core.dom.IPDOM;
+import org.eclipse.cdt.core.dom.PDOM;
import org.eclipse.cdt.core.dom.IASTServiceProvider.UnsupportedDialectException;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserUtil;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
@@ -36,6 +39,7 @@ import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -98,7 +102,12 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
}
if (project instanceof ICProject) {
- tu = CDOM.getInstance().getASTService().getTranslationUnit(input.getStorage(), ((ICProject)project).getProject());
+ IProject p = ((ICProject)project).getProject();
+ IPDOM pdom = PDOM.getPDOM(p);
+ tu = CDOM.getInstance().getASTService().getTranslationUnit(
+ input.getStorage(),
+ p,
+ pdom.getCodeReaderFactory());
lang = DOMSearchUtil.getLanguage(input.getStorage().getFullPath(), ((ICProject)project).getProject());
projectName = ((ICProject)project).getElementName();
}
@@ -107,15 +116,15 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
return;
}
} else {
- IFile resourceFile = null;
- resourceFile = fEditor.getInputFile();
+ // an awful lot of cass goingo on here...
+ IWorkingCopy workingCopy = (IWorkingCopy)fEditor.getInputCElement();
+ IFile resourceFile = (IFile)workingCopy.getResource();
project = new CProject(null, resourceFile.getProject());
-
+ IPDOM pdom = PDOM.getPDOM(resourceFile.getProject());
try {
tu = CDOM.getInstance().getASTService().getTranslationUnit(
resourceFile,
- CDOM.getInstance().getCodeReaderFactory(
- CDOM.PARSE_WORKING_COPY_WHENEVER_POSSIBLE));
+ pdom.getCodeReaderFactory(workingCopy));
} catch (IASTServiceProvider.UnsupportedDialectException e) {
operationNotAvailable(CSEARCH_OPERATION_OPERATION_UNAVAILABLE_MESSAGE);
return;

Back to the top