diff options
Diffstat (limited to 'build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java')
-rw-r--r-- | build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java | 417 |
1 files changed, 208 insertions, 209 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java index f52b35361a9..61800a1a04c 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java @@ -53,47 +53,48 @@ import org.eclipse.core.runtime.Status; public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceChangeListener { private Map<IProject, DiscoveredInfoHolder> fDiscoveredInfoHolderMap = new HashMap<IProject, DiscoveredInfoHolder>(); - private List<IDiscoveredInfoListener> listeners = Collections.synchronizedList(new ArrayList<IDiscoveredInfoListener>()); + private List<IDiscoveredInfoListener> listeners = Collections + .synchronizedList(new ArrayList<IDiscoveredInfoListener>()); private static final int INFO_CHANGED = 1; private static final int INFO_REMOVED = 2; private static class DiscoveredInfoHolder { Map<InfoContext, IDiscoveredPathInfo> fInfoMap = new HashMap<InfoContext, IDiscoveredPathInfo>(); -// PathSettingsContainer fContainer = PathSettingsContainer.createRootContainer(); + // PathSettingsContainer fContainer = PathSettingsContainer.createRootContainer(); - public IDiscoveredPathInfo getInfo(InfoContext context){ + public IDiscoveredPathInfo getInfo(InfoContext context) { return fInfoMap.get(context); } -// private Map getMap(IPath path, boolean create, boolean exactPath){ -// PathSettingsContainer child = fContainer.getChildContainer(path, create, exactPath); -// Map map = null; -// if(child != null){ -// map = (Map)child.getValue(); -// if(map == null && create){ -// map = new HashMap(); -// child.setValue(map); -// } -// } -// -// return map; -// } - -// public IDiscoveredPathInfo getInfo(IFile file, String instanceId){ -// IPath path = file.getProjectRelativePath(); -// Map map = getMap(path, false, false); -// for(Iterator iter = map.entrySet().iterator(); iter.hasNext();){ -// Map.Entry entry = (Map.Entry)iter.next(); -// InfoContext context = (InfoContext)entry.getKey(); -// if(context.matches(file)) -// return (IDiscoveredPathInfo)entry.getValue(); -// } -// return null; -// } - - public IDiscoveredPathInfo setInfo(InfoContext context, IDiscoveredPathInfo info){ - if(info != null) + // private Map getMap(IPath path, boolean create, boolean exactPath){ + // PathSettingsContainer child = fContainer.getChildContainer(path, create, exactPath); + // Map map = null; + // if(child != null){ + // map = (Map)child.getValue(); + // if(map == null && create){ + // map = new HashMap(); + // child.setValue(map); + // } + // } + // + // return map; + // } + + // public IDiscoveredPathInfo getInfo(IFile file, String instanceId){ + // IPath path = file.getProjectRelativePath(); + // Map map = getMap(path, false, false); + // for(Iterator iter = map.entrySet().iterator(); iter.hasNext();){ + // Map.Entry entry = (Map.Entry)iter.next(); + // InfoContext context = (InfoContext)entry.getKey(); + // if(context.matches(file)) + // return (IDiscoveredPathInfo)entry.getValue(); + // } + // return null; + // } + + public IDiscoveredPathInfo setInfo(InfoContext context, IDiscoveredPathInfo info) { + if (info != null) return fInfoMap.put(context, info); return fInfoMap.remove(context); } @@ -121,39 +122,38 @@ public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceC IResource resource = event.getResource(); switch (event.getType()) { - case IResourceChangeEvent.POST_CHANGE : - DiscoveredScannerInfoStore.getInstance().updateScannerConfigStore(event.getDelta()); - break; - case IResourceChangeEvent.PRE_DELETE : - case IResourceChangeEvent.PRE_CLOSE : - if (resource.getType() == IResource.PROJECT) { - //TODO: better handlind of resource remove/rename - fDiscoveredInfoHolderMap.remove(resource); - ScannerConfigProfileManager.getInstance().handleProjectRemoved(resource.getProject()); - } - break; + case IResourceChangeEvent.POST_CHANGE: + DiscoveredScannerInfoStore.getInstance().updateScannerConfigStore(event.getDelta()); + break; + case IResourceChangeEvent.PRE_DELETE: + case IResourceChangeEvent.PRE_CLOSE: + if (resource.getType() == IResource.PROJECT) { + //TODO: better handlind of resource remove/rename + fDiscoveredInfoHolderMap.remove(resource); + ScannerConfigProfileManager.getInstance().handleProjectRemoved(resource.getProject()); + } + break; } } } - - @Override public IDiscoveredPathInfo getDiscoveredInfo(IProject project) throws CoreException { return getDiscoveredInfo(project, new InfoContext(project)); } @Override - public IDiscoveredPathInfo getDiscoveredInfo(IProject project, InfoContext context) throws CoreException{ + public IDiscoveredPathInfo getDiscoveredInfo(IProject project, InfoContext context) throws CoreException { return getDiscoveredInfo(project, context, true); } @Override - public IDiscoveredPathInfo getDiscoveredInfo(IProject project, InfoContext context, boolean defaultToProjectSettings) throws CoreException{ + public IDiscoveredPathInfo getDiscoveredInfo(IProject project, InfoContext context, + boolean defaultToProjectSettings) throws CoreException { DiscoveredInfoHolder holder = getHolder(project, true); IDiscoveredPathInfo info = holder.getInfo(context); - if(info == null){ + if (info == null) { info = loadPathInfo(project, context, defaultToProjectSettings); holder.setInfo(context, info); } @@ -161,63 +161,61 @@ public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceC return info; } - private DiscoveredInfoHolder getHolder(IProject project, boolean create){ + private DiscoveredInfoHolder getHolder(IProject project, boolean create) { DiscoveredInfoHolder holder = fDiscoveredInfoHolderMap.get(project); - if(holder == null && create){ + if (holder == null && create) { holder = new DiscoveredInfoHolder(); fDiscoveredInfoHolderMap.put(project, holder); } return holder; } - private IDiscoveredPathInfo loadPathInfo(IProject project, InfoContext context, boolean defaultToProjectSettings) throws CoreException { - IDiscoveredPathInfo pathInfo = null; - - IScannerConfigBuilderInfo2Set container = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(project); - IScannerConfigBuilderInfo2 buildInfo = container.getInfo(context); - if(buildInfo == null && defaultToProjectSettings) - buildInfo = container.getInfo(new InfoContext(project)); - - if(buildInfo != null){ - String profileId = buildInfo.getSelectedProfileId(); - SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). - getSCProfileInstance(project, context, profileId); - IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); - - if (collector instanceof IScannerInfoCollector2) { - IScannerInfoCollector2 collector2 = (IScannerInfoCollector2) collector; - pathInfo = collector2.createPathInfoObject(); - } - } - if(pathInfo == null) { - pathInfo = new DiscoveredPathInfo(project); - } - return pathInfo; - } - + private IDiscoveredPathInfo loadPathInfo(IProject project, InfoContext context, boolean defaultToProjectSettings) + throws CoreException { + IDiscoveredPathInfo pathInfo = null; + IScannerConfigBuilderInfo2Set container = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(project); + IScannerConfigBuilderInfo2 buildInfo = container.getInfo(context); + if (buildInfo == null && defaultToProjectSettings) + buildInfo = container.getInfo(new InfoContext(project)); + if (buildInfo != null) { + String profileId = buildInfo.getSelectedProfileId(); + SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance().getSCProfileInstance(project, + context, profileId); + IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); -// private DiscoveredInfoHolder getHolder + if (collector instanceof IScannerInfoCollector2) { + IScannerInfoCollector2 collector2 = (IScannerInfoCollector2) collector; + pathInfo = collector2.createPathInfoObject(); + } + } + if (pathInfo == null) { + pathInfo = new DiscoveredPathInfo(project); + } + return pathInfo; + } -// private IDiscoveredPathInfo loadPathInfo(IProject project) throws CoreException { -// IDiscoveredPathInfo pathInfo = null; -// -// IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager.createScannerConfigBuildInfo2(project); -// String profileId = buildInfo.getSelectedProfileId(); -// SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). -// getSCProfileInstance(project, profileId); -// IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); -// -// if (collector instanceof IScannerInfoCollector2) { -// IScannerInfoCollector2 collector2 = (IScannerInfoCollector2) collector; -// pathInfo = collector2.createPathInfoObject(); -// } -// else { -// pathInfo = new DiscoveredPathInfo(project); -// } -// return pathInfo; -// } + // private DiscoveredInfoHolder getHolder + + // private IDiscoveredPathInfo loadPathInfo(IProject project) throws CoreException { + // IDiscoveredPathInfo pathInfo = null; + // + // IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager.createScannerConfigBuildInfo2(project); + // String profileId = buildInfo.getSelectedProfileId(); + // SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). + // getSCProfileInstance(project, profileId); + // IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); + // + // if (collector instanceof IScannerInfoCollector2) { + // IScannerInfoCollector2 collector2 = (IScannerInfoCollector2) collector; + // pathInfo = collector2.createPathInfoObject(); + // } + // else { + // pathInfo = new DiscoveredPathInfo(project); + // } + // return pathInfo; + // } @Override public void removeDiscoveredInfo(IProject project) { @@ -227,7 +225,7 @@ public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceC @Override public void removeDiscoveredInfo(IProject project, InfoContext context) { DiscoveredInfoHolder holder = getHolder(project, false); - if(holder != null){ + if (holder != null) { IDiscoveredPathInfo info = holder.setInfo(context, null); if (info != null) { fireUpdate(INFO_REMOVED, info); @@ -235,144 +233,145 @@ public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceC } } - /* (non-Javadoc) - * @see org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager#updateDiscoveredInfo(org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo, java.util.List) - */ - @Override + /* (non-Javadoc) + * @see org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager#updateDiscoveredInfo(org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo, java.util.List) + */ + @Override public void updateDiscoveredInfo(IDiscoveredPathInfo info, List<IResource> changedResources) throws CoreException { - updateDiscoveredInfo(new InfoContext(info.getProject()), info, true, changedResources); - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager#updateDiscoveredInfo(org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo, java.util.List) - */ - @Override - public void updateDiscoveredInfo(InfoContext context, IDiscoveredPathInfo info, boolean updateContainer, List<IResource> changedResources) throws CoreException { - DiscoveredInfoHolder holder = getHolder(info.getProject(), true); - IDiscoveredPathInfo oldInfo = holder.getInfo(context); + updateDiscoveredInfo(new InfoContext(info.getProject()), info, true, changedResources); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager#updateDiscoveredInfo(org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo, java.util.List) + */ + @Override + public void updateDiscoveredInfo(InfoContext context, IDiscoveredPathInfo info, boolean updateContainer, + List<IResource> changedResources) throws CoreException { + DiscoveredInfoHolder holder = getHolder(info.getProject(), true); + IDiscoveredPathInfo oldInfo = holder.getInfo(context); if (oldInfo != null) { - IDiscoveredScannerInfoSerializable serializable = info.getSerializable(); + IDiscoveredScannerInfoSerializable serializable = info.getSerializable(); if (serializable != null) { holder.setInfo(context, info); - IProject project = info.getProject(); - DiscoveredScannerInfoStore.getInstance().saveDiscoveredScannerInfoToState(project, context, serializable); + IProject project = info.getProject(); + DiscoveredScannerInfoStore.getInstance().saveDiscoveredScannerInfoToState(project, context, + serializable); fireUpdate(INFO_CHANGED, info); - if(updateContainer){ + if (updateContainer) { - IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager.createScannerConfigBuildInfo2(project); - String profileId = buildInfo.getSelectedProfileId(); - ScannerConfigScope profileScope = ScannerConfigProfileManager.getInstance(). - getSCProfileConfiguration(profileId).getProfileScope(); - changeDiscoveredContainer(project, profileScope, changedResources); + IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager + .createScannerConfigBuildInfo2(project); + String profileId = buildInfo.getSelectedProfileId(); + ScannerConfigScope profileScope = ScannerConfigProfileManager.getInstance() + .getSCProfileConfiguration(profileId).getProfileScope(); + changeDiscoveredContainer(project, profileScope, changedResources); } - } - else { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, - MakeMessages.getString("DiscoveredPathManager.Info_Not_Serializable"), null)); //$NON-NLS-1$ + } else { + throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, + MakeMessages.getString("DiscoveredPathManager.Info_Not_Serializable"), null)); //$NON-NLS-1$ } } } - /** - * Allows one to update the discovered information for a particular scanner discovery profile ID. - * TODO: This should be made API in IDiscoveredPathManager, or in an interface derived there from. - * - * @param context - * @param info - * @param updateContainer - * @param changedResources - * @param profileId - * @throws CoreException - */ - public void updateDiscoveredInfo(InfoContext context, IDiscoveredPathInfo info, boolean updateContainer, List<IResource> changedResources, String profileId) throws CoreException { - DiscoveredInfoHolder holder = getHolder(info.getProject(), true); - IDiscoveredPathInfo oldInfo = holder.getInfo(context); + /** + * Allows one to update the discovered information for a particular scanner discovery profile ID. + * TODO: This should be made API in IDiscoveredPathManager, or in an interface derived there from. + * + * @param context + * @param info + * @param updateContainer + * @param changedResources + * @param profileId + * @throws CoreException + */ + public void updateDiscoveredInfo(InfoContext context, IDiscoveredPathInfo info, boolean updateContainer, + List<IResource> changedResources, String profileId) throws CoreException { + DiscoveredInfoHolder holder = getHolder(info.getProject(), true); + IDiscoveredPathInfo oldInfo = holder.getInfo(context); if (oldInfo != null) { - IDiscoveredScannerInfoSerializable serializable = info.getSerializable(); + IDiscoveredScannerInfoSerializable serializable = info.getSerializable(); if (serializable != null) { holder.setInfo(context, info); - IProject project = info.getProject(); - DiscoveredScannerInfoStore.getInstance().saveDiscoveredScannerInfoToState(project, context, serializable); + IProject project = info.getProject(); + DiscoveredScannerInfoStore.getInstance().saveDiscoveredScannerInfoToState(project, context, + serializable); fireUpdate(INFO_CHANGED, info); - if(updateContainer){ + if (updateContainer) { - IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager.createScannerConfigBuildInfo2(project); + IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager + .createScannerConfigBuildInfo2(project); - ScannerConfigScope profileScope = ScannerConfigProfileManager.getInstance(). - getSCProfileConfiguration(profileId).getProfileScope(); - changeDiscoveredContainer(project, profileScope, changedResources); + ScannerConfigScope profileScope = ScannerConfigProfileManager.getInstance() + .getSCProfileConfiguration(profileId).getProfileScope(); + changeDiscoveredContainer(project, profileScope, changedResources); } - } - else { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, - MakeMessages.getString("DiscoveredPathManager.Info_Not_Serializable"), null)); //$NON-NLS-1$ + } else { + throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, + MakeMessages.getString("DiscoveredPathManager.Info_Not_Serializable"), null)); //$NON-NLS-1$ } } } - /* (non-Javadoc) - * @see org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager#changeDiscoveredContainer(org.eclipse.core.resources.IProject, java.lang.String) - */ - @Override - public void changeDiscoveredContainer(final IProject project, final ScannerConfigScope profileScope, final List<IResource> changedResources) { - // order here is of essence - // 1. clear DiscoveredPathManager's path info cache - DiscoveredInfoHolder holder = getHolder(project, false); - InfoContext context = new InfoContext(project); - IDiscoveredPathInfo oldInfo = holder.getInfo(context); - - // 2. switch the containers - try { - IWorkspaceRunnable runnable = new IWorkspaceRunnable() { - @Override + /* (non-Javadoc) + * @see org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager#changeDiscoveredContainer(org.eclipse.core.resources.IProject, java.lang.String) + */ + @Override + public void changeDiscoveredContainer(final IProject project, final ScannerConfigScope profileScope, + final List<IResource> changedResources) { + // order here is of essence + // 1. clear DiscoveredPathManager's path info cache + DiscoveredInfoHolder holder = getHolder(project, false); + InfoContext context = new InfoContext(project); + IDiscoveredPathInfo oldInfo = holder.getInfo(context); + + // 2. switch the containers + try { + IWorkspaceRunnable runnable = new IWorkspaceRunnable() { + @Override public void run(IProgressMonitor monitor) throws CoreException { - ICProject cProject = CoreModel.getDefault().create(project); - if (ScannerConfigScope.PROJECT_SCOPE.equals(profileScope)) { - CoreModel.setPathEntryContainer(new ICProject[]{cProject}, - new DiscoveredPathContainer(project), null); - } - else if (ScannerConfigScope.FILE_SCOPE.equals(profileScope)) { - PerFileDiscoveredPathContainer container = new PerFileDiscoveredPathContainer(project); - CoreModel.setPathEntryContainer(new ICProject[]{cProject}, - container, null); - if (changedResources != null) { - List<PathEntryContainerChanged> changeDelta = new ArrayList<PathEntryContainerChanged>(changedResources.size()); - for (IResource resource : changedResources) { - IPath path = resource.getFullPath(); - changeDelta.add(new PathEntryContainerChanged(path, - PathEntryContainerChanged.INCLUDE_CHANGED | - PathEntryContainerChanged.MACRO_CHANGED)); // both include paths and symbols changed - } - CoreModel.pathEntryContainerUpdates(container, - changeDelta.toArray(new PathEntryContainerChanged[changeDelta.size()]), - null); - } - } - else { - MakeCorePlugin.log(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), 1, - MakeMessages.getString("DiscoveredContainer.ScopeErrorMessage"), null)); //$NON-NLS-1$ - } - - } - }; - CoreModel.run(runnable, null); - } - catch (CoreException e) { - MakeCorePlugin.log(e); - } - - // 3. clear the container's path entry cache - if (oldInfo != null) { - fireUpdate(INFO_REMOVED, oldInfo); - } - } + ICProject cProject = CoreModel.getDefault().create(project); + if (ScannerConfigScope.PROJECT_SCOPE.equals(profileScope)) { + CoreModel.setPathEntryContainer(new ICProject[] { cProject }, + new DiscoveredPathContainer(project), null); + } else if (ScannerConfigScope.FILE_SCOPE.equals(profileScope)) { + PerFileDiscoveredPathContainer container = new PerFileDiscoveredPathContainer(project); + CoreModel.setPathEntryContainer(new ICProject[] { cProject }, container, null); + if (changedResources != null) { + List<PathEntryContainerChanged> changeDelta = new ArrayList<PathEntryContainerChanged>( + changedResources.size()); + for (IResource resource : changedResources) { + IPath path = resource.getFullPath(); + changeDelta.add( + new PathEntryContainerChanged(path, PathEntryContainerChanged.INCLUDE_CHANGED + | PathEntryContainerChanged.MACRO_CHANGED)); // both include paths and symbols changed + } + CoreModel.pathEntryContainerUpdates(container, + changeDelta.toArray(new PathEntryContainerChanged[changeDelta.size()]), null); + } + } else { + MakeCorePlugin.log(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), 1, + MakeMessages.getString("DiscoveredContainer.ScopeErrorMessage"), null)); //$NON-NLS-1$ + } + + } + }; + CoreModel.run(runnable, null); + } catch (CoreException e) { + MakeCorePlugin.log(e); + } + + // 3. clear the container's path entry cache + if (oldInfo != null) { + fireUpdate(INFO_REMOVED, oldInfo); + } + } private void fireUpdate(final int type, final IDiscoveredPathInfo info) { Object[] list = listeners.toArray(); for (int i = 0; i < list.length; i++) { - final IDiscoveredInfoListener listener = (IDiscoveredInfoListener)list[i]; + final IDiscoveredInfoListener listener = (IDiscoveredInfoListener) list[i]; if (listener != null) { SafeRunner.run(new ISafeRunnable() { @@ -386,12 +385,12 @@ public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceC @Override public void run() throws Exception { switch (type) { - case INFO_CHANGED : - listener.infoChanged(info); - break; - case INFO_REMOVED : - listener.infoRemoved(info); - break; + case INFO_CHANGED: + listener.infoChanged(info); + break; + case INFO_REMOVED: + listener.infoRemoved(info); + break; } } }); |