diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexChangeEvent.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexChangeEvent.java index 92159f588b7..9addd7984b2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexChangeEvent.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexChangeEvent.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2008 Wind River Systems, Inc. and others. + * Copyright (c) 2006, 2009 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -51,4 +51,10 @@ public interface IIndexChangeEvent { * true, the files of the set have been written after the index was cleared. */ public Set getFilesWritten(); + + /** + * Returns true when a new file had been added to the index. + * @since 5.2 + */ + public boolean hasNewFile(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexChangeEvent.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexChangeEvent.java index 31db4631674..cb0ce7d8864 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexChangeEvent.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexChangeEvent.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2008 Wind River Systems, Inc. and others. + * Copyright (c) 2006, 2009 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -50,10 +50,14 @@ public class IndexChangeEvent implements IIndexChangeEvent { } public boolean isCleared() { - return fChangeEvent.fCleared; + return fChangeEvent.isCleared(); } public boolean isReloaded() { - return fChangeEvent.fReloaded; + return fChangeEvent.isReloaded(); + } + + public boolean hasNewFile() { + return fChangeEvent.hasNewFiles(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index a7aee2e492c..16309b5ea51 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -232,21 +232,48 @@ public class PDOM extends PlatformObject implements IPDOM { public static class ChangeEvent { public Set fClearedFiles= new HashSet(); public Set fFilesWritten= new HashSet(); - public boolean fCleared= false; - public boolean fReloaded= false; + private boolean fCleared= false; + private boolean fReloaded= false; + private boolean fNewFiles= false; - private void setCleared() { + public void clear() { fReloaded= false; - fCleared= true; + fCleared= false; + fNewFiles= false; + fClearedFiles.clear(); fFilesWritten.clear(); } - public void clear() { - fReloaded= fCleared= false; + private void setCleared() { + fCleared= true; + fReloaded= false; + fNewFiles= false; + fClearedFiles.clear(); fFilesWritten.clear(); } + + + public boolean isCleared() { + return fCleared; + } + + public void setReloaded() { + fReloaded= true; + } + + public boolean isReloaded() { + return fReloaded; + } + + public void setHasNewFiles() { + fNewFiles = true; + } + + public boolean hasNewFiles() { + return fNewFiles; + } } public static interface IListener { public void handleChange(PDOM pdom, ChangeEvent event); @@ -414,6 +441,7 @@ public class PDOM extends PlatformObject implements IPDOM { PDOMFile pdomFile = new PDOMFile(linkage, location, linkageID); getFileIndex().insert(pdomFile.getRecord()); file= pdomFile; + fEvent.setHasNewFiles(); } return file; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMProxy.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMProxy.java index 4008a90a67f..d6e5b17dd2b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMProxy.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMProxy.java @@ -241,7 +241,7 @@ public class PDOMProxy implements IPDOM { pdom.addListener(listener); } ChangeEvent event= new ChangeEvent(); - event.fReloaded= true; + event.setReloaded(); for (Iterator iterator = fListeners.iterator(); iterator.hasNext();) { IListener listener = iterator.next(); listener.handleChange(fDelegate, event); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/TriggerNotificationTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/TriggerNotificationTask.java index b97cd66487d..7ccd262ffac 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/TriggerNotificationTask.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/TriggerNotificationTask.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2008 Wind River Systems, Inc. and others. + * Copyright (c) 2007, 2009 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -42,7 +42,7 @@ public class TriggerNotificationTask implements IPDOMIndexerTask { public void run(IProgressMonitor monitor) { ChangeEvent event= new ChangeEvent(); - event.fReloaded= true; + event.setReloaded(); fManager.handleChange(fPDOM, event); } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index d96f47f4f2d..e73c0eefb19 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -24,14 +24,16 @@ import java.util.Map; import java.util.MissingResourceException; import java.util.ResourceBundle; +import com.ibm.icu.text.MessageFormat; + import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager; import org.eclipse.cdt.core.cdtvariables.IUserVarSupplier; -import org.eclipse.cdt.core.dom.CDOM; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.envvar.IEnvironmentVariableManager; import org.eclipse.cdt.core.index.IIndexManager; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.IScannerInfoProvider; @@ -81,8 +83,6 @@ import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.jobs.Job; import org.osgi.framework.BundleContext; -import com.ibm.icu.text.MessageFormat; - /** * CCorePlugin is the life-cycle owner of the core plug-in, and starting point for access to many core APIs. * @@ -94,6 +94,10 @@ public class CCorePlugin extends Plugin { public static final int STATUS_CDTPROJECT_EXISTS = 1; public static final int STATUS_CDTPROJECT_MISMATCH = 2; public static final int CDT_PROJECT_NATURE_ID_MISMATCH = 3; + /** + * Status code for core exception that is thrown if a pdom grew larger than the supported limit. + * @since 5.2 + */ public static final int STATUS_PDOM_TOO_LARGE = 4; public static final String PLUGIN_ID = "org.eclipse.cdt.core"; //$NON-NLS-1$ @@ -1004,8 +1008,12 @@ public class CCorePlugin extends Plugin { return getPluginPreferences().getBoolean(PREF_USE_STRUCTURAL_PARSE_MODE); } - public CDOM getDOM() { - return CDOM.getInstance(); + /** + * @deprecated use {@link ITranslationUnit} or {@link ILanguage} to construct ASTs, instead. + */ + @Deprecated + public org.eclipse.cdt.core.dom.CDOM getDOM() { + return org.eclipse.cdt.core.dom.CDOM.getInstance(); } public ICdtVariableManager getCdtVariableManager(){ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CReconciler.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CReconciler.java index f995e828c40..d1037624190 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CReconciler.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CReconciler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2008 Wind River Systems, Inc. and others. + * Copyright (c) 2006, 2009 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -265,8 +265,10 @@ public class CReconciler extends MonoReconciler { * @see org.eclipse.cdt.core.index.IIndexChangeListener#indexChanged(org.eclipse.cdt.core.index.IIndexChangeEvent) */ public void indexChanged(IIndexChangeEvent event) { - if (!fIndexChanged && !fIgnoreChanges && isRelevantProject(event.getAffectedProject())) { - fIndexChanged= true; + if (!fIndexChanged && isRelevantProject(event.getAffectedProject())) { + if (!fIgnoreChanges || event.isCleared() || event.isReloaded() || event.hasNewFile()) { + fIndexChanged= true; + } } }