Bug 426392 comment 7: Problems in OpenFromClipboardAction#getJavaElementMatches(..)

fixed failing tests
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/OpenFromClipboardTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/OpenFromClipboardTests.java
index da293bb..ea8c2df 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/OpenFromClipboardTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/OpenFromClipboardTests.java
@@ -13,34 +13,27 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.junit.Assert;
-
-import org.eclipse.jdt.debug.testplugin.JavaProjectHelper;
-
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
-
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaModelException;
-
+import org.eclipse.jdt.debug.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.internal.debug.ui.actions.OpenFromClipboardAction;
-
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.swt.widgets.Display;
+import org.junit.Assert;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
 
 
 /**
@@ -590,4 +583,12 @@
 		String s = "()";
 		assertEquals(INVALID, getMatachingPattern(s));
 	}
+
+	public void testInvalidPattern_3() throws Exception {
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=426392#c6
+		String s = "java.lang.IllegalArgumentException\n" + 
+				"	at org.eclipse.core.runtime.Assert.isLegal(Assert.java:63)\n" + 
+				"	at something.completely.Different(Different.java:47)";
+		assertEquals(INVALID, getMatachingPattern(s));
+	}
 }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
index 9aa4f03..dba454b 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
@@ -125,10 +125,21 @@
 
 	/**
 	 * Pattern to match a line from a stack trace e.g.
+	 * <code>(Assert.java:41)</code>
+	 */
+	private static final String STACK_TRACE_PARENTHESIZED_PATTERN = "\\(" + WS + JAVA_FILE_LINE_PATTERN + WS + "\\)"; //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * Pattern to match a line from a stack trace e.g.
 	 * <code> at org.eclipse.core.runtime.Assert.isLegal(Assert.java:41)</code>
 	 */
-	private static final String STACK_TRACE_LINE_PATTERN = "[^()]*?(" + STRICT_QUALIFIED_NAME_PATTERN + ")" + WS + "\\(" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			+ WS + JAVA_FILE_LINE_PATTERN + WS + "\\)"; //$NON-NLS-1$
+	private static final String STACK_TRACE_LINE_PATTERN = "[^()]*?" + STACK_TRACE_PARENTHESIZED_PATTERN; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a line from a stack trace e.g.
+	 * <code> at org.eclipse.core.runtime.Assert.isLegal(Assert.java:41)</code>
+	 */
+	private static final String STACK_TRACE_QUALIFIED_LINE_PATTERN = "[^()]*?(" + STRICT_QUALIFIED_NAME_PATTERN + ")" + WS + STACK_TRACE_PARENTHESIZED_PATTERN; //$NON-NLS-1$ //$NON-NLS-2$
 
 	/**
 	 * Pattern to match a method e.g.
@@ -322,7 +333,7 @@
 			String lineNumber = typeLine.substring(index + 1, typeLine.length()).trim();
 			int line = (Integer.valueOf(lineNumber)).intValue();
 
-			Pattern pattern = Pattern.compile(STACK_TRACE_LINE_PATTERN);
+			Pattern pattern = Pattern.compile(STACK_TRACE_QUALIFIED_LINE_PATTERN);
 			Matcher matcher = pattern.matcher(s);
 			if (matcher.find()) {
 				String qualifiedName = matcher.group(1);