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 a2a3361..d6d1a1b 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2010, 2018 IBM Corporation and others.
+ *  Copyright (c) 2010, 2022 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -166,9 +166,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testClassFileLine_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -178,9 +175,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testClassFileLine_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -190,9 +184,6 @@
 
 		setupTypeTest("OpenFromClipboard$Tests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testClassFileLine_3 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -205,9 +196,6 @@
 		setupTypeTest(typeName);
 
 		List<?> matches= getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testDBCS test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -220,9 +208,6 @@
 		setupTypeTest(typeName);
 
 		List<?> matches= getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testUmlaut test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -232,9 +217,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testClassFile_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -244,9 +226,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testTypeLine_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -256,9 +235,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testTypeLine_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -269,9 +245,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -281,9 +254,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -293,9 +263,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_3 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -305,9 +272,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_4 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -317,9 +281,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_5 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -329,9 +290,6 @@
 
 		setupTypeTest("OpenFromClipboard$Tests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_6 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -342,9 +300,6 @@
 
 		setupTypeTest("OpenFromClipboardTests");
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackTraceLine_7 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -370,9 +325,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -382,9 +334,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -394,9 +343,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_3 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -406,9 +352,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_4 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -418,9 +361,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_5 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -430,9 +370,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_6 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -442,9 +379,6 @@
 
 		setupMethodTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_7 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -489,9 +423,6 @@
 
 		setupMethodWithDollarSignTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_10 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -501,9 +432,6 @@
 
 		setupMethodWithDollarSignTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMethod_11 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -525,9 +453,6 @@
 
 		setupMemberTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMember_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -537,9 +462,6 @@
 
 		setupMemberTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMember_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -549,9 +471,6 @@
 
 		setupMemberTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testMember_3 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -574,9 +493,6 @@
 
 		setupMemberTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testQualifiedName_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -586,9 +502,6 @@
 
 		setupMemberTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testQualifiedName_3 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -617,9 +530,6 @@
 
 		setupQualifiedNameWithDollarSignTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testQualifiedName_4 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -629,9 +539,6 @@
 
 		setupQualifiedNameWithDollarSignTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testQualifiedName_5 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -641,9 +548,6 @@
 
 		setupQualifiedNameWithDollarSignTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testQualifiedName_6 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -665,9 +569,6 @@
 
 		setupStackElementTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackElement_1 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
@@ -677,9 +578,6 @@
 
 		setupStackElementTest();
 		List<?> matches = getJavaElementMatches(s);
-		if (matches.size() != 1) {
-			throw new TestAgainException("testStackElement_2 test again");
-		}
 		assertEquals(1, matches.size());
 	}
 
