[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);