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 a2c6a4d5b9a..219cedbcbd4 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 @@ -28,6 +28,8 @@ import org.eclipse.cdt.core.ICDescriptorListener; 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.filetype.IResolverChangeListener; +import org.eclipse.cdt.core.filetype.ResolverChangeEvent; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ElementChangedEvent; @@ -60,7 +62,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.Platform; -public class CModelManager implements IResourceChangeListener, ICDescriptorListener { +public class CModelManager implements IResourceChangeListener, ICDescriptorListener, IResolverChangeListener { public static boolean VERBOSE = false; @@ -159,6 +161,9 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe // Register the Core Model on the Descriptor // Manager, it needs to know about changes. CCorePlugin.getDefault().getCDescriptorManager().addDescriptorListener(factory); + // Register the Core Model on the Resolver + // Manager, it needs to know about changes. + CCorePlugin.getDefault().getResolverModel().addResolverChangeListener(factory); } return factory; } @@ -729,6 +734,27 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe } } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.filetype.IResolverChangeListener#resolverChanged(org.eclipse.cdt.core.filetype.ResolverChangeEvent) + */ + public void resolverChanged(ResolverChangeEvent event) { + // TODO Auto-generated method stub +// boolean isProjectSpecific = false; +// ICElement element = null; +// ResolverDelta[] deltas = event.getDeltas(); +// for (int i = 0; i < deltas.length; i++) { +// ResolverDelta delta = deltas[i]; +// int type = delta.getElementType(); +// if (type == ResolverDelta.ELEMENT_PROJECT) { +// IProject p = delta.getProject(); +// element = create(p); +// } else if (type == ResolverDelta.ELEMENT_WORKSPACE) { +// element = getCModel(); +// } +// System.out.println(delta); +// } + } + public void fire(int eventType) { fire(null, eventType); } @@ -1054,10 +1080,15 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe * */ public void shutdown() { - if (this.fDeltaProcessor.indexManager != null){ // no more indexing - this.fDeltaProcessor.indexManager.shutdown(); + if (this.fDeltaProcessor.indexManager != null) { // no more indexing + this.fDeltaProcessor.indexManager.shutdown(); } - + + // Remove ourself from the DescriptorManager. + CCorePlugin.getDefault().getCDescriptorManager().removeDescriptorListener(factory); + // Remove ourself from the ResolverManager. + CCorePlugin.getDefault().getResolverModel().removeResolverChangeListener(factory); + // Do any shutdown of services. ResourcesPlugin.getWorkspace().removeResourceChangeListener(factory); 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 b03dbf12c87..27e3a16747f 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 @@ -111,8 +111,6 @@ public class CCorePlugin extends Plugin { private CoreModel fCoreModel; - private ResolverModel fResolverModel; - // -------- static methods -------- static { @@ -240,7 +238,6 @@ public class CCorePlugin extends Plugin { getPluginPreferences().setDefault(PREF_USE_STRUCTURAL_PARSE_MODE, false); // Start file type manager - fResolverModel = ResolverModel.getDefault(); } @@ -623,7 +620,7 @@ public class CCorePlugin extends Plugin { } public IResolverModel getResolverModel() { - return fResolverModel; + return ResolverModel.getDefault(); } public CoreModel getCoreModel() { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/internal/filetype/ResolverModel.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/internal/filetype/ResolverModel.java index f0a37368ea9..1fcf21d6449 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/internal/filetype/ResolverModel.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/internal/filetype/ResolverModel.java @@ -21,7 +21,6 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -122,7 +121,7 @@ public class ResolverModel implements IResolverModel { private static final QualifiedName QN_CUSTOM_RESOLVER = new QualifiedName(RESOLVER_MODEL_ID, TAG_CUSTOM); // List of listeners on the model - private List fListeners = Collections.synchronizedList(new Vector()); + private List fListeners = new Vector(); // Private ctor to preserve singleton status private ResolverModel() {