1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Run reconciler when new file is added to index, bug 276605.

This commit is contained in:
Markus Schorn 2009-07-07 09:46:53 +00:00
parent ed13924735
commit a3b3eae7ab
7 changed files with 69 additions and 21 deletions

View file

@ -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 {
* <code>true</code>, the files of the set have been written after the index was cleared.
*/
public Set<IIndexFileLocation> getFilesWritten();
/**
* Returns <code>true</code> when a new file had been added to the index.
* @since 5.2
*/
public boolean hasNewFile();
}

View file

@ -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();
}
}

View file

@ -232,21 +232,48 @@ public class PDOM extends PlatformObject implements IPDOM {
public static class ChangeEvent {
public Set<IIndexFileLocation> fClearedFiles= new HashSet<IIndexFileLocation>();
public Set<IIndexFileLocation> fFilesWritten= new HashSet<IIndexFileLocation>();
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;
}

View file

@ -241,7 +241,7 @@ public class PDOMProxy implements IPDOM {
pdom.addListener(listener);
}
ChangeEvent event= new ChangeEvent();
event.fReloaded= true;
event.setReloaded();
for (Iterator<IListener> iterator = fListeners.iterator(); iterator.hasNext();) {
IListener listener = iterator.next();
listener.handleChange(fDelegate, event);

View file

@ -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);
}
}

View file

@ -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(){

View file

@ -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,10 +265,12 @@ 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())) {
if (!fIndexChanged && isRelevantProject(event.getAffectedProject())) {
if (!fIgnoreChanges || event.isCleared() || event.isReloaded() || event.hasNewFile()) {
fIndexChanged= true;
}
}
}
}