[145697] refactoring an element from an inline schema doesn't update the declaration (only the reference)
diff --git a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchPattern.java b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchPattern.java index 9b60c9e..e3b58e1 100644 --- a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchPattern.java +++ b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchPattern.java
@@ -20,20 +20,30 @@ private String attributeName = null; private String searchName = null; private String searchNamespace = null; + private String parentName = null; private int depth = -1; + + public XMLSearchPattern(String elementNamespace, String parentElementName,String elementName, String attributeName) { + this(elementNamespace, parentElementName, elementName, attributeName, -1); + } public XMLSearchPattern(String elementNamespace, String elementName, String attributeName) { - this(elementNamespace, elementName, attributeName, -1); + this(elementNamespace, null, elementName, attributeName, -1); } public XMLSearchPattern(String elementNamespace, String elementName, String attributeName, int depth) { + this(elementNamespace, null, elementName, attributeName, depth); + } + + private XMLSearchPattern(String elementNamespace, String parentElementName, String elementName, String attributeName, int depth) { super(); this.attributeName = attributeName; this.elementName = elementName; + this.parentName = parentElementName; this.elementNamespace = elementNamespace; this.depth = depth; - } - + } + public XMLSearchPattern(){ } @@ -87,6 +97,14 @@ { this.depth = depth; } + +public String getParentName() { + return parentName; +} + +public void setParentName(String parentName) { + this.parentName = parentName; +}
diff --git a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/SAXSearchElement.java b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/SAXSearchElement.java index f4dc81d..a9ec4a1 100644 --- a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/SAXSearchElement.java +++ b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/SAXSearchElement.java
@@ -21,6 +21,7 @@ String elementNamespace; Map namespaceMap = new HashMap(); // Map of string prefix keys and namespace String targetNamespace = ""; //$NON-NLS-1$ + String parentName; int depth = -1; public SAXSearchElement() { @@ -64,6 +65,12 @@ { this.depth = depth; } +public String getParentName() { + return parentName; +} +public void setParentName(String parentName) { + this.parentName = parentName; +}
diff --git a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/XMLSearchPatternMatcher.java b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/XMLSearchPatternMatcher.java index e775bcd..0b9c3d3 100644 --- a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/XMLSearchPatternMatcher.java +++ b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/matching/XMLSearchPatternMatcher.java
@@ -76,6 +76,7 @@ pattern.setElementName(saxElement.getElementName()); pattern.setElementNamespace(saxElement.getElementNamespace()); pattern.setDepth(saxElement.getDepth()); + pattern.setParentName(saxElement.getParentName()); String actualValue = saxElement.getAttributes().getValue(pattern.getAttributeName()); if(actualValue != null){ int n = actualValue.indexOf(":"); //$NON-NLS-1$ @@ -169,9 +170,9 @@ XMLSearchPattern decodedPattern = (XMLSearchPattern)pattern; if(searchPattern.getElementName().equals(decodedPattern.getElementName()) && searchPattern.getElementNamespace().equals(decodedPattern.getElementNamespace())){ - if(searchPattern.getDepth() > 0 && - decodedPattern.getDepth() > 0 && - searchPattern.getDepth() != decodedPattern.getDepth()) + if(searchPattern.getParentName() != null && + decodedPattern.getParentName() != null && + !searchPattern.getParentName().equals(decodedPattern.getParentName())) { return false; }
diff --git a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/quickscan/XMLQuickScanContentHandler.java b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/quickscan/XMLQuickScanContentHandler.java index ff05cc4..65d87cd 100644 --- a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/quickscan/XMLQuickScanContentHandler.java +++ b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/quickscan/XMLQuickScanContentHandler.java
@@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Stack; import org.eclipse.wst.common.core.search.document.ComponentDeclarationEntry; import org.eclipse.wst.common.core.search.document.ComponentReferenceEntry; @@ -43,9 +44,8 @@ private SAXSearchElement searchElement = new SAXSearchElement(); private boolean hasMatch = false; - private StringBuffer currentPath = new StringBuffer(); + private Stack currentPath = new Stack(); private PatternMatcher matcher; - private int depth = 0; public static final String XMLSCHEMA_NAMESPACE = "http://www.w3.org/2001/XMLSchema"; //$NON-NLS-1$ public static final String WSDL_NAMESPACE = "http://schemas.xmlsoap.org/wsdl/"; //$NON-NLS-1$ @@ -70,10 +70,7 @@ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException - { - depth++; - currentPath.append("/" + localName); //$NON-NLS-1$ - + { // Search for targetNamespace if we haven't encountered it yet. if (targetNamespace.equals("")) //$NON-NLS-1$ { @@ -124,7 +121,11 @@ searchElement.setAttributes(attributes); searchElement.setNamespaceMap(namespaceMap); searchElement.setTargetNamespace(targetNamespace); - searchElement.setDepth(depth); + if (currentPath.size() > 0) + { + String parentName = (String)currentPath.peek(); + searchElement.setParentName(parentName); + } if(matcher != null){ @@ -150,7 +151,7 @@ } } } - + currentPath.push(localName); //$NON-NLS-1$ } private String getLocationAttributeName(String uri) @@ -177,9 +178,7 @@ public void endElement(String uri, String localName, String qName) throws SAXException { - int slashIndex = currentPath.lastIndexOf("/"); //$NON-NLS-1$ - currentPath.delete(slashIndex, currentPath.length()); - depth--; + currentPath.pop(); } /**
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-search/org/eclipse/wst/xsd/ui/internal/search/XSDSearchContributor.java b/bundles/org.eclipse.wst.xsd.ui/src-search/org/eclipse/wst/xsd/ui/internal/search/XSDSearchContributor.java index 95dcb48..f589b57 100644 --- a/bundles/org.eclipse.wst.xsd.ui/src-search/org/eclipse/wst/xsd/ui/internal/search/XSDSearchContributor.java +++ b/bundles/org.eclipse.wst.xsd.ui/src-search/org/eclipse/wst/xsd/ui/internal/search/XSDSearchContributor.java
@@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; + import org.eclipse.wst.common.core.search.pattern.SearchPattern; import org.eclipse.wst.xml.core.internal.search.ComponentSearchContributor; import org.eclipse.wst.xml.core.internal.search.XMLSearchPattern; @@ -64,7 +65,7 @@ declarations = new HashMap(); String ns = IXSDSearchConstants.XMLSCHEMA_NAMESPACE; - SearchPattern pattern = new XMLSearchPattern( ns, XSDConstants.ELEMENT_ELEMENT_TAG, XSDConstants.NAME_ATTRIBUTE, 2); + SearchPattern pattern = new XMLSearchPattern( ns, XSDConstants.SCHEMA_ELEMENT_TAG, XSDConstants.ELEMENT_ELEMENT_TAG, XSDConstants.NAME_ATTRIBUTE); declarations.put(IXSDSearchConstants.ELEMENT_META_NAME, pattern); pattern = new XMLSearchPattern(ns, XSDConstants.COMPLEXTYPE_ELEMENT_TAG, XSDConstants.NAME_ATTRIBUTE);