diff options
Diffstat (limited to 'core/org.eclipse.cdt.core')
-rw-r--r-- | core/org.eclipse.cdt.core/META-INF/MANIFEST.MF | 7 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/plugin.xml | 7 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ExclusionInstance.java | 18 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshExclusion.java | 163 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java | 237 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusion.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ResourceExclusion.java) | 5 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusionFactory.java | 64 |
7 files changed, 233 insertions, 268 deletions
diff --git a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF index ececbc080a5..238adb9b4f9 100644 --- a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF @@ -40,7 +40,12 @@ Export-Package: org.eclipse.cdt.core, org.eclipse.cdt.core.templateengine, org.eclipse.cdt.core.templateengine.process, org.eclipse.cdt.core.templateengine.process.processes, - org.eclipse.cdt.internal.core;x-friends:="org.eclipse.cdt.ui,org.eclipse.cdt.debug.core,org.eclipse.cdt.managedbuilder.core,org.eclipse.cdt.make.core,org.eclipse.cdt.make.ui", + org.eclipse.cdt.internal.core; + x-friends:="org.eclipse.cdt.ui, + org.eclipse.cdt.debug.core, + org.eclipse.cdt.managedbuilder.core, + org.eclipse.cdt.make.core, + org.eclipse.cdt.make.ui", org.eclipse.cdt.internal.core.browser;x-friends:="org.eclipse.cdt.ui", org.eclipse.cdt.internal.core.cdtvariables;x-internal:=true, org.eclipse.cdt.internal.core.dom;x-internal:=true, diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml index 63cd92ab49a..3cb166b1acb 100644 --- a/core/org.eclipse.cdt.core/plugin.xml +++ b/core/org.eclipse.cdt.core/plugin.xml @@ -743,5 +743,12 @@ version="5.0.0"> </CProjectStorageType> </extension> + <extension + point="org.eclipse.cdt.core.RefreshExclusionFactory"> + <exclusionFactory + exclusionClass="org.eclipse.cdt.internal.core.resources.ResourceExclusion" + factoryClass="org.eclipse.cdt.internal.core.resources.ResourceExclusionFactory"> + </exclusionFactory> + </extension> </plugin> diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ExclusionInstance.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ExclusionInstance.java index 7578eca707d..192d80bf156 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ExclusionInstance.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ExclusionInstance.java @@ -10,10 +10,9 @@ *******************************************************************************/ package org.eclipse.cdt.core.resources; +import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; -import org.w3c.dom.Document; -import org.w3c.dom.Element; /** * Represents a particular instance of an exclusion. E.g., if an exclusion allowed @@ -100,9 +99,9 @@ public class ExclusionInstance { fDisplayString = displayString; } - public synchronized void persistInstanceData(Document doc, Element exclusionElement) { + public synchronized void persistInstanceData(ICStorageElement exclusionElement) { - Element instanceElement = doc.createElement(INSTANCE_ELEMENT_NAME); + ICStorageElement instanceElement = exclusionElement.createChild(INSTANCE_ELEMENT_NAME); // persist the type of the object we are instanceElement.setAttribute(CLASS_ATTRIBUTE_NAME, this.getClass().getName()); @@ -137,25 +136,22 @@ public class ExclusionInstance { instanceElement.setAttribute(DISPLAY_STRING_ATTRIBUTE_NAME, fDisplayString); } - exclusionElement.appendChild(instanceElement); - // persist any data from extenders - persistExtendedInstanceData(doc, instanceElement); + persistExtendedInstanceData(instanceElement); } - protected synchronized void persistExtendedInstanceData(Document doc, Element instanceElement) { + protected synchronized void persistExtendedInstanceData(ICStorageElement instanceElement) { // override to provide extension specific behaviour if desired } - public synchronized static ExclusionInstance loadInstanceData(Element instanceElement) { + public synchronized static ExclusionInstance loadInstanceData(ICStorageElement instanceElement, RefreshScopeManager manager) { String className = instanceElement.getAttribute(CLASS_ATTRIBUTE_NAME); ExclusionInstance newInstance = null; // see if there is a custom instance class - RefreshScopeManager manager = RefreshScopeManager.getInstance(); newInstance = manager.getInstanceForClassName(className); if(newInstance == null) { @@ -200,7 +196,7 @@ public class ExclusionInstance { return newInstance; } - protected synchronized void loadExtendedInstanceData(Element instanceElement) { + protected synchronized void loadExtendedInstanceData(ICStorageElement child) { // override to provide extension specific behaviour if desired } }
\ No newline at end of file diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshExclusion.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshExclusion.java index 1e0a0550b51..5497c45c970 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshExclusion.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshExclusion.java @@ -15,12 +15,9 @@ import java.util.LinkedList; import java.util.List; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; import com.ibm.icu.text.MessageFormat; @@ -207,9 +204,9 @@ public abstract class RefreshExclusion { fNestedExclusions.remove(exclusion); } - public synchronized void persistData(Document doc, Element parentElement) { + public synchronized void persistData(ICStorageElement parentElement) { // persist the common data that all RefreshExclusions have - Element exclusionElement = doc.createElement(EXCLUSION_ELEMENT_NAME); + ICStorageElement exclusionElement = parentElement.createChild(EXCLUSION_ELEMENT_NAME); // persist the type of the object we are exclusionElement.setAttribute(CLASS_ATTRIBUTE_NAME, this.getClass().getName()); @@ -238,145 +235,113 @@ public abstract class RefreshExclusion { // the structure of the XML tree exclusionElement.setAttribute(CONTRIBUTOR_ID_ATTRIBUTE_NAME, getContributorId()); - - parentElement.appendChild(exclusionElement); // persist instances for(ExclusionInstance instance : fExclusionInstanceList) { - instance.persistInstanceData(doc, exclusionElement); + instance.persistInstanceData(exclusionElement); } // provide a place for extenders to store their own data - Element extensionElement = doc.createElement(EXTENSION_DATA_ELEMENT_NAME); - exclusionElement.appendChild(extensionElement); + ICStorageElement extensionElement = exclusionElement.createChild(EXTENSION_DATA_ELEMENT_NAME); // call extender to store any extender-specific data - persistExtendedData(doc, extensionElement); + persistExtendedData(extensionElement); // persist nested exclusions for(RefreshExclusion exclusion : fNestedExclusions) { - exclusion.persistData(doc, exclusionElement); + exclusion.persistData(exclusionElement); } } - protected synchronized void persistExtendedData(Document doc, Element extensionElement) { + protected synchronized void persistExtendedData(ICStorageElement extensionElement) { // override to provide extension specific behaviour if desired } - protected synchronized void loadExtendedData(Element parentElement) { + protected synchronized void loadExtendedData(ICStorageElement grandchild) { // override to provide extension specific behaviour if desired } - public synchronized static List<RefreshExclusion> loadData(Element parentElement, RefreshExclusion parentExclusion, IResource parentResource) throws CoreException { - + public synchronized static List<RefreshExclusion> loadData(ICStorageElement parentElement, + RefreshExclusion parentExclusion, IResource parentResource, RefreshScopeManager manager) throws CoreException { + List<RefreshExclusion> exclusions = new LinkedList<RefreshExclusion>(); // the parent element might contain any number of exclusions... iterate through the list - NodeList childNodes = parentElement.getChildNodes(); + ICStorageElement[] children = parentElement.getChildren(); - for (int i = 0; i < childNodes.getLength(); i++) { - Node node = childNodes.item(i); + for (ICStorageElement child : children) { - // node should be an element - if (node instanceof Element) { - Element exclusionElement = (Element) node; + if (child.getName().equals(EXCLUSION_ELEMENT_NAME)) { - if (exclusionElement.getNodeName().equals(EXCLUSION_ELEMENT_NAME)) { + // create an object of the proper type + String className = child.getAttribute(CLASS_ATTRIBUTE_NAME); + RefreshExclusion newExclusion = manager.getExclusionForClassName(className); - // create an object of the proper type - String className = exclusionElement.getAttribute(CLASS_ATTRIBUTE_NAME); - RefreshScopeManager manager = RefreshScopeManager.getInstance(); - RefreshExclusion newExclusion = manager.getExclusionForClassName(className); + if (newExclusion == null) { + throw new CoreException(CCorePlugin.createStatus(MessageFormat.format( + Messages.RefreshExclusion_0, className))); + } - if (newExclusion == null) { - throw new CoreException(CCorePlugin.createStatus(MessageFormat.format( - Messages.RefreshExclusion_0, className))); + // load the exclusion type + String exclusionTypeString = child.getAttribute(EXCLUSION_TYPE_ATTRIBUTE_NAME); + if (exclusionTypeString != null) { + if (exclusionTypeString.equals(FILE_VALUE)) { + newExclusion.fExclusionType = org.eclipse.cdt.core.resources.ExclusionType.FILE; } - // load the exclusion type - String exclusionTypeString = exclusionElement - .getAttribute(EXCLUSION_TYPE_ATTRIBUTE_NAME); - if (exclusionTypeString != null) { - if (exclusionTypeString.equals(FILE_VALUE)) { - newExclusion.fExclusionType = org.eclipse.cdt.core.resources.ExclusionType.FILE; - } - - else if (exclusionTypeString.equals(FOLDER_VALUE)) { - newExclusion.fExclusionType = org.eclipse.cdt.core.resources.ExclusionType.FOLDER; - } - - else if (exclusionTypeString.equals(RESOURCE_VALUE)) { - newExclusion.fExclusionType = org.eclipse.cdt.core.resources.ExclusionType.RESOURCE; - } - - else { - // error - } + else if (exclusionTypeString.equals(FOLDER_VALUE)) { + newExclusion.fExclusionType = org.eclipse.cdt.core.resources.ExclusionType.FOLDER; } - // set parent if nested - newExclusion.fParentExclusion = parentExclusion; - - // set parent resource if there is one - newExclusion.fParentResource = parentResource; + else if (exclusionTypeString.equals(RESOURCE_VALUE)) { + newExclusion.fExclusionType = org.eclipse.cdt.core.resources.ExclusionType.RESOURCE; + } - newExclusion.fContributorId = exclusionElement - .getAttribute(CONTRIBUTOR_ID_ATTRIBUTE_NAME); + else { + // error + } + } - // get the extension element - NodeList extensionList = exclusionElement - .getElementsByTagName(EXTENSION_DATA_ELEMENT_NAME); + // set parent if nested + newExclusion.fParentExclusion = parentExclusion; - for (int k = 0; k < extensionList.getLength(); k++) { - Node node1 = extensionList.item(k); - // the node will be an Element - if (node1 instanceof Element) { - Element extensionElement = (Element) node1; + // set parent resource if there is one + newExclusion.fParentResource = parentResource; - // load the extension's data - newExclusion.loadExtendedData(extensionElement); - } - } + newExclusion.fContributorId = child.getAttribute(CONTRIBUTOR_ID_ATTRIBUTE_NAME); + + // get the extension element + ICStorageElement[] grandchildren = child.getChildren(); - // load instances - NodeList exclusionChildNodes = exclusionElement.getChildNodes(); - - for (int k = 0; k < exclusionChildNodes.getLength(); k++) { - Node node1 = exclusionChildNodes.item(k); - - // the node will be an element - if (node1 instanceof Element) { - Element instanceElement = (Element) node1; - - // is the node an instance? - if (instanceElement.getNodeName().equals(INSTANCE_ELEMENT_NAME)) { - - // load the instance data - ExclusionInstance instance = ExclusionInstance - .loadInstanceData(instanceElement); - newExclusion.fExclusionInstanceList.add(instance); - } - } + for (ICStorageElement grandchild : grandchildren) { + + if (grandchild.getName().equals(RefreshExclusion.EXTENSION_DATA_ELEMENT_NAME)) { + + // load the extension's data + newExclusion.loadExtendedData(grandchild); } - // load nested exclusions - List<RefreshExclusion> nestedExclusions = loadData(exclusionElement, - newExclusion, null); + else if (grandchild.getName().equals(INSTANCE_ELEMENT_NAME)) { - // add to parent - for (RefreshExclusion nestedExclusion : nestedExclusions) { - newExclusion.addNestedExclusion(nestedExclusion); + // load the instance data + ExclusionInstance instance = ExclusionInstance.loadInstanceData(grandchild, manager); + newExclusion.fExclusionInstanceList.add(instance); } + } + + // load nested exclusions + List<RefreshExclusion> nestedExclusions = loadData(child, newExclusion, null, manager); - // add the new exclusion to the list of exclusions to return - exclusions.add(newExclusion); + // add to parent + for (RefreshExclusion nestedExclusion : nestedExclusions) { + newExclusion.addNestedExclusion(nestedExclusion); } + // add the new exclusion to the list of exclusions to return + exclusions.add(newExclusion); } } - - - + return exclusions; } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java index 5042091ad2f..1c3d9db9339 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java @@ -10,26 +10,16 @@ *******************************************************************************/ package org.eclipse.cdt.core.resources; -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.text.MessageFormat; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CProjectNature; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICStorageElement; +import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -46,13 +36,6 @@ import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.QualifiedName; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; /** * The RefreshScopeManager provides access to settings pertaining to refreshes performed during @@ -71,12 +54,12 @@ import org.xml.sax.SAXException; * */ public class RefreshScopeManager { - + public static final String WORKSPACE_PATH_ATTRIBUTE_NAME = "workspacePath"; //$NON-NLS-1$ public static final String RESOURCE_ELEMENT_NAME = "resource"; //$NON-NLS-1$ public static final String VERSION_NUMBER_ATTRIBUTE_NAME = "versionNumber"; //$NON-NLS-1$ public static final String VERSION_ELEMENT_NAME = "version"; //$NON-NLS-1$ - public static final QualifiedName REFRESH_SCOPE_PROPERTY_NAME = new QualifiedName(CCorePlugin.PLUGIN_ID, "refreshScope"); //$NON-NLS-1$ + public static final String REFRESH_SCOPE_STORAGE_NAME = "refreshScope"; //$NON-NLS-1$ public static final String EXTENSION_ID = "RefreshExclusionFactory"; //$NON-NLS-1$ public static final Object EXCLUSION_FACTORY = "exclusionFactory"; //$NON-NLS-1$ public static final String EXCLUSION_CLASS = "exclusionClass"; //$NON-NLS-1$ @@ -89,6 +72,8 @@ public class RefreshScopeManager { private HashMap<String, RefreshExclusionFactory> fClassnameToExclusionFactoryMap; private static RefreshScopeManager fInstance; + private boolean fIsLoading = false; + private boolean fIsLoaded = false; private RefreshScopeManager(){ fClassnameToExclusionFactoryMap = new HashMap<String, RefreshExclusionFactory>(); @@ -288,12 +273,14 @@ public class RefreshScopeManager { } public synchronized void clearAllResourcesToRefresh() { + getProjectToResourcesMap(); fProjectToResourcesMap.clear(); } public synchronized void clearAllData() { clearAllResourcesToRefresh(); clearAllExclusions(); + fIsLoaded = false; } private HashMap<IProject, LinkedHashSet<IResource>> getProjectToResourcesMap() { @@ -346,82 +333,58 @@ public class RefreshScopeManager { exclusions.remove(exclusion); } - public synchronized void persistSettings() throws CoreException { + public synchronized void persistSettings(ICProjectDescription projectDescription) throws CoreException { getProjectToResourcesMap(); getResourcesToExclusionsMap(); - for(IProject project : fProjectToResourcesMap.keySet()) { + for (IProject project : fProjectToResourcesMap.keySet()) { if (!project.exists()) { continue; } - // serialize all settings for the project to an XML document which we will use to persist - // the data to a persistent resource property - DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = null; - try { - docBuilder = docBuilderFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new CoreException(CCorePlugin.createStatus(Messages.RefreshScopeManager_0, e)); - } - - // create document root - Document doc = docBuilder.newDocument(); - Element root = doc.createElement("root"); //$NON-NLS-1$ - doc.appendChild(root); - - Element versionElement = doc.createElement(VERSION_ELEMENT_NAME); - versionElement.setAttribute(VERSION_NUMBER_ATTRIBUTE_NAME, Integer.toString(fVersion)); - root.appendChild(versionElement); - - for(IResource resource : fProjectToResourcesMap.get(project)) { - - // create a resource node - Element resourceElement = doc.createElement(RESOURCE_ELEMENT_NAME); - resourceElement.setAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME, resource.getFullPath().toString()); - root.appendChild(resourceElement); - - // populate the node with any exclusions - List<RefreshExclusion> exclusions = fResourceToExclusionsMap.get(resource); - if (exclusions != null) { - for(RefreshExclusion exclusion : exclusions) { - exclusion.persistData(doc, resourceElement); - } - } - } - - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer; - try { - transformer = transformerFactory.newTransformer(); - } catch (TransformerConfigurationException e) { - throw new CoreException(CCorePlugin.createStatus(Messages.RefreshScopeManager_1, e)); - } - //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); //$NON-NLS-1$ - - //create a string from xml tree - StringWriter stringWriter = new StringWriter(); - StreamResult result = new StreamResult(stringWriter); - DOMSource source = new DOMSource(doc); - try { - transformer.transform(source, result); - } catch (TransformerException e) { - throw new CoreException(CCorePlugin.createStatus(Messages.RefreshScopeManager_2, e)); - } - String xmlString = stringWriter.toString(); - - // use the string as a value for a persistent resource property on the project - project.setPersistentProperty(REFRESH_SCOPE_PROPERTY_NAME, xmlString); + // serialize all settings for the project to the C Project Description + if (project.isOpen()) { + if (project.hasNature(CProjectNature.C_NATURE_ID)) { + + ICStorageElement storageElement = projectDescription.getStorage(REFRESH_SCOPE_STORAGE_NAME, true); + storageElement.clear(); + + storageElement.setAttribute(VERSION_NUMBER_ATTRIBUTE_NAME, Integer.toString(fVersion)); + + for (IResource resource : fProjectToResourcesMap.get(project)) { + // create a resource node + ICStorageElement resourceElement = storageElement.createChild(RESOURCE_ELEMENT_NAME); + resourceElement.setAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME, resource + .getFullPath().toString()); + + // populate the node with any exclusions + List<RefreshExclusion> exclusions = fResourceToExclusionsMap.get(resource); + if (exclusions != null) { + for (RefreshExclusion exclusion : exclusions) { + exclusion.persistData(resourceElement); + } + } + + } + + } + } } } public synchronized void loadSettings() throws CoreException { - // iterate through all projects in the workspace. If they are C projects, attempt to load settings - // from them. - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - - for (IProject project : workspaceRoot.getProjects()) { - loadSettings(workspaceRoot, project); + if(!fIsLoaded && !fIsLoading) { + fIsLoading = true; + // iterate through all projects in the workspace. If they are C projects, attempt to load settings + // from them. + IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); + + for (IProject project : workspaceRoot.getProjects()) { + loadSettings(workspaceRoot, project); + } + + fIsLoaded = true; + fIsLoading = false; } } @@ -430,95 +393,57 @@ public class RefreshScopeManager { * @param project * @throws CoreException */ - private synchronized void loadSettings(IWorkspaceRoot workspaceRoot, IProject project) throws CoreException { + private synchronized void loadSettings(IWorkspaceRoot workspaceRoot, IProject project) + throws CoreException { if (project.isOpen()) { if (project.hasNature(CProjectNature.C_NATURE_ID)) { - String xmlString = project.getPersistentProperty(REFRESH_SCOPE_PROPERTY_NAME); + ICProjectDescription projectDescription = CProjectDescriptionManager.getInstance() + .getProjectDescription(project, false); + ICStorageElement storageElement = projectDescription.getStorage( + REFRESH_SCOPE_STORAGE_NAME, true); - // if there are no settings, then configure the default behaviour of refreshing the entire - // project, - // with no exclusions - if (xmlString == null) { - addResourceToRefresh(project, project); - } - - else { - // convert the XML string to a DOM model + // walk the tree and load the settings - DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory - .newInstance(); - DocumentBuilder docBuilder = null; - try { - docBuilder = docBuilderFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new CoreException(CCorePlugin.createStatus( - Messages.RefreshScopeManager_0, e)); - } - - Document doc = null; - - try { - doc = docBuilder.parse(new InputSource(new StringReader(xmlString))); - } catch (SAXException e) { - throw new CoreException(CCorePlugin.createStatus( - MessageFormat.format(Messages.RefreshScopeManager_3, - project.getName()), e)); - } catch (IOException e) { - throw new CoreException(CCorePlugin.createStatus( - MessageFormat.format(Messages.RefreshScopeManager_3, - project.getName()), e)); - } + // for now ignore the version attribute, as we only have version 1 at this time - // walk the DOM and load the settings + // iterate through the child nodes + ICStorageElement[] children = storageElement.getChildren(); - // for now ignore the version attribute, as we only have version 1 at this time + for (ICStorageElement child : children) { - // iterate through the child nodes - NodeList nodeList = doc.getDocumentElement().getChildNodes(); // child of the doc is the root + if (child.getName().equals(RESOURCE_ELEMENT_NAME)) { - for (int k = 0; k < nodeList.getLength(); k++) { - Node node = nodeList.item(k); + // get the resource path + String resourcePath = child.getAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME); - // node will be an element - if (node instanceof Element) { - Element resourceElement = (Element) node; + if (resourcePath == null) { + // error - if (resourceElement.getNodeName().equals(RESOURCE_ELEMENT_NAME)) { - - // get the resource path - String resourcePath = resourceElement - .getAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME); - - if (resourcePath == null) { - // error - - } + } - else { - // find the resource - IResource resource = workspaceRoot.findMember(resourcePath); + else { + // find the resource + IResource resource = workspaceRoot.findMember(resourcePath); - if (resource == null) { - // error - } + if (resource == null) { + // error + } - else { - addResourceToRefresh(project, resource); + else { + addResourceToRefresh(project, resource); - // load any exclusions - List<RefreshExclusion> exclusions = RefreshExclusion.loadData(resourceElement, null, resource); + // load any exclusions + List<RefreshExclusion> exclusions = RefreshExclusion.loadData( + child, null, resource, this); - // add them - for (RefreshExclusion exclusion : exclusions) { - addExclusion(resource, exclusion); - } - } + // add them + for (RefreshExclusion exclusion : exclusions) { + addExclusion(resource, exclusion); } } } } } - } } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ResourceExclusion.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusion.java index 13238c876a1..2f4ba6d192b 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ResourceExclusion.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusion.java @@ -9,11 +9,14 @@ * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.core.resources; +package org.eclipse.cdt.internal.core.resources; import java.util.LinkedList; import java.util.List; +import org.eclipse.cdt.core.resources.ExclusionInstance; +import org.eclipse.cdt.core.resources.Messages; +import org.eclipse.cdt.core.resources.RefreshExclusion; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusionFactory.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusionFactory.java new file mode 100644 index 00000000000..551bf2c321d --- /dev/null +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceExclusionFactory.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2011 IBM Corporation 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.resources; + +import org.eclipse.cdt.core.resources.ExclusionInstance; +import org.eclipse.cdt.core.resources.RefreshExclusion; +import org.eclipse.cdt.core.resources.RefreshExclusionFactory; + +/** + * @author crecoskie + * + */ +public class ResourceExclusionFactory extends RefreshExclusionFactory { + + /** + * + */ + public ResourceExclusionFactory() { + // TODO Auto-generated constructor stub + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.resources.RefreshExclusionFactory#createNewExclusion() + */ + @Override + public RefreshExclusion createNewExclusion() { + return new ResourceExclusion(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.resources.RefreshExclusionFactory#createNewExclusionInstance() + */ + @Override + public ExclusionInstance createNewExclusionInstance() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.resources.RefreshExclusionFactory#getExclusionClassname() + */ + @Override + public String getExclusionClassname() { + return ResourceExclusion.class.getName(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.resources.RefreshExclusionFactory#getInstanceClassname() + */ + @Override + public String getInstanceClassname() { + // TODO Auto-generated method stub + return null; + } + +} |