include parent elements in exception message
diff --git a/bundles/org.eclipse.core.expressions/src/org/eclipse/core/expressions/ExpressionConverter.java b/bundles/org.eclipse.core.expressions/src/org/eclipse/core/expressions/ExpressionConverter.java
index 65451fc..a0abdb3 100644
--- a/bundles/org.eclipse.core.expressions/src/org/eclipse/core/expressions/ExpressionConverter.java
+++ b/bundles/org.eclipse.core.expressions/src/org/eclipse/core/expressions/ExpressionConverter.java
@@ -16,6 +16,7 @@
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -128,13 +129,37 @@
IStatus.ERROR,
Messages.format(
ExpressionMessages.Expression_unknown_element,
- children[i].getName()),
+ getDebugPath(children[i])),
null));
result.add(child);
}
}
}
+ private String getDebugPath(IConfigurationElement configurationElement) {
+ StringBuffer buf= new StringBuffer();
+ buf.append(configurationElement.getName());
+ Object parent= configurationElement.getParent();
+ while (parent != null) {
+ if (parent instanceof IConfigurationElement) {
+ buf.append(" > "); //$NON-NLS-1$
+ IConfigurationElement parent2= (IConfigurationElement) parent;
+ buf.append(parent2.getName());
+ parent= parent2.getParent();
+ } else if (parent instanceof IExtension) {
+ IExtension parent2= (IExtension) parent;
+ buf.append(" : "); //$NON-NLS-1$
+ buf.append(parent2.getExtensionPointUniqueIdentifier());
+ buf.append(" @ "); //$NON-NLS-1$
+ buf.append(parent2.getContributor().getName());
+ parent= null;
+ } else {
+ parent= null;
+ }
+ }
+ return buf.toString();
+ }
+
/* package */ void processChildren(Element element, CompositeExpression result) throws CoreException {
Node child = element.getFirstChild();
while (child != null) {