New Upstream Snapshot - eclipse-jdt-debug

Ready changes

Summary

Merged new upstream version: 20110909+git20230120.1.1860795+ds (was: 4.26).

Resulting package

Built on 2023-01-22T02:10 (took 7m55s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots libeclipse-jdt-debug-javaapt install -t fresh-snapshots libeclipse-jdt-debug-ui-javaapt install -t fresh-snapshots libeclipse-jdt-launching-java

Diff

diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml
deleted file mode 100644
index f817d6f..0000000
--- a/.github/workflows/rebase.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Automatic Rebase
-on:
-  issue_comment:
-    types: [created]
-jobs:
-  rebase:
-    name: Rebase
-    if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') 
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout the latest code
-        uses: actions/checkout@v3
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
-      - name: Automatic Rebase
-        uses: cirrus-actions/rebase@1.7
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/verifyFreezePeriod.yml b/.github/workflows/verifyFreezePeriod.yml
deleted file mode 100644
index fed6cc5..0000000
--- a/.github/workflows/verifyFreezePeriod.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-# This workflow calls the Code-Freeze-Period check
-
-name: Check Code Freeze Period
-
-on:
-  pull_request:
-    branches: 
-     - 'master'
-
-jobs:
-  check-freeze-period:
-    uses: eclipse-platform/eclipse.platform.releng.aggregator/.github/workflows/verifyFreezePeriod.yml@master
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 6e021b7..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-/*/bin/
-/.project
-*~
-*.rej
-*.bak
-javacore.*
-heapdump.*
-core.*
-Snap.*
-
-# maven
-/*/target/
-/target/
diff --git a/Jenkinsfile b/Jenkinsfile
index a9b7040..c7c0222 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -19,7 +19,7 @@ pipeline {
 					sh """
 					mvn clean verify --batch-mode --fail-at-end -Dmaven.repo.local=$WORKSPACE/.m2/repository \
 						-Pbuild-individual-bundles -Ptest-on-javase-19 -Pbree-libs -Papi-check\
-						-Dcompare-version-with-baselines.skip=true \
+						-Dcompare-version-with-baselines.skip=false \
 						-Dproject.build.sourceEncoding=UTF-8 \
 						-DtrimStackTrace=false
 					"""
@@ -28,7 +28,6 @@ pipeline {
 			post {
 				always {
 					archiveArtifacts artifacts: '*.log,*/target/work/data/.metadata/*.log,*/tests/target/work/data/.metadata/*.log,apiAnalyzer-workspace/.metadata/*.log', allowEmptyArchive: true
-					recordIssues aggregatingResults: true, enabledForFailure: true, qualityGates: [[threshold: 1, type: 'DELTA', unstable: false]], tools: [acuCobol()]
 					publishIssues issues:[scanForIssues(tool: java()), scanForIssues(tool: mavenConsole())]
 					junit '**/target/surefire-reports/*.xml'
 				}
diff --git a/debian/changelog b/debian/changelog
index be977ee..49af4e1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+eclipse-jdt-debug (20110909+git20230120.1.1860795+ds-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 22 Jan 2023 02:05:57 -0000
+
 eclipse-jdt-debug (4.26-1) unstable; urgency=medium
 
   * New upstream release
diff --git a/debian/patches/01-default-source-directory.patch b/debian/patches/01-default-source-directory.patch
index dc1987e..f339956 100644
--- a/debian/patches/01-default-source-directory.patch
+++ b/debian/patches/01-default-source-directory.patch
@@ -1,9 +1,11 @@
 Description: Tweaks build.properties to work with eclipse-debian-helper
 Author: Emmanuel Bourg <ebourg@apache.org>
 Forwarded: not-needed
---- a/org.eclipse.jdt.debug/build.properties
-+++ b/org.eclipse.jdt.debug/build.properties
-@@ -18,6 +18,7 @@
+Index: eclipse-jdt-debug.git/org.eclipse.jdt.debug/build.properties
+===================================================================
+--- eclipse-jdt-debug.git.orig/org.eclipse.jdt.debug/build.properties
++++ eclipse-jdt-debug.git/org.eclipse.jdt.debug/build.properties
+@@ -18,6 +18,7 @@ bin.includes = plugin.xml,\
                 META-INF/,\
                 .options
  
diff --git a/org.eclipse.jdt.debug.jdi.tests/pom.xml b/org.eclipse.jdt.debug.jdi.tests/pom.xml
index fc2da72..e7a3617 100644
--- a/org.eclipse.jdt.debug.jdi.tests/pom.xml
+++ b/org.eclipse.jdt.debug.jdi.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug.jdi.tests</artifactId>
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java
index ac8b0bf..4b10a75 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java
@@ -72,6 +72,7 @@ import junit.framework.TestCase;
  *   -launcher SunVMLauncher -address c:\jdk1.2.2\ -cp d:\target
  *   -launcher J9VMLauncher -address d:\ive\ -cp d:\target
  */
+@SuppressWarnings("restriction")
 public abstract class AbstractJDITest extends TestCase {
 	static int TIMEOUT = 10000; //ms
 	static protected int fBackEndPort = 9900;
@@ -159,6 +160,7 @@ public abstract class AbstractJDITest extends TestCase {
 	 * @return <code>true</code> if a 1.6 or higher VM
 	 * @since 3.8
 	 */
+	@SuppressWarnings("restriction")
 	protected boolean is16OrGreater() {
 		return ((VirtualMachineImpl) fVM).isJdwpVersionGreaterOrEqual(1, 6);
 	}
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MethodReturnValuesTests.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MethodReturnValuesTests.java
index 9d871b1..8d6a69e 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MethodReturnValuesTests.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MethodReturnValuesTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2012 IBM Corporation and others.
+ * Copyright (c) 2004, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -30,6 +30,7 @@ import com.sun.jdi.request.MethodExitRequest;
  *
  * @since 3.3
  */
+@SuppressWarnings("restriction")
 public class MethodReturnValuesTests extends AbstractJDITest {
 
 	MethodExitRequest req = null;
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/VirtualThreadTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/VirtualThreadTest.java
index 255f2b4..7f41373 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/VirtualThreadTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/VirtualThreadTest.java
@@ -36,6 +36,7 @@ import com.sun.jdi.event.ThreadStartEvent;
 import com.sun.jdi.request.ThreadDeathRequest;
 import com.sun.jdi.request.ThreadStartRequest;
 
+@SuppressWarnings("restriction")
 public class VirtualThreadTest extends AbstractJDITest {
 	private static final String defaultJavaCompilerName = "com.sun.tools.javac.api.JavacTool";
 	private static JavaCompiler compiler;
diff --git a/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
index c62de13..738afd5 100644
--- a/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug.tests; singleton:=true
-Bundle-Version: 3.11.1850.qualifier
+Bundle-Version: 3.11.1900.qualifier
 Bundle-ClassPath: javadebugtests.jar
 Bundle-Activator: org.eclipse.jdt.debug.testplugin.JavaTestPlugin
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.jdt.debug.tests/pom.xml b/org.eclipse.jdt.debug.tests/pom.xml
index d5cb50f..d5e88bc 100644
--- a/org.eclipse.jdt.debug.tests/pom.xml
+++ b/org.eclipse.jdt.debug.tests/pom.xml
@@ -14,11 +14,11 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug.tests</artifactId>
-  <version>3.11.1850-SNAPSHOT</version>
+  <version>3.11.1900-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
     <code.ignoredWarnings>${tests.ignoredWarnings}</code.ignoredWarnings>
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
index 999508a..2e30962 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
@@ -153,6 +153,7 @@ import org.eclipse.jdt.debug.tests.variables.TestIntegerAccessUnboxing15;
 import org.eclipse.jdt.debug.tests.variables.TestLogicalStructures;
 import org.eclipse.jdt.debug.tests.variables.TestLogicalStructuresJava9;
 
+import junit.framework.JUnit4TestAdapter;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
@@ -332,7 +333,7 @@ public class AutomatedSuite extends DebugSuite {
 		addTest(new TestSuite(ModelPresentationTests.class));
 
 	// Open from Clipboard action tests - Need to use #suite() because the test has a custom setup
-		addTest(OpenFromClipboardTests.suite());
+		addTest(new JUnit4TestAdapter(OpenFromClipboardTests.class));
 
 	//add the complete eval suite
 		addTest(new TestSuite(GeneralEvalTests.class));
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 3f3cec2..04e6295 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,6 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.ui;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -38,18 +40,19 @@ 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.After;
+import org.junit.AfterClass;
 import org.junit.Assert;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
 
 /**
  * Tests the Open from Clipboard action.
  */
-public class OpenFromClipboardTests extends TestCase {
+public class OpenFromClipboardTests {
 
 	/*
 	 * Copy of constants from OpenFromClipboardAction
@@ -78,72 +81,56 @@ public class OpenFromClipboardTests extends TestCase {
 
 	private Accessor fAccessor = new Accessor(OpenFromClipboardAction.class);
 
-	private static class MyTestSetup extends TestSetup {
-
-		public static IJavaProject fJProject;
-
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
-		@Override
-		protected void setUp() throws Exception {
-			super.setUp();
-			JavaTestPlugin.enableAutobuild(false);
-			fJProject = createProject("OpenFromClipboardTests");
-			waitForEncodingRelatedJobs();
-		}
+	public static IJavaProject fJProject;
 
-		@Override
-		protected void tearDown() throws Exception {
-			fJProject.getProject().delete(true, true, null);
-			JavaTestPlugin.enableAutobuild(true);
-			super.tearDown();
-		}
+	@Rule
+	public TestName name = new TestName();
 
-		protected void waitForEncodingRelatedJobs() {
-			TestUtil.waitForJobs("OpenFromClipboardTests", 10, 5_000, ValidateProjectEncoding.class);
-			TestUtil.waitForJobs("OpenFromClipboardTests", 10, 5_000, CharsetDeltaJob.FAMILY_CHARSET_DELTA);
-		}
+	@BeforeClass
+	public static void setUpClass() throws CoreException {
+		JavaTestPlugin.enableAutobuild(false);
+		fJProject = createProject("OpenFromClipboardTests");
+		waitForEncodingRelatedJobs();
+	}
 
-		private static IJavaProject createProject(String name) throws CoreException {
-			// delete any pre-existing project
-			IProject pro = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
-			if (pro.exists()) {
-				pro.delete(true, true, null);
-			}
+	@AfterClass
+	public static void tearDownClass() throws CoreException {
+		fJProject.getProject().delete(true, true, null);
+		JavaTestPlugin.enableAutobuild(true);
+	}
 
-			// create project
-			IJavaProject javaProject = JavaProjectHelper.createJavaProject(name, "bin");
+	private static void waitForEncodingRelatedJobs() {
+		TestUtil.waitForJobs("OpenFromClipboardTests", 10, 5_000, ValidateProjectEncoding.class);
+		TestUtil.waitForJobs("OpenFromClipboardTests", 10, 5_000, CharsetDeltaJob.FAMILY_CHARSET_DELTA);
+	}
 
-			// add rt.jar
-			IVMInstall vm = JavaRuntime.getDefaultVMInstall();
-			Assert.assertNotNull("No default JRE", vm);
-			JavaProjectHelper.addContainerEntry(javaProject, new Path(JavaRuntime.JRE_CONTAINER));
-			return javaProject;
+	private static IJavaProject createProject(String name) throws CoreException {
+		// delete any pre-existing project
+		IProject pro = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
+		if (pro.exists()) {
+			pro.delete(true, true, null);
 		}
-	}
 
-	public static Test suite() {
-		return new MyTestSetup(new TestSuite(OpenFromClipboardTests.class));
-	}
+		// create project
+		IJavaProject javaProject = JavaProjectHelper.createJavaProject(name, "bin");
 
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
+		// add rt.jar
+		IVMInstall vm = JavaRuntime.getDefaultVMInstall();
+		Assert.assertNotNull("No default JRE", vm);
+		JavaProjectHelper.addContainerEntry(javaProject, new Path(JavaRuntime.JRE_CONTAINER));
+		return javaProject;
 	}
 
-	@Override
-	protected void setUp() throws Exception {
-		TestUtil.log(IStatus.INFO, getName(), "setUp");
-		super.setUp();
-		fSourceFolder = JavaProjectHelper.addSourceContainer(MyTestSetup.fJProject, "src");
+	@Before
+	public void setUp() throws Exception {
+		TestUtil.log(IStatus.INFO, name.getMethodName(), "setUp");
+		fSourceFolder = JavaProjectHelper.addSourceContainer(fJProject, "src");
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
-		TestUtil.log(IStatus.INFO, getName(), "tearDown");
-		JavaProjectHelper.removeSourceContainer(MyTestSetup.fJProject, "src");
-		super.tearDown();
+	@After
+	public void tearDown() throws Exception {
+		TestUtil.log(IStatus.INFO, name.getMethodName(), "tearDown");
+		JavaProjectHelper.removeSourceContainer(fJProject, "src");
 	}
 
 	private int getMatachingPattern(String s) {
@@ -177,6 +164,7 @@ public class OpenFromClipboardTests extends TestCase {
 
 	}
 
+	@Test
 	public void testClassFileLine_1() throws Exception {
 		String s = "OpenFromClipboardTests.java:100";
 		assertEquals(JAVA_FILE_LINE, getMatachingPattern(s));
@@ -186,6 +174,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testClassFileLine_2() throws Exception {
 		String s = "OpenFromClipboardTests.java : 100";
 		assertEquals(JAVA_FILE_LINE, getMatachingPattern(s));
@@ -195,6 +184,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testClassFileLine_3() throws Exception {
 		String s = "OpenFromClipboard$Tests.java:100";
 		assertEquals(JAVA_FILE_LINE, getMatachingPattern(s));
@@ -204,6 +194,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testDBCS() throws Exception {
 		String typeName= "\u65b0\u898f\u30af\u30e9\u30b9";
 		String s= typeName + ".java:100";
@@ -216,6 +207,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testUmlaut() throws Exception {
 		String typeName= "\u0042\u006c\u00f6\u0064";
 		String s= typeName + ".java:100";
@@ -228,6 +220,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testClassFile_1() throws Exception {
 		String s = "OpenFromClipboardTests.java";
 		assertEquals(JAVA_FILE, getMatachingPattern(s));
@@ -237,6 +230,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testTypeLine_1() throws Exception {
 		String s = "OpenFromClipboardTests:100";
 		assertEquals(TYPE_LINE, getMatachingPattern(s));
@@ -246,6 +240,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testTypeLine_2() throws Exception {
 		String s = "OpenFromClipboardTests : 100";
 		assertEquals(TYPE_LINE, getMatachingPattern(s));
@@ -256,6 +251,7 @@ public class OpenFromClipboardTests extends TestCase {
 	}
 
 	// stack trace element tests
+	@Test
 	public void testStackTraceLine_1() throws Exception {
 		String s = "(OpenFromClipboardTests.java:121)";
 		assertEquals(STACK_TRACE_LINE, getMatachingPattern(s));
@@ -265,6 +261,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackTraceLine_2() throws Exception {
 		String s = "( OpenFromClipboardTests.java : 121 )";
 		assertEquals(STACK_TRACE_LINE, getMatachingPattern(s));
@@ -274,6 +271,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackTraceLine_3() throws Exception {
 		String s = "at p.OpenFromClipboardTests.getMatchingPattern(OpenFromClipboardTests.java:121)";
 		assertEquals(STACK_TRACE_LINE, getMatachingPattern(s));
@@ -283,6 +281,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackTraceLine_4() throws Exception {
 		String s = "OpenFromClipboardTests.getMatchingPattern(OpenFromClipboardTests.java:121)";
 		assertEquals(STACK_TRACE_LINE, getMatachingPattern(s));
@@ -292,6 +291,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackTraceLine_5() throws Exception {
 		String s = "OpenFromClipboardTests.getMatchingPattern ( OpenFromClipboardTests.java : 121 )";
 		assertEquals(STACK_TRACE_LINE, getMatachingPattern(s));
@@ -301,6 +301,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackTraceLine_6() throws Exception {
 		String s = "at p.OpenFromClipboard$Tests.getMatching$Pattern(OpenFromClipboardTests.java:121)";
 		setupTypeTest("OpenFromClipboardTests");
@@ -310,6 +311,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackTraceLine_7() throws Exception {
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=349933#c2
 		String s = "getMatchingPattern ( OpenFromClipboardTests.java : 121 )";
@@ -336,6 +338,7 @@ public class OpenFromClipboardTests extends TestCase {
 		pack.createCompilationUnit("OpenFromClipboardTests.java", buf.toString(), false, null);
 	}
 
+	@Test
 	public void testMethod_1() throws Exception {
 		String s = "invokeOpenFromClipboardCommand()";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -345,6 +348,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_2() throws Exception {
 		String s = "invokeOpenFromClipboardCommand(String, int[], int)";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -354,6 +358,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_3() throws Exception {
 		String s = "OpenFromClipboardTests.invokeOpenFromClipboardCommand()";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -363,6 +368,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_4() throws Exception {
 		String s = "OpenFromClipboardTests.invokeOpenFromClipboardCommand(String, int[], int)";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -372,6 +378,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_5() throws Exception {
 		String s = "p.OpenFromClipboardTests.invokeOpenFromClipboardCommand()";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -381,6 +388,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_6() throws Exception {
 		String s = "p.OpenFromClipboardTests.invokeOpenFromClipboardCommand(String)";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -390,6 +398,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_7() throws Exception {
 		String s = "p.OpenFromClipboardTests.invokeOpenFromClipboardCommand(String, int[], int)";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -399,6 +408,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_8() throws Exception {
 		String s = "java.util.List.containsAll(Collection<?>)";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -425,6 +435,7 @@ public class OpenFromClipboardTests extends TestCase {
 		pack.createCompilationUnit("OpenFromClipboard$Tests.java", buf.toString(), false, null);
 	}
 
+	@Test
 	public void testMethod_9() throws Exception {
 		String s = "OpenFromClipboard$Tests.invokeOpenFromClipboardCommand()";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -434,6 +445,7 @@ public class OpenFromClipboardTests extends TestCase {
 		// performTest(s,1);
 	}
 
+	@Test
 	public void testMethod_10() throws Exception {
 		String s = "OpenFromClipboard$Tests.invokeOpenFromClipboardCommand(String)";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -443,6 +455,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMethod_11() throws Exception {
 		String s = "$.$$()";
 		assertEquals(METHOD, getMatachingPattern(s));
@@ -464,6 +477,7 @@ public class OpenFromClipboardTests extends TestCase {
 		pack.createCompilationUnit("OpenFromClipboardTests.java", buf.toString(), false, null);
 	}
 
+	@Test
 	public void testMember_1() throws Exception {
 		String s = "OpenFromClipboardTests#invokeOpenFromClipboardCommand";
 		assertEquals(MEMBER, getMatachingPattern(s));
@@ -473,6 +487,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMember_2() throws Exception {
 		String s = "p.OpenFromClipboardTests#invokeOpenFromClipboardCommand";
 		assertEquals(MEMBER, getMatachingPattern(s));
@@ -482,6 +497,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testMember_3() throws Exception {
 		String s = "p.OpenFromClipboardTests#invokeOpenFromClipboardCommand(String)";
 		assertEquals(METHOD_JAVADOC_REFERENCE, getMatachingPattern(s));
@@ -492,6 +508,7 @@ public class OpenFromClipboardTests extends TestCase {
 	}
 
 	// qualified name tests
+	@Test
 	public void testQualifiedName_1() throws Exception {
 		String s = "invokeOpenFromClipboardCommand";
 		assertEquals(QUALIFIED_NAME, getMatachingPattern(s));
@@ -504,6 +521,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testQualifiedName_2() throws Exception {
 		String s = "OpenFromClipboardTests.invokeOpenFromClipboardCommand";
 		assertEquals(QUALIFIED_NAME, getMatachingPattern(s));
@@ -513,6 +531,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testQualifiedName_3() throws Exception {
 		String s = "p.OpenFromClipboardTests.invokeOpenFromClipboardCommand";
 		assertEquals(QUALIFIED_NAME, getMatachingPattern(s));
@@ -541,6 +560,7 @@ public class OpenFromClipboardTests extends TestCase {
 		pack.createCompilationUnit("OpenFromClipboard$Tests.java", buf.toString(), false, null);
 	}
 
+	@Test
 	public void testQualifiedName_4() throws Exception {
 		String s = "$";
 		assertEquals(QUALIFIED_NAME, getMatachingPattern(s));
@@ -550,6 +570,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testQualifiedName_5() throws Exception {
 		String s = "$$";
 		assertEquals(QUALIFIED_NAME, getMatachingPattern(s));
@@ -559,6 +580,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testQualifiedName_6() throws Exception {
 		String s = "OpenFromClipboard$Tests";
 		assertEquals(QUALIFIED_NAME, getMatachingPattern(s));
@@ -580,6 +602,7 @@ public class OpenFromClipboardTests extends TestCase {
 		pack.createCompilationUnit("OpenFromClipboardTests.java", buf.toString(), false, null);
 	}
 
+	@Test
 	public void testStackElement_1() throws Exception {
 		String s = "p.OpenFromClipboardTests.invokeOpenFromClipboardCommand(char) line: 1456";
 		assertEquals(STACK, getMatachingPattern(s));
@@ -589,6 +612,7 @@ public class OpenFromClipboardTests extends TestCase {
 		assertEquals(1, matches.size());
 	}
 
+	@Test
 	public void testStackElement_2() throws Exception {
 		String s = "p.OpenFromClipboardTests.invokeOpenFromClipboardCommand(char): 1456";
 		assertEquals(STACK, getMatachingPattern(s));
@@ -599,16 +623,19 @@ public class OpenFromClipboardTests extends TestCase {
 	}
 
 	// invalid pattern tests
+	@Test
 	public void testInvalidPattern_1() {
 		String s = "(Collection)";
 		assertEquals(INVALID, getMatachingPattern(s));
 	}
 
+	@Test
 	public void testInvalidPattern_2() {
 		String s = "()";
 		assertEquals(INVALID, getMatachingPattern(s));
 	}
 
+	@Test
 	public void testInvalidPattern_3() throws Exception {
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=426392#c6
 		String s = "java.lang.IllegalArgumentException\n" +
diff --git a/org.eclipse.jdt.debug.ui/.settings/.api_filters b/org.eclipse.jdt.debug.ui/.settings/.api_filters
index 2a6baac..263d46d 100644
--- a/org.eclipse.jdt.debug.ui/.settings/.api_filters
+++ b/org.eclipse.jdt.debug.ui/.settings/.api_filters
@@ -8,6 +8,14 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="ui/org/eclipse/jdt/internal/debug/ui/actions/PopupInspectAction.java" type="org.eclipse.jdt.internal.debug.ui.actions.PopupInspectAction">
+        <filter id="571519004">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.internal.debug.ui.actions.PopupInspectAction.showPopup(StyledText)"/>
+                <message_argument value="InspectPopupDialog"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathEntry.java" type="org.eclipse.jdt.internal.debug.ui.classpath.ClasspathEntry">
         <filter comment="Known illegal implementation" id="574619656">
             <message_arguments>
@@ -32,4 +40,44 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="ui/org/eclipse/jdt/internal/debug/ui/launcher/RuntimeClasspathViewer.java" type="org.eclipse.jdt.internal.debug.ui.launcher.RuntimeClasspathViewer">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="TableViewer"/>
+                <message_argument value="RuntimeClasspathViewer"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetViewerConfiguration.java" type="org.eclipse.jdt.internal.debug.ui.snippeteditor.JavaSnippetViewerConfiguration">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="JavaSourceViewerConfiguration"/>
+                <message_argument value="JavaSnippetViewerConfiguration"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetEditorPropertyPage.java" type="org.eclipse.jdt.internal.debug.ui.snippeteditor.SnippetEditorPropertyPage$Proxy">
+        <filter id="574619656">
+            <message_arguments>
+                <message_argument value="ILaunchConfigurationDialog"/>
+                <message_argument value="Proxy"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenHierarchyOnSelectionAction.java" type="org.eclipse.jdt.internal.debug.ui.snippeteditor.SnippetOpenHierarchyOnSelectionAction">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="OpenTypeHierarchyAction"/>
+                <message_argument value="SnippetOpenHierarchyOnSelectionAction"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenOnSelectionAction.java" type="org.eclipse.jdt.internal.debug.ui.snippeteditor.SnippetOpenOnSelectionAction">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="OpenAction"/>
+                <message_argument value="SnippetOpenOnSelectionAction"/>
+            </message_arguments>
+        </filter>
+    </resource>
 </component>
diff --git a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
index b33dadb..82e7a99 100644
--- a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug.ui; singleton:=true
-Bundle-Version: 3.12.900.qualifier
+Bundle-Version: 3.12.1000.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.debug.ui/pom.xml b/org.eclipse.jdt.debug.ui/pom.xml
index ecafeb3..b1d33fc 100644
--- a/org.eclipse.jdt.debug.ui/pom.xml
+++ b/org.eclipse.jdt.debug.ui/pom.xml
@@ -14,11 +14,11 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug.ui</artifactId>
-  <version>3.12.900-SNAPSHOT</version>
+  <version>3.12.1000-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <code.ignoredWarnings>-warn:+resource,-deprecation,unavoidableGenericProblems</code.ignoredWarnings>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
index 88aa663..c802cdf 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -104,6 +104,7 @@ import org.osgi.service.prefs.BackingStoreException;
 /**
  * Plug-in class for the org.eclipse.jdt.debug.ui plug-in.
  */
+@SuppressWarnings("deprecation")
 public class JDIDebugUIPlugin extends AbstractUIPlugin {
 
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
index 18503d4..1f186ff 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2019 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -115,6 +115,7 @@ import com.sun.jdi.ObjectCollectedException;
  * Determines how to display java elements, including labels, images and editors.
  * @see IDebugModelPresentation
  */
+@SuppressWarnings("deprecation")
 public class JDIModelPresentation extends LabelProvider implements IDebugModelPresentationExtension, IColorProvider {
 
 	/**
@@ -675,7 +676,6 @@ public class JDIModelPresentation extends LabelProvider implements IDebugModelPr
 		return charText.toString();
 	}
 
-	@SuppressWarnings("deprecation")
 	protected String getMarkerTypeName(IJavaBreakpoint breakpoint, boolean qualified) throws CoreException {
 		String typeName= null;
 		if (breakpoint instanceof IJavaPatternBreakpoint) {
@@ -1568,7 +1568,6 @@ public class JDIModelPresentation extends LabelProvider implements IDebugModelPr
 		return buff.toString();
 	}
 
-	@SuppressWarnings("deprecation")
 	protected String getBreakpointText(IBreakpoint breakpoint) {
 	    try {
 	    	String label = null;
@@ -1736,7 +1735,7 @@ public class JDIModelPresentation extends LabelProvider implements IDebugModelPr
 		return label;
 	}
 
-	protected String getJavaPatternBreakpointText(@SuppressWarnings("deprecation") IJavaPatternBreakpoint breakpoint) throws CoreException {
+	protected String getJavaPatternBreakpointText(IJavaPatternBreakpoint breakpoint) throws CoreException {
 		IResource resource= breakpoint.getMarker().getResource();
 		IMember member= BreakpointUtils.getMember(breakpoint);
 		StringBuilder label= new StringBuilder(resource.getName());
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaBreakpointWorkbenchAdapterFactory.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaBreakpointWorkbenchAdapterFactory.java
index 901b780..3dd4ae2 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaBreakpointWorkbenchAdapterFactory.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaBreakpointWorkbenchAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -28,7 +28,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
 /**
  * Adapter factory for java breakpoints.
  */
-@SuppressWarnings("unchecked")
+@SuppressWarnings({ "unchecked", "deprecation" })
 public class JavaBreakpointWorkbenchAdapterFactory implements IAdapterFactory {
 	@Override
 	public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
index 75e5e4d..5590d96 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
@@ -618,6 +618,9 @@ public class JavaDebugOptionsManager implements IDebugEventSetListener, IPropert
 		if (skip == SuspendOnRecurrenceStrategy.RECURRENCE_UNCONFIGURED) {
 			skip = new AskRecurrenceDialog(JDIDebugUIPlugin.getShell()).getAnswer();
 		}
+		if (skip == null) {
+			return false; // user didn't understand the question and cancelled dialog
+		}
 		switch (skip) {
 			case SKIP_RECURRENCES:
 				return true;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ForceReturnAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ForceReturnAction.java
index 81ca4c9..157fe22 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ForceReturnAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ForceReturnAction.java
@@ -13,7 +13,11 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.ui.actions;
 
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.ui.InspectPopupDialog;
 import org.eclipse.jdt.core.Signature;
@@ -23,8 +27,11 @@ import org.eclipse.jdt.debug.core.IJavaValue;
 import org.eclipse.jdt.debug.eval.IEvaluationResult;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
 import org.eclipse.jdt.internal.debug.ui.display.JavaInspectExpression;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
 
 /**
  * Action for force return from a method.
@@ -92,16 +99,20 @@ public class ForceReturnAction extends EvaluateAction {
 	@Override
 	protected void run() {
 		IJavaStackFrame stackFrame= getStackFrameContext();
+		ForceReturnRunnable runnable = new ForceReturnRunnable(stackFrame);
 		if (stackFrame != null) {
+			IWorkbench workbench = PlatformUI.getWorkbench();
 			try {
-				String returnType = Signature.getReturnType(stackFrame.getSignature());
-				if (Signature.SIG_VOID.equals(returnType)) {
-					// no evaluation required for void methods
-					stackFrame.forceReturn(((IJavaDebugTarget)stackFrame.getDebugTarget()).voidValue());
-					return;
-				}
-			} catch (DebugException e) {
-				JDIDebugUIPlugin.statusDialog(e.getStatus());
+				workbench.getProgressService().busyCursorWhile(runnable);
+			} catch (InvocationTargetException e) {
+				Status status = new Status(IStatus.WARNING, JDIDebugUIPlugin.getUniqueIdentifier(), "Force return failed", e); //$NON-NLS-1$
+				JDIDebugUIPlugin.log(status);
+				return;
+			} catch (InterruptedException e) {
+				// e.g. user cancelled the operation via the modal dialog
+				return;
+			}
+			if (runnable.forceReturnDone) {
 				return;
 			}
 		}
@@ -111,7 +122,30 @@ public class ForceReturnAction extends EvaluateAction {
 	}
 
 
+	private static class ForceReturnRunnable implements IRunnableWithProgress {
 
+		private final IJavaStackFrame stackFrame;
+		private boolean forceReturnDone;
 
+		private ForceReturnRunnable(IJavaStackFrame stackFrame) {
+			this.stackFrame = stackFrame;
+		}
 
+		@Override
+		public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+			try {
+				if (stackFrame != null && stackFrame.isSuspended() && !monitor.isCanceled()) {
+					String returnType = Signature.getReturnType(stackFrame.getSignature());
+					if (Signature.SIG_VOID.equals(returnType)) {
+						// no evaluation required for void methods
+						stackFrame.forceReturn(((IJavaDebugTarget) stackFrame.getDebugTarget()).voidValue());
+						forceReturnDone = true;
+					}
+				}
+			} catch (DebugException e) {
+				JDIDebugUIPlugin.statusDialog(e.getStatus());
+				forceReturnDone = true;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java
index 2537a52..c3e4ade 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenTypeAction.java
@@ -125,7 +125,7 @@ public abstract class OpenTypeAction extends ObjectActionDelegate {
 		return source;
 	}
 
-	protected void openInEditor(Object element, IType sourceElement) throws CoreException {
+	protected void openInEditor(@SuppressWarnings("unused") Object element, IType sourceElement) throws CoreException {
 		if (isHierarchy()) {
 			OpenTypeHierarchyUtil.open(sourceElement, getWorkbenchWindow());
 		} else {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/StepIntoSelectionUtils.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/StepIntoSelectionUtils.java
index c6abc56..ea9d82c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/StepIntoSelectionUtils.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/StepIntoSelectionUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2015 IBM Corporation and others.
+ * Copyright (c) 2007, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -113,6 +113,7 @@ public class StepIntoSelectionUtils {
 	 * @return the first method found at or after <code>offset</code> on the same line
 	 * @throws JavaModelException
 	 */
+	@SuppressWarnings("deprecation")
 	public static IMethod getFirstMethodOnLine(int offset, IEditorPart activeEditor, IJavaElement element) throws JavaModelException {
 		if (! (activeEditor instanceof ITextEditor) || ! (element instanceof ICodeAssist)) {
 			return null;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
index 8098a9f..9304bad 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2021 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -1759,6 +1759,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
 	 * @return the type root or <code>null</code> if one cannot be derived
 	 * @since 3.8
 	 */
+	@SuppressWarnings("deprecation")
 	private static String getCodeTemplate(ITextSelection textSelection, JavaEditor part) {
 		ITextViewer viewer = part.getViewer();
 		if (viewer == null) {
@@ -1770,6 +1771,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
 		return templateBuffer.get();
 	}
 
+	@SuppressWarnings("deprecation")
 	private static void doGetCodeTemplate(ITextSelection textSelection, JavaEditor part, ITextViewer viewer, TemplateContextType contextType, AtomicReference<String> templateBuffer) {
 		ITextEditor editor = getTextEditor(part);
 		if (editor == null) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/RuntimeClasspathViewer.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/RuntimeClasspathViewer.java
index 19df4ce..55c8a38 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/RuntimeClasspathViewer.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/RuntimeClasspathViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2021 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -82,6 +82,7 @@ public class RuntimeClasspathViewer implements IClasspathViewer {
 
 		private boolean isFiltering;
 
+		@SuppressWarnings("deprecation")
 		private RuntimeClasspathFilteredTree(Composite parent, PatternFilter filter) {
 			super(parent, 0, filter, true);
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/contentassist/JavaDebugContentAssistProcessor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/contentassist/JavaDebugContentAssistProcessor.java
index e52fcd3..7f978c7 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/contentassist/JavaDebugContentAssistProcessor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/contentassist/JavaDebugContentAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2019 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -57,6 +57,7 @@ public class JavaDebugContentAssistProcessor implements IContentAssistProcessor
 	private ContentAssistant fAssistant;
 
 
+	@SuppressWarnings("deprecation")
 	public JavaDebugContentAssistProcessor(IJavaDebugContentAssistContext context) {
 		fContext = context;
 		TemplateContextType contextType= JavaPlugin.getDefault().getTemplateContextRegistry().getContextType(JavaContextType.ID_ALL);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java
index aa81d95..8dc6ef9 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -45,6 +45,7 @@ import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.osgi.util.NLS;
 
+@SuppressWarnings("deprecation")
 public class AppletLaunchConfigurationUtils {
 
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletSelectionDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletSelectionDialog.java
index 979afb0..174e972 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletSelectionDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -40,6 +40,7 @@ import org.eclipse.ui.dialogs.TwoPaneElementSelector;
 /**
  * A dialog to select a type that extends <code>java.applet.Applet</code>.
  */
+@SuppressWarnings("deprecation")
 public class AppletSelectionDialog extends TwoPaneElementSelector {
 
 	private IRunnableContext fRunnableContext;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/MainMethodSearchEngine.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/MainMethodSearchEngine.java
index 956140b..f8e82d2 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/MainMethodSearchEngine.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/MainMethodSearchEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -40,6 +40,7 @@ import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
 import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 
+@SuppressWarnings("deprecation")
 public class MainMethodSearchEngine{
 
 	private class MethodCollector extends SearchRequestor {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SourceLookupBlock.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SourceLookupBlock.java
index 05e81f8..4281430 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SourceLookupBlock.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SourceLookupBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -57,6 +57,7 @@ import org.eclipse.swt.widgets.Label;
 /**
  * Control used to edit the source lookup path for a Java launch configuration.
  */
+@SuppressWarnings("deprecation")
 public class SourceLookupBlock extends AbstractJavaClasspathTab implements ILaunchConfigurationTab {
 
 	protected ILaunchConfiguration fConfig;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java
index c6fe60f..d397ca0 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2015 Ecliptical Software Inc. and others.
+ * Copyright (c) 2007, 2022 Ecliptical Software Inc. and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -56,6 +56,7 @@ import org.eclipse.ui.PartInitException;
  *
  * @since 3.4.0
  */
+@SuppressWarnings("deprecation")
 public class LaunchConfigurationQueryParticipant implements IQueryParticipant {
 
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetCompletionProcessor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetCompletionProcessor.java
index 91440e4..fdba989 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetCompletionProcessor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetCompletionProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2019 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -53,6 +53,7 @@ public class JavaSnippetCompletionProcessor implements IContentAssistProcessor {
 
 	public JavaSnippetCompletionProcessor(JavaSnippetEditor editor) {
 		fEditor= editor;
+		@SuppressWarnings("deprecation")
 		TemplateContextType contextType= JavaPlugin.getDefault().getTemplateContextRegistry().getContextType("java"); //$NON-NLS-1$
 		if (contextType != null) {
 			fTemplateEngine= new TemplateEngine(contextType);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
index 9ed9c13..1229148 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -1447,6 +1447,7 @@ public class JavaSnippetEditor extends AbstractDecoratedTextEditor implements ID
 	public <T> T getAdapter(Class<T> required) {
 		if (required == IShowInTargetList.class) {
 			return (T) new IShowInTargetList() {
+				@SuppressWarnings("deprecation")
 				@Override
 				public String[] getShowInTargetIds() {
 					return new String[] { JavaUI.ID_PACKAGES, IPageLayout.ID_RES_NAV };
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java
index 3ebf6e3..9bfd848 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -346,6 +346,7 @@ public class ScrapbookLauncher implements IDebugEventSetListener {
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	protected URL getEncodedURL(File file) throws MalformedURLException, UnsupportedEncodingException {
 		//looking at File.toURL the delimiter is always '/'
 		// NOT File.separatorChar
diff --git a/org.eclipse.jdt.debug/.options b/org.eclipse.jdt.debug/.options
index 3ef5cf6..7f3e82f 100644
--- a/org.eclipse.jdt.debug/.options
+++ b/org.eclipse.jdt.debug/.options
@@ -3,4 +3,5 @@ org.eclipse.jdt.debug/debug/jdiEvents=false
 org.eclipse.jdt.debug/debug/jdiRequestTimes=false
 org.eclipse.jdt.debug/debug/astEvaluations=false
 org.eclipse.jdt.debug/debug/astEvaluations/callingThreads=false
-
+org.eclipse.jdt.debug/debug/jdi/verbose=false
+org.eclipse.jdt.debug/debug/jdi/verbose/file=
diff --git a/org.eclipse.jdt.debug/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
index 0a710c9..5b689da 100644
--- a/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
-Bundle-Version: 3.20.0.qualifier
+Bundle-Version: 3.20.100.qualifier
 Bundle-ClassPath: jdimodel.jar
 Bundle-Activator: org.eclipse.jdt.internal.debug.core.JDIDebugPlugin
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
index bb76a66..486241e 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -80,6 +80,7 @@ import org.eclipse.jdt.internal.debug.eval.ast.instructions.InstructionSequence;
 import com.sun.jdi.InvocationException;
 import com.sun.jdi.ObjectReference;
 
+@SuppressWarnings("restriction")
 public class ASTEvaluationEngine implements IAstEvaluationEngine {
 	public static final String ANONYMOUS_VAR_PREFIX = "val$"; //$NON-NLS-1$
 	private static final int EVALUATION_DETAIL_BITMASK = DebugEvent.EVALUATION | DebugEvent.EVALUATION_IMPLICIT;
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
index 231127e..d422adf 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -2398,6 +2398,7 @@ public class ASTInstructionCompiler extends ASTVisitor {
 		return false;
 	}
 
+	@SuppressWarnings("unused")
 	private RemoteEvaluatorBuilder makeBuilder(ASTNode node) throws DebugException {
 		RemoteEvaluatorBuilder builder = new RemoteEvaluatorBuilder(fJavaProject, new ExpressionBinder() {
 			@Override
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
index 4f6bbb4..f544357 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2021 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -175,6 +175,7 @@ public class EvaluationSourceGenerator {
 	 * <code>false</code> if the snippet does not require return to be added.
 	 */
 
+	@SuppressWarnings("deprecation")
 	private boolean needsReturn(String codeSnippet){
 		if ( codeSnippet.length() == 0) {
 			return false;
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SignatureExt.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SignatureExt.java
index 8cc0c1b..2cbce4a 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SignatureExt.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SignatureExt.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -19,14 +19,16 @@ import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.util.Util;
 
+@SuppressWarnings("restriction")
 public class SignatureExt {
 
 	public static char[][] getTypeSuperClassInterfaces(char[] typeSignature)
 			throws IllegalArgumentException {
 		try {
 			int length = typeSignature.length;
-			if (length == 0)
+			if (length == 0) {
 				return CharOperation.NO_CHAR_CHAR;
+			}
 			int i = 0;
 			if (typeSignature[0] == Signature.C_GENERIC_START) {
 				i++; // leading '<'
@@ -34,8 +36,9 @@ public class SignatureExt {
 						&& typeSignature[i] != Signature.C_GENERIC_END) {
 					i = CharOperation.indexOf(Signature.C_COLON, typeSignature,
 							i);
-					if (i < 0 || i >= length)
+					if (i < 0 || i >= length) {
 						throw new IllegalArgumentException();
+					}
 					// iterate over bounds
 					nextBound: while (typeSignature[i] == ':') {
 						i++; // skip colon
@@ -46,8 +49,9 @@ public class SignatureExt {
 						i++; // position at start of next param if any
 					}
 				}
-				if (i < 0 || i >= length)
+				if (i < 0 || i >= length) {
 					throw new IllegalArgumentException();
+				}
 				i++; // trailing '>'
 			}
 			ArrayList<char[]> superList = new ArrayList<>();
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
index d53d0fb..825b1fd 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -1035,6 +1035,7 @@ public class SourceBasedSourceGenerator extends ASTVisitor {
 	 *            the {@link Type}
 	 * @return the parent {@link Type}
 	 */
+	@SuppressWarnings("deprecation")
 	private Type getParentType(Type type) {
 		if (type instanceof ArrayType) {
 			return getParentType(((ArrayType) type).getComponentType());
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/Bootstrap.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/Bootstrap.java
index 0b223ad..e196095 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/Bootstrap.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/Bootstrap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -23,9 +23,11 @@ public class Bootstrap {
 	public Bootstrap() {
 	}
 
+	@SuppressWarnings("deprecation")
 	public static synchronized com.sun.jdi.VirtualMachineManager virtualMachineManager() {
-		if (fVirtualMachineManager != null)
+		if (fVirtualMachineManager != null) {
 			return fVirtualMachineManager;
+		}
 
 		try {
 			IExtensionRegistry extensionRegistry = Platform
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java
index a01227f..596a5a6 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java
@@ -22,6 +22,7 @@ import java.util.Date;
 import java.util.Map;
 
 import org.eclipse.jdi.Bootstrap;
+import org.eclipse.jdi.TimeoutException;
 import org.eclipse.jdi.internal.jdwp.JdwpCommandPacket;
 import org.eclipse.jdi.internal.jdwp.JdwpPacket;
 import org.eclipse.jdi.internal.jdwp.JdwpReplyPacket;
@@ -68,10 +69,7 @@ public class MirrorImpl implements Mirror {
 	public MirrorImpl(String description) {
 		fDescription = description;
 		fVirtualMachineImpl = (VirtualMachineImpl) this;
-		PrintWriter writer = ((VirtualMachineManagerImpl) org.eclipse.jdi.Bootstrap
-				.virtualMachineManager()).verbosePrintWriter();
-		if (writer != null)
-			fVerboseWriter = new VerboseWriter(writer);
+		initVerboseWriter();
 	}
 
 	/**
@@ -80,10 +78,18 @@ public class MirrorImpl implements Mirror {
 	public MirrorImpl(String description, VirtualMachineImpl virtualMachineImpl) {
 		fVirtualMachineImpl = virtualMachineImpl;
 		fDescription = description;
-		PrintWriter writer = ((VirtualMachineManagerImpl) org.eclipse.jdi.Bootstrap
-				.virtualMachineManager()).verbosePrintWriter();
-		if (writer != null)
+		initVerboseWriter();
+	}
+
+	private void initVerboseWriter() {
+		if (!VirtualMachineManagerImpl.isVerboseTracingEnabled()) {
+			return;
+		}
+		VirtualMachineManagerImpl machineManagerImpl = (VirtualMachineManagerImpl) org.eclipse.jdi.Bootstrap.virtualMachineManager();
+		PrintWriter writer = machineManagerImpl.verbosePrintWriter();
+		if (writer != null) {
 			fVerboseWriter = new VerboseWriter(writer);
+		}
 	}
 
 	/**
@@ -129,9 +135,16 @@ public class MirrorImpl implements Mirror {
 	/**
 	 * Processing after each Jdwp Event.
 	 */
-	public void handledJdwpEventSet() {
+	public void handledJdwpEventSet(Throwable t) {
 		if (fVerboseWriter != null) {
-			fVerboseWriter.println();
+			if (t instanceof TimeoutException || t instanceof VMDisconnectedException) {
+				// do nothing
+			} else {
+				if (t != null) {
+					fVerboseWriter.printStackTrace(t);
+				}
+				fVerboseWriter.println();
+			}
 			fVerboseWriter.flush();
 		}
 	}
@@ -332,8 +345,9 @@ public class MirrorImpl implements Mirror {
 	 */
 	public void checkVM(Mirror mirror) throws VMMismatchException {
 		if (((MirrorImpl) mirror).virtualMachineImpl() != this
-				.virtualMachineImpl())
+				.virtualMachineImpl()) {
 			throw new VMMismatchException();
+		}
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VerboseWriter.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VerboseWriter.java
index dc25fba..c7eaaed 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VerboseWriter.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VerboseWriter.java
@@ -14,9 +14,10 @@
 package org.eclipse.jdi.internal;
 
 import java.io.PrintWriter;
-import java.util.ArrayList;
+import java.io.StringWriter;
 import java.util.List;
 import java.util.Map;
+import java.util.Vector;
 
 public class VerboseWriter {
 	/** Length of verbose description. */
@@ -30,16 +31,16 @@ public class VerboseWriter {
 	 * Number extra verbose lines. These are caused by hex dumps that span more
 	 * than one line.
 	 */
-	int fExtraVerboseLines = 0;
+	volatile int fExtraVerboseLines = 0;
 
 	/** PrintWriter that is written to. */
-	private PrintWriter fOutput;
+	private final PrintWriter fOutput;
 	/** Buffer for output: one StringBuilder entry per line. */
-	private List<StringBuilder> fLineBuffer;
+	private final List<StringBuffer> fLineBuffer;
 	/** Position from where buffer is written to. */
-	private int fPosition;
+	private volatile int fPosition;
 	/** True if the current line has not yet been written to. */
-	private boolean fNewLine = true;
+	private volatile boolean fNewLine = true;
 
 	/**
 	 * Creates new VerboseWriter that writes to the given PrintWriter. Output is
@@ -47,9 +48,9 @@ public class VerboseWriter {
 	 */
 	public VerboseWriter(PrintWriter out) {
 		fOutput = out;
-		fLineBuffer = new ArrayList<>();
+		fLineBuffer = new Vector<>();
 		fPosition = 0;
-		fLineBuffer.add(new StringBuilder());
+		fLineBuffer.add(new StringBuffer());
 	}
 
 	/**
@@ -57,7 +58,7 @@ public class VerboseWriter {
 	 * autoflush is set and there are extra vebose lines caused by printHex,
 	 * these lines are also printed.
 	 */
-	public void println() {
+	public synchronized void println() {
 		while (fExtraVerboseLines > 0) {
 			fExtraVerboseLines--;
 			markLn();
@@ -69,7 +70,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, byte value) {
+	public synchronized void println(String description, byte value) {
 		printDescription(description);
 		printHex(value);
 		println();
@@ -78,7 +79,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, short value) {
+	public synchronized void println(String description, short value) {
 		printDescription(description);
 		printHex(value);
 		println();
@@ -87,7 +88,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, int value) {
+	public synchronized void println(String description, int value) {
 		printDescription(description);
 		printHex(value);
 		println();
@@ -96,7 +97,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, long value) {
+	public synchronized void println(String description, long value) {
 		printDescription(description);
 		printHex(value);
 		println();
@@ -105,7 +106,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, byte value, Map<Integer, String> valueToString) {
+	public synchronized void println(String description, byte value, Map<Integer, String> valueToString) {
 		printDescription(description);
 		printHex(value);
 		printValue(value, valueToString);
@@ -115,7 +116,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, short value, Map<Integer, String> valueToString) {
+	public synchronized void println(String description, short value, Map<Integer, String> valueToString) {
 		printDescription(description);
 		printHex(value);
 		printValue(value, valueToString);
@@ -125,7 +126,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, int value, Map<Integer, String> valueToString) {
+	public synchronized void println(String description, int value, Map<Integer, String> valueToString) {
 		printDescription(description);
 		printHex(value);
 		printValue(value, valueToString);
@@ -135,7 +136,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, byte value, String[] bitNames) {
+	public synchronized void println(String description, byte value, String[] bitNames) {
 		printDescription(description);
 		printHex(value);
 		printValue(value, bitNames);
@@ -145,7 +146,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, short value, String[] bitNames) {
+	public synchronized void println(String description, short value, String[] bitNames) {
 		printDescription(description);
 		printHex(value);
 		printValue(value, bitNames);
@@ -155,7 +156,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, int value, String[] bitNames) {
+	public synchronized void println(String description, int value, String[] bitNames) {
 		printDescription(description);
 		printHex(value);
 		printValue(value, bitNames);
@@ -165,7 +166,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, String value) {
+	public synchronized void println(String description, String value) {
 		printDescription(description);
 		printHex(value);
 		print(value);
@@ -175,7 +176,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, boolean value) {
+	public synchronized void println(String description, boolean value) {
 		printDescription(description);
 		printHex(value);
 		print(Boolean.valueOf(value).toString());
@@ -185,7 +186,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, char value) {
+	public synchronized void println(String description, char value) {
 		printDescription(description);
 		printHex(value);
 		print(value);
@@ -195,7 +196,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, double value) {
+	public synchronized void println(String description, double value) {
 		printDescription(description);
 		printHex(value);
 		print(Double.valueOf(value).toString());
@@ -205,7 +206,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, float value) {
+	public synchronized void println(String description, float value) {
 		printDescription(description);
 		printHex(value);
 		print(Float.valueOf(value).toString());
@@ -215,7 +216,7 @@ public class VerboseWriter {
 	/**
 	 * Prints verbose line.
 	 */
-	public void println(String description, byte[] value) {
+	public synchronized void println(String description, byte[] value) {
 		printDescription(description);
 		printHex(value);
 		println();
@@ -224,7 +225,7 @@ public class VerboseWriter {
 	/**
 	 * Prints string with right size.
 	 */
-	public void printWidth(String str, int width) {
+	public synchronized void printWidth(String str, int width) {
 		print(str);
 		int spaces = width - str.length();
 		if (spaces > 0) {
@@ -237,14 +238,14 @@ public class VerboseWriter {
 	/**
 	 * Prints description string with right size plus its seperator spaces.
 	 */
-	public void printDescription(String str) {
+	public synchronized void printDescription(String str) {
 		printWidth(str, VERBOSE_DESCRIPTION_LENGTH);
 	}
 
 	/**
 	 * Prints hex substitution string with right size plus its seperator spaces.
 	 */
-	public void printHexSubstitution(String str) {
+	public synchronized void printHexSubstitution(String str) {
 		// Note that bytes also start with a space.
 		print(' ');
 		printWidth(str, VERBOSE_HEX_WIDTH - 1);
@@ -288,7 +289,7 @@ public class VerboseWriter {
 	/**
 	 * Prints hex representation of a byte.
 	 */
-	public void printHex(byte b) {
+	public synchronized void printHex(byte b) {
 		char buffer[] = new char[VERBOSE_HEX_WIDTH];
 		appendHexByte(b, buffer, 0);
 		appendHexSpaces(buffer, 1);
@@ -298,10 +299,11 @@ public class VerboseWriter {
 	/**
 	 * Prints hex representation of an int.
 	 */
-	public void printHex(short s) {
+	public synchronized void printHex(short s) {
 		char buffer[] = new char[VERBOSE_HEX_WIDTH];
-		for (int i = 1; i >= 0; i--)
+		for (int i = 1; i >= 0; i--) {
 			appendHexByte((byte) (s >>> i * 8), buffer, 1 - i);
+		}
 		appendHexSpaces(buffer, 2);
 		print(buffer);
 	}
@@ -309,10 +311,11 @@ public class VerboseWriter {
 	/**
 	 * Prints hex representation of an int.
 	 */
-	public void printHex(int integer) {
+	public synchronized void printHex(int integer) {
 		char buffer[] = new char[VERBOSE_HEX_WIDTH];
-		for (int i = 3; i >= 0; i--)
+		for (int i = 3; i >= 0; i--) {
 			appendHexByte((byte) (integer >>> i * 8), buffer, 3 - i);
+		}
 		appendHexSpaces(buffer, 4);
 		print(buffer);
 	}
@@ -320,10 +323,11 @@ public class VerboseWriter {
 	/**
 	 * Prints hex representation of a long.
 	 */
-	public void printHex(long l) {
+	public synchronized void printHex(long l) {
 		char buffer[] = new char[VERBOSE_HEX_WIDTH];
-		for (int i = 7; i >= 0; i--)
+		for (int i = 7; i >= 0; i--) {
 			appendHexByte((byte) (l >>> i * 8), buffer, 7 - i);
+		}
 		appendHexSpaces(buffer, 8);
 		print(buffer);
 	}
@@ -332,7 +336,7 @@ public class VerboseWriter {
 	 * Prints hex representation of a long.
 	 * @param b the boolean
 	 */
-	public void printHex(boolean b) {
+	public synchronized void printHex(boolean b) {
 		printHexSubstitution("<boolean>"); //$NON-NLS-1$
 	}
 
@@ -340,7 +344,7 @@ public class VerboseWriter {
 	 * Prints hex representation of a long.
 	 * @param c the char
 	 */
-	public void printHex(char c) {
+	public synchronized void printHex(char c) {
 		printHexSubstitution("<char>"); //$NON-NLS-1$
 	}
 
@@ -348,7 +352,7 @@ public class VerboseWriter {
 	 * Prints hex representation of a long.
 	 * @param d the double
 	 */
-	public void printHex(double d) {
+	public synchronized void printHex(double d) {
 		printHexSubstitution("<double>"); //$NON-NLS-1$
 	}
 
@@ -356,7 +360,7 @@ public class VerboseWriter {
 	 * Prints hex representation of a long.
 	 * @param f the float
 	 */
-	public void printHex(float f) {
+	public synchronized void printHex(float f) {
 		printHexSubstitution("<float>"); //$NON-NLS-1$
 	}
 
@@ -364,7 +368,7 @@ public class VerboseWriter {
 	 * Prints hex representation of a String.
 	 * @param str the string
 	 */
-	public void printHex(String str) {
+	public synchronized void printHex(String str) {
 		printHexSubstitution("<string>"); //$NON-NLS-1$
 	}
 
@@ -374,7 +378,7 @@ public class VerboseWriter {
 	 * Therefore, a println after a printHex can result in more than one line
 	 * being printed to the PrintWriter.
 	 */
-	public void printHex(byte[] bytes) {
+	public synchronized void printHex(byte[] bytes) {
 		int startPosition = position();
 		char linebuf[] = new char[VERBOSE_HEX_WIDTH];
 		int extraLines = 0;
@@ -408,7 +412,7 @@ public class VerboseWriter {
 	 * Prints string representation of a value given a Map from values to
 	 * strings.
 	 */
-	public void printValue(int value, Map<Integer, String> valueToString) {
+	public synchronized void printValue(int value, Map<Integer, String> valueToString) {
 		Integer val = Integer.valueOf(value);
 		if (valueToString == null) {
 			print(val.toString());
@@ -426,7 +430,7 @@ public class VerboseWriter {
 	 * Prints string representation of a value given a Vector with the names of
 	 * the bits.
 	 */
-	public void printValue(byte value, String[] bitNames) {
+	public synchronized void printValue(byte value, String[] bitNames) {
 		printValue(value & 0xff, bitNames);
 	}
 
@@ -434,7 +438,7 @@ public class VerboseWriter {
 	 * Prints string representation of a value given a Vector with the names of
 	 * the bits.
 	 */
-	public void printValue(short value, String[] bitNames) {
+	public synchronized void printValue(short value, String[] bitNames) {
 		printValue(value & 0xffff, bitNames);
 	}
 
@@ -442,7 +446,7 @@ public class VerboseWriter {
 	 * Prints string representation of a value given a Vector with the names of
 	 * the bits.
 	 */
-	public void printValue(int value, String[] bitNames) {
+	public synchronized void printValue(int value, String[] bitNames) {
 		Integer val = Integer.valueOf(value);
 		if (bitNames == null) {
 			print(val.toString());
@@ -483,7 +487,7 @@ public class VerboseWriter {
 	 */
 	private void checkForNewLine() {
 		if (fNewLine) {
-			(fLineBuffer.get(fPosition)).setLength(0);
+			getCurrentBuffer().setLength(0);
 			fNewLine = false;
 		}
 	}
@@ -491,31 +495,46 @@ public class VerboseWriter {
 	/**
 	 * Print a String.
 	 */
-	public void print(String str) {
+	public synchronized void print(String str) {
 		checkForNewLine();
-		(fLineBuffer.get(fPosition)).append(str);
+		getCurrentBuffer().append(str);
 	}
 
 	/**
 	 * Print a Character.
 	 */
-	public void print(char c) {
+	public synchronized void print(char c) {
 		checkForNewLine();
-		(fLineBuffer.get(fPosition)).append(c);
+		getCurrentBuffer().append(c);
+	}
+
+	private StringBuffer getCurrentBuffer() {
+		return fLineBuffer.get(nextPosition());
+	}
+
+	private int nextPosition() {
+		int pos = fPosition;
+		if (pos >= fLineBuffer.size()) {
+			pos = fLineBuffer.size() - 1;
+		}
+		if (pos < 0) {
+			pos = 0;
+		}
+		return pos;
 	}
 
 	/**
 	 * Print array of Characters.
 	 */
-	public void print(char[] c) {
+	public synchronized void print(char[] c) {
 		checkForNewLine();
-		(fLineBuffer.get(fPosition)).append(c);
+		getCurrentBuffer().append(c);
 	}
 
 	/**
 	 * Print a String and then terminate the line.
 	 */
-	public void println(String str) {
+	public synchronized void println(String str) {
 		print(str);
 		println();
 	}
@@ -524,44 +543,54 @@ public class VerboseWriter {
 	 * Flush buffer. If autoflush is off, this method is synchronized on the
 	 * PrintWriter given in the constructor.
 	 */
-	public void flush() {
-		synchronized (fOutput) {
-			int bufSize = fLineBuffer.size();
-
-			for (int i = 0; i < bufSize - 1; i++)
-				fOutput.println(new String(fLineBuffer.get(i)));
+	public synchronized void flush() {
+		int bufSize = fLineBuffer.size();
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
 
-			// The last line should be printed without an extra newline
-			StringBuilder lastLine = fLineBuffer.get(bufSize - 1);
-			if (lastLine.length() > 0)
-				fOutput.print(new String(lastLine));
+		for (int i = 0; i < bufSize - 1; i++) {
+			pw.println(fLineBuffer.get(i));
+		}
 
+		// The last line should be printed without an extra newline
+		StringBuffer lastLine = fLineBuffer.get(bufSize - 1);
+		if (lastLine.length() > 0) {
+			pw.print(lastLine);
+		}
+		fLineBuffer.clear();
+		fPosition = 0;
+		fLineBuffer.add(new StringBuffer());
+		// sync on fOutput to avoid writing from multiple writer instances
+		synchronized (fOutput) {
+			fOutput.print(sw.toString());
 			fOutput.flush();
-			fLineBuffer.clear();
-			fPosition = 0;
-			fLineBuffer.add(new StringBuilder());
 		}
 	}
 
+	public synchronized void printStackTrace(Throwable t) {
+		t.printStackTrace(fOutput);
+	}
+
 	/**
 	 * Go to the given position in the buffer. If the given position is smaller
 	 * than the current position, subsequent print commands overwrite existing
 	 * lines in the buffer. Else, new lines are added to the buffer.
 	 */
-	public void gotoPosition(int pos) {
+	public synchronized void gotoPosition(int pos) {
 		int delta = pos - fPosition;
 		if (delta < 0) {
 			fPosition = pos;
 		} else {
-			while (delta-- > 0)
+			while (delta-- > 0) {
 				println();
+			}
 		}
 	}
 
 	/**
 	 * Prints given number of lines.
 	 */
-	public void printLines(int lines) {
+	public synchronized void printLines(int lines) {
 		gotoPosition(fPosition + lines);
 	}
 
@@ -576,9 +605,9 @@ public class VerboseWriter {
 	 * Terminate the current line by writing the line separator string, start at
 	 * end of next line.
 	 */
-	public void markLn() {
+	public synchronized void markLn() {
 		if (++fPosition == fLineBuffer.size()) {
-			fLineBuffer.add(new StringBuilder());
+			fLineBuffer.add(new StringBuffer());
 		}
 
 		fNewLine = true;
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java
index 02dcd0b..b2bee5a 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java
@@ -15,14 +15,11 @@ package org.eclipse.jdi.internal;
 
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
-import java.net.URL;
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.MissingResourceException;
-import java.util.PropertyResourceBundle;
 
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.IPreferencesService;
@@ -31,6 +28,8 @@ import org.eclipse.jdi.internal.connect.SocketLaunchingConnectorImpl;
 import org.eclipse.jdi.internal.connect.SocketListeningConnectorImpl;
 import org.eclipse.jdi.internal.connect.SocketRawLaunchingConnectorImpl;
 import org.eclipse.jdt.debug.core.JDIDebugModel;
+import org.eclipse.jdt.internal.debug.core.JDIDebugOptions;
+import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
 
 import com.sun.jdi.VirtualMachine;
 import com.sun.jdi.VirtualMachineManager;
@@ -56,10 +55,9 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager {
 	private PrintWriter fVerbosePrintWriter = null;
 	/** List of all VMs that are currently connected. */
 	List<VirtualMachine> fConnectedVMs = new ArrayList<>();
-	/** True if in verbose mode. */
-	private boolean fVerbose = false;
+
 	/** Name of verbose file. */
-	private String fVerboseFile = null;
+	private String fVerboseFile;
 
 	/**
 	 * Creates new VirtualMachineManagerImpl.
@@ -69,23 +67,35 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager {
 		getPreferences();
 
 		// See if verbose info must be given.
-		if (fVerbose) {
-			OutputStream out;
+		if (isVerboseTracingEnabled()) {
+			OutputStream out = null;
 			if (fVerboseFile != null && fVerboseFile.length() > 0) {
 				try {
 					out = new FileOutputStream(fVerboseFile);
 				} catch (IOException e) {
-					out = System.out;
-					System.out
-							.println(JDIMessages.VirtualMachineManagerImpl_Could_not_open_verbose_file___1
+					JDIDebugPlugin.logError(JDIMessages.VirtualMachineManagerImpl_Could_not_open_verbose_file___1
 									+ fVerboseFile
 									+ JDIMessages.VirtualMachineManagerImpl_____2
-									+ e); //
+							, e); //
 				}
+			}
+			if (out == null) {
+				fVerbosePrintWriter = new PrintWriter(new StringWriter()) {
+					@Override
+					public void flush() {
+						super.flush();
+						StringWriter writer = new StringWriter();
+						synchronized (lock) {
+							JDIDebugOptions.trace(JDIDebugOptions.DEBUG_JDI_VERBOSE_FLAG, this.out.toString(), null);
+							this.out = writer;
+							this.lock = writer;
+						}
+					}
+				};
+
 			} else {
-				out = System.out;
+				fVerbosePrintWriter = new PrintWriter(out);
 			}
-			fVerbosePrintWriter = new PrintWriter(out);
 		}
 	}
 
@@ -105,33 +115,21 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager {
 		return MINOR_INTERFACE_VERSION;
 	}
 
+	public static boolean isVerboseTracingEnabled() {
+		return JDIDebugOptions.DEBUG_JDI_VEBOSE;
+	}
+
+	static String getTracingFileName() {
+		return JDIDebugOptions.DEBUG_JDI_VEBOSE_FILE;
+	}
+
 	/**
-	 * Loads the user preferences from the jdi.ini file.
+	 * Loads the user preferences from .options file
 	 */
 	private void getPreferences() {
-		// Get jdi.ini info.
-		URL url = getClass().getResource("/jdi.ini"); //$NON-NLS-1$
-		if (url == null) {
-			return;
-		}
-
-		try {
-			InputStream stream = url.openStream();
-			PropertyResourceBundle prefs = new PropertyResourceBundle(stream);
-
-			try {
-				fVerbose = Boolean.parseBoolean(prefs.getString("User.verbose")); //$NON-NLS-1$
-			} catch (MissingResourceException e) {
-			}
-
-			try {
-				fVerboseFile = prefs.getString("Verbose.out"); //$NON-NLS-1$
-			} catch (MissingResourceException e) {
-			}
-
-		} catch (IOException e) {
+		if (isVerboseTracingEnabled()) {
+			fVerboseFile = getTracingFileName();
 		}
-
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/EventQueueImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/EventQueueImpl.java
index b238ccd..a9046e7 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/EventQueueImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/EventQueueImpl.java
@@ -72,22 +72,22 @@ public class EventQueueImpl extends MirrorImpl implements EventQueue {
 						JdwpCommandPacket.E_COMPOSITE, timeout);
 				initJdwpEventSet(packet);
 				set = EventSetImpl.read(this, packet.dataInStream());
-				handledJdwpEventSet();
+				handledJdwpEventSet(null);
 			} while (set.isEmpty());
 			return set;
 		} catch (TimeoutException e) {
 			// Timeout in getCommand, JDI spec says return null.
-			handledJdwpEventSet();
+			handledJdwpEventSet(e);
 			return null;
 		} catch (IOException e) {
 			// This means the already received data is invalid.
-			handledJdwpEventSet();
+			handledJdwpEventSet(e);
 			defaultIOExceptionHandler(e);
 			return null;
 		} catch (VMDisconnectedException e) {
 			// JDI spec says that a VMDisconnectedException must always be
 			// preceeded by a VMDisconnectEvent.
-			handledJdwpEventSet();
+			handledJdwpEventSet(e);
 			if (!genereatedVMDisconnectEvent) {
 				genereatedVMDisconnectEvent = true;
 				return new EventSetImpl(virtualMachineImpl(),
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/ExceptionEventImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/ExceptionEventImpl.java
index 0de9c1b..4266ef0 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/ExceptionEventImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/event/ExceptionEventImpl.java
@@ -40,6 +40,8 @@ public class ExceptionEventImpl extends LocatableEventImpl implements
 	private ObjectReferenceImpl fException;
 	/** Location of catch, or 0 if not caught. */
 	private LocationImpl fCatchLocation;
+	/** Whether garbage collection has been re-enabled for the exception. */
+	private boolean fExceptionCollectionEnabled;
 
 	/**
 	 * Creates new ExceptionEventImpl.
@@ -60,6 +62,8 @@ public class ExceptionEventImpl extends LocatableEventImpl implements
 		event.readThreadAndLocation(target, dataInStream);
 		event.fException = ObjectReferenceImpl.readObjectRefWithTag(target,
 				dataInStream);
+		event.fException.disableCollection();
+		event.fExceptionCollectionEnabled = false;
 		event.fCatchLocation = LocationImpl.read(target, dataInStream);
 		return event;
 	}
@@ -79,4 +83,14 @@ public class ExceptionEventImpl extends LocatableEventImpl implements
 	public ObjectReference exception() {
 		return fException;
 	}
+
+	/**
+	 * Enables garbage collection for the exception in the event. GC for the exception is initially disabled, until the exception event is processed.
+	 */
+	public void enableExceptionGC() {
+		if (!fExceptionCollectionEnabled && fException != null) {
+			fException.enableCollection();
+			fExceptionCollectionEnabled = true;
+		}
+	}
 }
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/JDIDebugModel.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/JDIDebugModel.java
index 09b5390..3837547 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/JDIDebugModel.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/JDIDebugModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -64,6 +64,7 @@ import com.sun.jdi.VirtualMachine;
  * @noinstantiate This class is not intended to be instantiated by clients.
  * @noextend This class is not intended to be subclassed by clients.
  */
+@SuppressWarnings("deprecation")
 public class JDIDebugModel {
 
 	/**
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java
index 48e1fe1..209c596 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java
@@ -27,6 +27,7 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.jdi.internal.event.ExceptionEventImpl;
 import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
 import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
 
@@ -153,7 +154,13 @@ public class EventDispatcher implements Runnable {
 					}
 				}
 				vote = true;
-				resume = listener.handleEvent(event, fTarget, !resume, eventSet) && resume;
+				try {
+					resume = listener.handleEvent(event, fTarget, !resume, eventSet) && resume;
+				} catch (Throwable t) {
+					logHandleEventError(listener, event, t);
+				} finally {
+					enableGCForExceptionEvent(event);
+				}
 				continue;
 			}
 
@@ -187,7 +194,13 @@ public class EventDispatcher implements Runnable {
 						.get(event.request());
 				if (listener != null) {
 					vote = true;
-					resume = listener.handleEvent(event, fTarget, !resume, eventSet) && resume;
+					try {
+						resume = listener.handleEvent(event, fTarget, !resume, eventSet) && resume;
+					} catch (Throwable t) {
+						logHandleEventError(listener, event, t);
+					} finally {
+						enableGCForExceptionEvent(event);
+					}
 					continue;
 				}
 			}
@@ -411,4 +424,17 @@ public class EventDispatcher implements Runnable {
 		}
 	}
 
+	private static void enableGCForExceptionEvent(Event event) {
+		if (event instanceof ExceptionEventImpl) {
+			try {
+				((ExceptionEventImpl) event).enableExceptionGC();
+			} catch (Throwable t) {
+				JDIDebugPlugin.logError("Failed to enable GC for event: " + event, t); //$NON-NLS-1$
+			}
+		}
+	}
+
+	private static void logHandleEventError(IJDIEventListener listener, Event event, Throwable t) {
+		JDIDebugPlugin.logError("Exception occurred while notifying listener: " + listener + ", with event: " + event, t); //$NON-NLS-1$ //$NON-NLS-2$
+	}
 }
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java
index a3cf0b1..8658eed 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java
@@ -34,12 +34,16 @@ public class JDIDebugOptions implements DebugOptionsListener {
 	public static final String DEBUG_JDI_REQUEST_TIMES_FLAG = "org.eclipse.jdt.debug/debug/jdiRequestTimes"; //$NON-NLS-1$
 	public static final String DEBUG_JDI_EVENTS_FLAG = "org.eclipse.jdt.debug/debug/jdiEvents"; //$NON-NLS-1$
 	public static final String DEBUG_FLAG = "org.eclipse.jdt.debug/debug"; //$NON-NLS-1$
+	public static final String DEBUG_JDI_VERBOSE_FLAG = "org.eclipse.jdt.debug/debug/jdi/verbose"; //$NON-NLS-1$
+	public static final String DEBUG_JDI_VERBOSE_FILE = "org.eclipse.jdt.debug/debug/jdi/verbose/file"; //$NON-NLS-1$
 
 	public static boolean DEBUG = false;
 	public static boolean DEBUG_JDI_EVENTS = false;
 	public static boolean DEBUG_JDI_REQUEST_TIMES = false;
 	public static boolean DEBUG_AST_EVAL = false;
 	public static boolean DEBUG_AST_EVAL_THREAD_TRACE = false;
+	public static boolean DEBUG_JDI_VEBOSE;
+	public static String DEBUG_JDI_VEBOSE_FILE;
 
 	/**
 	 * The {@link DebugTrace} object to print to OSGi tracing
@@ -70,24 +74,27 @@ public class JDIDebugOptions implements DebugOptionsListener {
 		DEBUG_JDI_REQUEST_TIMES = DEBUG && options.getBooleanOption(DEBUG_JDI_REQUEST_TIMES_FLAG, false);
 		DEBUG_AST_EVAL = DEBUG && options.getBooleanOption(DEBUG_AST_EVALUATIONS_FLAG, false);
 		DEBUG_AST_EVAL_THREAD_TRACE = DEBUG && options.getBooleanOption(DEBUG_AST_EVALUATIONS_CALLING_THREADS_FLAG, false);
+		DEBUG_JDI_VEBOSE = DEBUG && options.getBooleanOption(DEBUG_JDI_VERBOSE_FLAG, false);
+		if (DEBUG && DEBUG_JDI_VEBOSE) {
+			DEBUG_JDI_VEBOSE_FILE = options.getOption(DEBUG_JDI_VERBOSE_FILE);
+		}
 	}
 
 	/**
-	 * Prints the given message to System.out and to the OSGi tracing (if started)
+	 * Prints the given message to the OSGi tracing (if started)
 	 * @param option the option or <code>null</code>
 	 * @param message the message to print or <code>null</code>
 	 * @param throwable the {@link Throwable} or <code>null</code>
 	 * @since 3.8
 	 */
 	public static void trace(String option, String message, Throwable throwable) {
-		System.out.println(message);
 		if(fgDebugTrace != null) {
 			fgDebugTrace.trace(option, message, throwable);
 		}
 	}
 
 	/**
-	 * Prints the given message to System.out and to the OSGi tracing (if enabled)
+	 * Prints the given message to the OSGi tracing (if enabled)
 	 *
 	 * @param message the message or <code>null</code>
 	 * @since 3.8
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugPlugin.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugPlugin.java
index b1ce079..9d209fd 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugPlugin.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugPlugin.java
@@ -401,7 +401,7 @@ public class JDIDebugPlugin extends Plugin implements IEclipsePreferences.IPrefe
 	 *
 	 * @param t {@link Throwable} to log
 	 */
-	public static void log(Throwable t) {
+	public static void logError(String message, Throwable t) {
 		Throwable top = t;
 		if (t instanceof CoreException) {
 			CoreException de = (CoreException) t;
@@ -413,7 +413,17 @@ public class JDIDebugPlugin extends Plugin implements IEclipsePreferences.IPrefe
 		// this message is intentionally not internationalized, as an exception
 		// may be due to the resource bundle itself
 		log(new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR,
-				"Internal error logged from JDI Debug: ", top)); //$NON-NLS-1$
+				message, top));
+	}
+
+	/**
+	 * Logs the specified {@link Throwable} with this plug-in's log.
+	 *
+	 * @param t
+	 *            {@link Throwable} to log
+	 */
+	public static void log(Throwable t) {
+		logError("Internal error logged from JDI Debug: ", t); //$NON-NLS-1$
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaBreakpoint.java
index 6265a1e..42c1643 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaBreakpoint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -471,7 +471,7 @@ public abstract class JavaBreakpoint extends Breakpoint implements IJavaBreakpoi
 		}
 	}
 
-	protected void disableTriggerPoint(Event event) {
+	protected void disableTriggerPoint(@SuppressWarnings("unused") Event event) {
 		try{
 			if (isTriggerPoint() && isEnabled()) {
 				if (this instanceof JavaLineBreakpoint) {
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
index 12655f7..e2b780c 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2015 IBM Corporation and others.
+ * Copyright (c) 2004, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -56,6 +56,7 @@ import org.eclipse.jdt.internal.debug.core.model.JDIValue;
 import com.sun.jdi.VMDisconnectedException;
 
 
+@SuppressWarnings("restriction")
 public class JavaLogicalStructure implements ILogicalStructureType, ILogicalStructureTypeDelegate3 {
 
 	private static IStatusHandler fgStackFrameProvider;
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
index 778b2e9..0775179 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -1574,6 +1574,7 @@ public class JDIStackFrame extends JDIDebugElement implements IJavaStackFrame {
 	/**
 	 * @see org.eclipse.debug.core.model.IFilteredStep#stepWithFilters()
 	 */
+	@SuppressWarnings("deprecation")
 	@Override
 	public void stepWithFilters() throws DebugException {
 		((IJavaThread) getThread()).stepWithFilters();
diff --git a/org.eclipse.jdt.debug/pom.xml b/org.eclipse.jdt.debug/pom.xml
index b314372..91ca772 100644
--- a/org.eclipse.jdt.debug/pom.xml
+++ b/org.eclipse.jdt.debug/pom.xml
@@ -14,10 +14,10 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug</artifactId>
-  <version>3.20.0-SNAPSHOT</version>
+  <version>3.20.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.jdt.launching.macosx/pom.xml b/org.eclipse.jdt.launching.macosx/pom.xml
index d4346b8..8fdf0c8 100644
--- a/org.eclipse.jdt.launching.macosx/pom.xml
+++ b/org.eclipse.jdt.launching.macosx/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.launching.macosx</artifactId>
diff --git a/org.eclipse.jdt.launching.ui.macosx/pom.xml b/org.eclipse.jdt.launching.ui.macosx/pom.xml
index c4c7668..f7382f4 100644
--- a/org.eclipse.jdt.launching.ui.macosx/pom.xml
+++ b/org.eclipse.jdt.launching.ui.macosx/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.launching.ui.macosx</artifactId>
diff --git a/org.eclipse.jdt.launching/META-INF/MANIFEST.MF b/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
index be059d2..15f53d1 100644
--- a/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.launching; singleton:=true
-Bundle-Version: 3.19.800.qualifier
+Bundle-Version: 3.19.900.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.launching.LaunchingPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaLaunchableTester.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaLaunchableTester.java
index 203146d..2a00e2d 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaLaunchableTester.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaLaunchableTester.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2017 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -424,6 +424,7 @@ public class JavaLaunchableTester extends PropertyTester {
 		return false;
 	}
 
+	@SuppressWarnings("deprecation")
 	private int readName(IScanner scanner, StringBuilder buf) throws InvalidInputException {
 		int tok= scanner.getNextToken();
 		while (tok == ITerminalSymbols.TokenNameIdentifier) {
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketAttachConnector.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketAttachConnector.java
index d03bb83..c024040 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketAttachConnector.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketAttachConnector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -47,6 +47,7 @@ import com.sun.jdi.connect.IllegalConnectorArgumentsException;
 /**
  * A standard socket attaching connector
  */
+@SuppressWarnings("deprecation")
 public class SocketAttachConnector implements IVMConnector {
 
 	/**
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/Standard11xVMRunner.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/Standard11xVMRunner.java
index 16758a9..e3dd0de 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/Standard11xVMRunner.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/Standard11xVMRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -37,6 +37,7 @@ import org.eclipse.jdt.launching.VMRunnerConfiguration;
 /**
  * A 1.1.x VM runner
  */
+@SuppressWarnings("deprecation")
 public class Standard11xVMRunner extends StandardVMRunner {
 
 	public Standard11xVMRunner(IVMInstall vmInstance) {
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java
index 1b05fa8..1829439 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2019 IBM Corporation and others.
+ *  Copyright (c) 2005, 2022 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -447,6 +447,7 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	 * @param path bundle relative path to properties file
 	 * @return properties or <code>null</code> if none
 	 */
+	@SuppressWarnings("deprecation")
 	private Properties getJavaProfileProperties(Bundle bundle, String path) {
 		Properties profile = new Properties();
 		URL profileURL = bundle.getEntry(path);
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/FileHashing.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/FileHashing.java
index 87f3ea6..dda1889 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/FileHashing.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/FileHashing.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011-2016 Igor Fedorenko
+ * Copyright (c) 2011, 2022 Igor Fedorenko
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -128,7 +128,7 @@ public class FileHashing {
 
 		@SuppressWarnings("serial")
 		public HasherImpl(int cacheSize) {
-			this.cache = new LinkedHashMap<CacheKey, HashCode>() {
+			this.cache = new LinkedHashMap<>() {
 				@Override
 				protected boolean removeEldestEntry(Map.Entry<CacheKey, HashCode> eldest) {
 					return size() > cacheSize;
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
index ead97d3..4093c90 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
@@ -116,6 +116,7 @@ import org.xml.sax.SAXException;
  * </p>
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
+@SuppressWarnings("deprecation")
 public final class JavaRuntime {
 
 	/**
@@ -1769,7 +1770,6 @@ public final class JavaRuntime {
 	public static IVMInstall computeVMInstall(ILaunchConfiguration configuration) throws CoreException {
 		String jreAttr = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_JRE_CONTAINER_PATH, (String)null);
 		if (jreAttr == null) {
-			@SuppressWarnings("deprecation")
 			String type = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, (String)null);
 			if (type == null) {
 				IJavaProject proj = getJavaProject(configuration);
@@ -1780,7 +1780,6 @@ public final class JavaRuntime {
 					}
 				}
 			} else {
-				@SuppressWarnings("deprecation")
 				String name = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME, (String)null);
 				return resolveVM(type, name, configuration);
 			}
@@ -2514,7 +2513,6 @@ public final class JavaRuntime {
 		String jreAttr = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_JRE_CONTAINER_PATH, (String)null);
 		IPath containerPath = null;
 		if (jreAttr == null) {
-			@SuppressWarnings("deprecation")
 			String type = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, (String)null);
 			if (type == null) {
 				// default JRE for the launch configuration
@@ -2528,7 +2526,6 @@ public final class JavaRuntime {
 					return computeJREEntry(proj);
 				}
 			} else {
-				@SuppressWarnings("deprecation")
 				String name = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME, (String)null);
 				if (name != null) {
 					containerPath = newDefaultJREContainerPath().append(type).append(name);
@@ -2709,7 +2706,6 @@ public final class JavaRuntime {
 	 * @return the preference store for the launching plug-in
 	 * @since 2.0
 	 */
-	@SuppressWarnings("deprecation")
 	public static Preferences getPreferences() {
 		return LaunchingPlugin.getDefault().getPluginPreferences();
 	}
diff --git a/org.eclipse.jdt.launching/pom.xml b/org.eclipse.jdt.launching/pom.xml
index 3508ed3..00687c2 100644
--- a/org.eclipse.jdt.launching/pom.xml
+++ b/org.eclipse.jdt.launching/pom.xml
@@ -14,11 +14,11 @@
   <parent>
     <artifactId>eclipse.jdt.debug</artifactId>
     <groupId>eclipse.jdt.debug</groupId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.launching</artifactId>
-  <version>3.19.800-SNAPSHOT</version>
+  <version>3.19.900-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   
   <build>
diff --git a/pom.xml b/pom.xml
index fad78c1..f44490b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <groupId>org.eclipse</groupId>
     <artifactId>eclipse-platform-parent</artifactId>
-    <version>4.26.0-SNAPSHOT</version>
+    <version>4.27.0-SNAPSHOT</version>
     <relativePath>../eclipse-platform-parent</relativePath>
   </parent>
 

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/java/eclipse-jdt-debug-3.20.100.jar
-rw-r--r--  root/root   /usr/share/java/eclipse-jdt-debug-ui-3.12.1000.jar
-rw-r--r--  root/root   /usr/share/java/eclipse-jdt-launching-3.19.900.jar
-rw-r--r--  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug.ui/3.12.1000/org.eclipse.jdt.debug.ui-3.12.1000.pom
-rw-r--r--  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug/3.20.100/org.eclipse.jdt.debug-3.20.100.pom
-rw-r--r--  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.launching/3.19.900/org.eclipse.jdt.launching-3.19.900.pom
lrwxrwxrwx  root/root   /usr/lib/eclipse/plugins/org.eclipse.jdt.debug.ui_3.12.1000.jar -> ../../../share/java/eclipse-jdt-debug-ui.jar
lrwxrwxrwx  root/root   /usr/lib/eclipse/plugins/org.eclipse.jdt.debug_3.20.100.jar -> ../../../share/java/eclipse-jdt-debug.jar
lrwxrwxrwx  root/root   /usr/lib/eclipse/plugins/org.eclipse.jdt.launching_3.19.900.jar -> ../../../share/java/eclipse-jdt-launching.jar
lrwxrwxrwx  root/root   /usr/share/java/eclipse-jdt-debug-ui.jar -> eclipse-jdt-debug-ui-3.12.1000.jar
lrwxrwxrwx  root/root   /usr/share/java/eclipse-jdt-debug.jar -> eclipse-jdt-debug-3.20.100.jar
lrwxrwxrwx  root/root   /usr/share/java/eclipse-jdt-launching.jar -> eclipse-jdt-launching-3.19.900.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug.ui/3.12.1000/org.eclipse.jdt.debug.ui-3.12.1000.jar -> ../../../../../../java/eclipse-jdt-debug-ui-3.12.1000.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug.ui/debian/org.eclipse.jdt.debug.ui-debian.jar -> ../../../../../../java/eclipse-jdt-debug-ui-3.12.1000.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug/3.20.100/org.eclipse.jdt.debug-3.20.100.jar -> ../../../../../../java/eclipse-jdt-debug-3.20.100.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug/debian/org.eclipse.jdt.debug-debian.jar -> ../../../../../../java/eclipse-jdt-debug-3.20.100.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.launching/3.19.900/org.eclipse.jdt.launching-3.19.900.jar -> ../../../../../../java/eclipse-jdt-launching-3.19.900.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.launching/debian/org.eclipse.jdt.launching-debian.jar -> ../../../../../../java/eclipse-jdt-launching-3.19.900.jar

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/java/eclipse-jdt-debug-3.20.0.jar
-rw-r--r--  root/root   /usr/share/java/eclipse-jdt-debug-ui-3.12.900.jar
-rw-r--r--  root/root   /usr/share/java/eclipse-jdt-launching-3.19.800.jar
-rw-r--r--  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug.ui/3.12.900/org.eclipse.jdt.debug.ui-3.12.900.pom
-rw-r--r--  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug/3.20.0/org.eclipse.jdt.debug-3.20.0.pom
-rw-r--r--  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.launching/3.19.800/org.eclipse.jdt.launching-3.19.800.pom
lrwxrwxrwx  root/root   /usr/lib/eclipse/plugins/org.eclipse.jdt.debug.ui_3.12.900.jar -> ../../../share/java/eclipse-jdt-debug-ui.jar
lrwxrwxrwx  root/root   /usr/lib/eclipse/plugins/org.eclipse.jdt.debug_3.20.0.jar -> ../../../share/java/eclipse-jdt-debug.jar
lrwxrwxrwx  root/root   /usr/lib/eclipse/plugins/org.eclipse.jdt.launching_3.19.800.jar -> ../../../share/java/eclipse-jdt-launching.jar
lrwxrwxrwx  root/root   /usr/share/java/eclipse-jdt-debug-ui.jar -> eclipse-jdt-debug-ui-3.12.900.jar
lrwxrwxrwx  root/root   /usr/share/java/eclipse-jdt-debug.jar -> eclipse-jdt-debug-3.20.0.jar
lrwxrwxrwx  root/root   /usr/share/java/eclipse-jdt-launching.jar -> eclipse-jdt-launching-3.19.800.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug.ui/3.12.900/org.eclipse.jdt.debug.ui-3.12.900.jar -> ../../../../../../java/eclipse-jdt-debug-ui-3.12.900.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug.ui/debian/org.eclipse.jdt.debug.ui-debian.jar -> ../../../../../../java/eclipse-jdt-debug-ui-3.12.900.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug/3.20.0/org.eclipse.jdt.debug-3.20.0.jar -> ../../../../../../java/eclipse-jdt-debug-3.20.0.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.debug/debian/org.eclipse.jdt.debug-debian.jar -> ../../../../../../java/eclipse-jdt-debug-3.20.0.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.launching/3.19.800/org.eclipse.jdt.launching-3.19.800.jar -> ../../../../../../java/eclipse-jdt-launching-3.19.800.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/eclipse/jdt/org.eclipse.jdt.launching/debian/org.eclipse.jdt.launching-debian.jar -> ../../../../../../java/eclipse-jdt-launching-3.19.800.jar

Control files of package libeclipse-jdt-debug-java: lines which differ (wdiff format)

  • Source: eclipse-jdt-debug (4.26-1~jan+control1) (20110909+git20230120.1.1860795+ds-1~jan+nus1)

Control files of package libeclipse-jdt-debug-ui-java: lines which differ (wdiff format)

  • Source: eclipse-jdt-debug (4.26-1~jan+control1) (20110909+git20230120.1.1860795+ds-1~jan+nus1)

Control files of package libeclipse-jdt-launching-java: lines which differ (wdiff format)

  • Source: eclipse-jdt-debug (4.26-1~jan+control1) (20110909+git20230120.1.1860795+ds-1~jan+nus1)

More details

Full run details