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) {