diff --git a/org.eclipse.jdt.debug.jdi.tests/.classpath b/org.eclipse.jdt.debug.jdi.tests/.classpath
index 9c36d5d..339f597 100644
--- a/org.eclipse.jdt.debug.jdi.tests/.classpath
+++ b/org.eclipse.jdt.debug.jdi.tests/.classpath
@@ -6,7 +6,11 @@
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="src" path="/org.eclipse.jdt.debug"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs
index 87a9378..8638665 100644
--- a/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs
@@ -17,9 +17,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -35,6 +35,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -93,6 +94,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
@@ -126,11 +128,13 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
@@ -138,17 +142,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=0
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
@@ -232,11 +239,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -266,6 +274,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -290,13 +300,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -343,6 +357,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -379,9 +395,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -407,8 +426,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.jdt.debug.jdi.tests/JDI Debug Tests.launch b/org.eclipse.jdt.debug.jdi.tests/JDI Debug Tests.launch
index 95b19ce..3bd69cf 100644
--- a/org.eclipse.jdt.debug.jdi.tests/JDI Debug Tests.launch
+++ b/org.eclipse.jdt.debug.jdi.tests/JDI Debug Tests.launch
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestAll.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.debug.jdi.tests.TestAll"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jdt.debug.jdi.tests"/>
+    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+        <listEntry value="/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestAll.java"/>
+    </listAttribute>
+    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+        <listEntry value="1"/>
+    </listAttribute>
+    <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.debug.jdi.tests.TestAll"/>
+    <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="org.eclipse.jdt.debug.jdi.tests"/>
+    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jdt.debug.jdi.tests"/>
 </launchConfiguration>
diff --git a/org.eclipse.jdt.debug.tests/.classpath b/org.eclipse.jdt.debug.tests/.classpath
index 375f1db..5a80029 100644
--- a/org.eclipse.jdt.debug.tests/.classpath
+++ b/org.eclipse.jdt.debug.tests/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="test plugin">
 		<attributes>
diff --git a/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs
index 3abb3e0..0c5bde8 100644
--- a/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs
@@ -20,9 +20,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -39,6 +39,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -99,6 +100,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
@@ -136,11 +138,13 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
@@ -148,17 +152,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=0
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
@@ -242,11 +249,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -276,6 +284,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -300,13 +310,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -353,6 +367,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -389,9 +405,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -417,8 +436,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
index f9bfe04..208d5c0 100644
--- a/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
@@ -50,6 +50,6 @@
  org.eclipse.jdt.core.manipulation,
  org.eclipse.core.filesystem
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Eclipse-BundleShape: dir
 Automatic-Module-Name: org.eclipse.jdt.debug.tests
diff --git a/org.eclipse.jdt.debug.tests/java8/Bug564486.java b/org.eclipse.jdt.debug.tests/java8/Bug564486.java
new file mode 100644
index 0000000..414dc3b
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/java8/Bug564486.java
@@ -0,0 +1,14 @@
+import java.util.stream.Stream;
+
+public class Bug564486 {
+    public static void main(String[] args) {
+        new Runnable() {
+            @Override
+            public void run() {
+                Stream.of(1, 2, 3).forEach(i -> {
+                    System.out.println(args);
+                });
+            }
+        }.run();
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.tests/test plugin/org/eclipse/jdt/debug/testplugin/detailpane/SimpleDetailPane.java b/org.eclipse.jdt.debug.tests/test plugin/org/eclipse/jdt/debug/testplugin/detailpane/SimpleDetailPane.java
index 07a22da..7c3b1b3 100644
--- a/org.eclipse.jdt.debug.tests/test plugin/org/eclipse/jdt/debug/testplugin/detailpane/SimpleDetailPane.java
+++ b/org.eclipse.jdt.debug.tests/test plugin/org/eclipse/jdt/debug/testplugin/detailpane/SimpleDetailPane.java
@@ -139,18 +139,6 @@
 	 */
 	@Override
 	public void dispose() {
-		if (colorPrivate != null) {
-			colorPrivate.dispose();
-		}
-		if (colorProtected != null) {
-			colorProtected.dispose();
-		}
-		if (colorPublic != null) {
-			colorPublic.dispose();
-		}
-		if (colorOther != null) {
-			colorOther.dispose();
-		}
 	}
 
 	/* (non-Javadoc)
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
index bcce41a..98a5c47 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
@@ -477,6 +477,7 @@
 				cfgs.add(createLaunchConfiguration(jp, "Bug562056"));
 				cfgs.add(createLaunchConfiguration(jp, "RemoteEvaluator"));
 				cfgs.add(createLaunchConfiguration(jp, "AnonymousEvaluator"));
+				cfgs.add(createLaunchConfiguration(jp, "Bug564486"));
 	    		loaded18 = true;
 	    		waitForBuild();
 	        }
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java
index 949830c..bb8a361 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java
@@ -14,6 +14,7 @@
 package org.eclipse.jdt.debug.tests.core;
 
 import java.io.File;
+import java.io.OutputStream;
 
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.debug.core.DebugException;
@@ -71,8 +72,10 @@
 		if (Platform.getOS().equals(Platform.OS_LINUX)) {
 			// printing env command
 			{
-				Runtime.getRuntime().exec("env");
+				Process p = Runtime.getRuntime().exec("env");
+				OutputStream processOut = p.getOutputStream();
 				Thread.sleep(500);
+				processOut.flush();
 
 			}
 			process = DebugPlugin.exec(new String[] { "java" }, new File("/tmp"));
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/AnonClassEvalTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/AnonClassEvalTests.java
new file mode 100644
index 0000000..b0ebe0f
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/AnonClassEvalTests.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Gayan Perera and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Gayan Perera - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.debug.tests.eval;
+
+import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.tests.AbstractDebugTest;
+import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
+
+public class AnonClassEvalTests extends AbstractDebugTest {
+	private IJavaThread javaThread;
+
+	@Override
+	protected IJavaProject getProjectContext() {
+		return get18Project();
+	}
+
+	public AnonClassEvalTests(String name) {
+		super(name);
+	}
+
+	public void testEvaluate_OuterVariable_InsideLambda() throws Exception {
+		debugWithBreakpoint("Bug564486", 9);
+		String snippet = "args";
+		IValue value = doEval(javaThread, snippet);
+
+		assertEquals("wrong type : ", "java.lang.String[]", value.getReferenceTypeName());
+		assertEquals("wrong result : ", 0, ((JDIObjectValue) value).getArrayLength());
+	}
+
+	public void testEvaluate_LambdaVariable_InsideLambda() throws Exception {
+		debugWithBreakpoint("Bug564486", 9);
+		String snippet = "i";
+		IValue value = doEval(javaThread, snippet);
+
+		assertEquals("wrong type : ", "java.lang.Integer", value.getReferenceTypeName());
+		assertEquals("wrong result : ", "1", ((JDIObjectValue) value).getField("value", false).getValue().toString());
+	}
+
+	private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception {
+		createLineBreakpoint(lineNumber, testClass);
+		javaThread = launchToBreakpoint(testClass);
+		assertNotNull("The program did not suspend", javaThread);
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		try {
+			terminateAndRemove(javaThread);
+		} finally {
+			super.tearDown();
+			removeAllBreakpoints();
+		}
+	}
+}
diff --git a/org.eclipse.jdt.debug.ui/.classpath b/org.eclipse.jdt.debug.ui/.classpath
index 1aed902..d379e7c 100644
--- a/org.eclipse.jdt.debug.ui/.classpath
+++ b/org.eclipse.jdt.debug.ui/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="ui"/>
 	<classpathentry kind="src" output="snippet_bin" path="Snippet Support"/>
diff --git a/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
index 78c91ee..4aa296e 100644
--- a/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
@@ -17,9 +17,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -35,6 +35,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -93,6 +94,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
@@ -126,11 +128,13 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
@@ -138,17 +142,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=0
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
@@ -232,11 +239,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -266,6 +274,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -290,13 +300,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -343,6 +357,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -379,9 +395,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -407,8 +426,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
index 4a7d4f3..f6d9348 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 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug.ui; singleton:=true
-Bundle-Version: 3.11.100.qualifier
+Bundle-Version: 3.12.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -53,5 +53,5 @@
  org.eclipse.core.resources,
  org.eclipse.debug.core;bundle-version="[3.12.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Automatic-Module-Name: org.eclipse.jdt.debug.ui
diff --git a/org.eclipse.jdt.debug.ui/pom.xml b/org.eclipse.jdt.debug.ui/pom.xml
index a378365..1d73fd9 100644
--- a/org.eclipse.jdt.debug.ui/pom.xml
+++ b/org.eclipse.jdt.debug.ui/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug.ui</artifactId>
-  <version>3.11.100-SNAPSHOT</version>
+  <version>3.12.0-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/debug/ui/launchConfigurations/JavaArgumentsTab.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaArgumentsTab.java
index 603413c..093772a 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaArgumentsTab.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaArgumentsTab.java
@@ -33,12 +33,8 @@
 import org.eclipse.jdt.internal.debug.ui.launcher.VMArgumentsBlock;
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TraverseEvent;
-import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
@@ -119,27 +115,20 @@
 		group.setText(controlName);
 
 		fPrgmArgumentsText = new Text(group, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
-		fPrgmArgumentsText.addTraverseListener(new TraverseListener() {
-			@Override
-			public void keyTraversed(TraverseEvent e) {
-				switch (e.detail) {
-					case SWT.TRAVERSE_ESCAPE:
-					case SWT.TRAVERSE_PAGE_NEXT:
-					case SWT.TRAVERSE_PAGE_PREVIOUS:
+		fPrgmArgumentsText.addTraverseListener(e -> {
+			switch (e.detail) {
+				case SWT.TRAVERSE_ESCAPE:
+				case SWT.TRAVERSE_PAGE_NEXT:
+				case SWT.TRAVERSE_PAGE_PREVIOUS:
+					e.doit = true;
+					break;
+				case SWT.TRAVERSE_RETURN:
+				case SWT.TRAVERSE_TAB_NEXT:
+				case SWT.TRAVERSE_TAB_PREVIOUS:
+					if (((fPrgmArgumentsText.getStyle() & SWT.SINGLE) != 0) || (!fPrgmArgumentsText.isEnabled() || (e.stateMask & SWT.MODIFIER_MASK) != 0)) {
 						e.doit = true;
-						break;
-					case SWT.TRAVERSE_RETURN:
-					case SWT.TRAVERSE_TAB_NEXT:
-					case SWT.TRAVERSE_TAB_PREVIOUS:
-						if ((fPrgmArgumentsText.getStyle() & SWT.SINGLE) != 0) {
-							e.doit = true;
-						} else {
-							if (!fPrgmArgumentsText.isEnabled() || (e.stateMask & SWT.MODIFIER_MASK) != 0) {
-								e.doit = true;
-							}
-						}
-						break;
-				}
+					}
+					break;
 			}
 		});
 		gd = new GridData(GridData.FILL_BOTH);
@@ -147,12 +136,7 @@
 		gd.widthHint = 100;
 		fPrgmArgumentsText.setLayoutData(gd);
 		fPrgmArgumentsText.setFont(font);
-		fPrgmArgumentsText.addModifyListener(new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent evt) {
-				scheduleUpdateJob();
-			}
-		});
+		fPrgmArgumentsText.addModifyListener(evt -> scheduleUpdateJob());
 		ControlAccessibleListener.addListener(fPrgmArgumentsText, group.getText());
 
 		String buttonLabel = LauncherMessages.JavaArgumentsTab_5;
@@ -335,6 +319,7 @@
 		getAttributesLabelsForPrototype().put(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, LauncherMessages.JavaArgumentsTab_AttributeLabel_ProgramArguments);
 		getAttributesLabelsForPrototype().put(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, LauncherMessages.JavaArgumentsTab_AttributeLabel_VMArguments);
 		getAttributesLabelsForPrototype().put(IJavaLaunchConfigurationConstants.ATTR_USE_START_ON_FIRST_THREAD, LauncherMessages.JavaArgumentsTab_AttributeLabel_UseAtStart);
+		getAttributesLabelsForPrototype().put(IJavaLaunchConfigurationConstants.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES, LauncherMessages.JavaArgumentsTab_AttributeLabel_ActivateHelpfulNullPointerExceptions);
 		getAttributesLabelsForPrototype().put(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, LauncherMessages.JavaArgumentsTab_AttributeLabel_WorkingDirectory);
 	}
 }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
index afb621c..53a7b46 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
@@ -134,7 +134,7 @@
 			}
 			//if the line info is a valid location with an invalid line number,
 			//a line breakpoint must be removed
-			if(isLineBreakpoint(marker) & line == -1) {
+			if (line == -1 && isLineBreakpoint(marker)) {
 				return false;
 			}
 			MarkerUtilities.setLineNumber(marker, line);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java
index b1ae6ee..3262c54 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java
@@ -225,7 +225,7 @@
 		private IDialogSettings getDialogSettings(boolean create) {
 			IDialogSettings settings = JDIDebugUIPlugin.getDefault().getDialogSettings();
 			IDialogSettings section = settings.getSection(this.getClass().getName());
-			if (section == null & create) {
+			if (section == null && create) {
 				section = settings.addNewSection(this.getClass().getName());
 			}
 			return section;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDISourceViewer.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDISourceViewer.java
index da2022e..4489b83 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDISourceViewer.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDISourceViewer.java
@@ -170,18 +170,12 @@
 				? null
 				: createColor(store, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND, styledText.getDisplay());
 			styledText.setForeground(color);
-			if (getForegroundColor() != null) {
-				getForegroundColor().dispose();
-			}
 			setForegroundColor(color);
 
 			color= store.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)
 				? null
 				: createColor(store, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, styledText.getDisplay());
 			styledText.setBackground(color);
-			if (getBackgroundColor() != null) {
-				getBackgroundColor().dispose();
-			}
 			setBackgroundColor(color);
 		}
 	}
@@ -285,11 +279,9 @@
 			setFont(null);
 		}
 		if (getBackgroundColor() != null) {
-			getBackgroundColor().dispose();
 			setBackgroundColor(null);
 		}
 		if (getForegroundColor() != null) {
-			getForegroundColor().dispose();
 			setForegroundColor(null);
 		}
 		if (fStore != null) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
index 9292b24..3e8392e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
@@ -148,7 +148,7 @@
 	 */
 	protected void addAutosaveProperties(int[] autosave) {
 		for (int element : autosave) {
-			fAutoSaveProperties.add(new Integer(element));
+			fAutoSaveProperties.add(Integer.valueOf(element));
 		}
 	}
 
@@ -164,7 +164,7 @@
 		fEditor.addPropertyListener(new IPropertyListener() {
 			@Override
 			public void propertyChanged(Object source, int propId) {
-				if (fAutoSaveProperties.contains(new Integer(propId))) {
+				if (fAutoSaveProperties.contains(Integer.valueOf(propId))) {
 					try {
 						fEditor.doSave();
 						return;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java
index 339bade..eea647b 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java
@@ -29,6 +29,9 @@
 	public static String JavaArgumentsTab_AttributeLabel_ProgramArguments;
 	public static String JavaArgumentsTab_AttributeLabel_VMArguments;
 	public static String JavaArgumentsTab_AttributeLabel_UseAtStart;
+	public static String JavaArgumentsTab_AttributeLabel_ActivateHelpfulNullPointerExceptions;
+	public static String JavaArgumentsTab_AttributeTooltip_ActivateHelpfulNullPointerExceptions;
+
 	public static String JavaArgumentsTab_AttributeLabel_WorkingDirectory;
 
 	public static String JavaClasspathTab_1;
@@ -50,8 +53,8 @@
 	public static String RuntimeClasspathAdvancedDialog_7;
 
 	public static String VMArgumentsBlock_0;
-
 	public static String VMArgumentsBlock_1;
+	public static String VMArgumentsBlock_2;
 
 	public static String VMArgumentsBlock_VM_Arguments;
 	public static String VMArgumentsBlock_4;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties
index 2116d33..02c59f3 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties
@@ -19,16 +19,19 @@
 JavaArgumentsTab__Program_arguments__5=Program &arguments:
 JavaArgumentsTab_Exception_occurred_reading_configuration___15=Exception occurred reading configuration:
 JavaArgumentsTab_VM_ar_guments__6=VM ar&guments:
+JavaArgumentsTab_AttributeLabel_ActivateHelpfulNullPointerExceptions=Activate helpful null pointer exceptions
 JavaArgumentsTab_AttributeLabel_ProgramArguments=Program arguments
 JavaArgumentsTab_AttributeLabel_VMArguments=VM arguments
 JavaArgumentsTab_AttributeLabel_UseAtStart=Use at start on 1st thread
 JavaArgumentsTab_AttributeLabel_WorkingDirectory=WorkingDirectory
+JavaArgumentsTab_AttributeTooltip_ActivateHelpfulNullPointerExceptions=You need at least Java14 to make use of it!
 
 RuntimeClasspathAdvancedDialog_6=Add &Variable String:
 RuntimeClasspathAdvancedDialog_7=Va&riables...
 
 VMArgumentsBlock_0=Use the -&XstartOnFirstThread argument when launching with SWT
 VMArgumentsBlock_1=Use temporary JAR to speci&fy classpath (to avoid classpath length limitations)
+VMArgumentsBlock_2=Use the -XX:+ShowCode&DetailsInExceptionMessages argument when launching
 VMArgumentsBlock_VM_Arguments=VM Arguments
 
 JavaConnectTab__Allow_termination_of_remote_VM_6=&Allow termination of remote VM
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/VMArgumentsBlock.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/VMArgumentsBlock.java
index a995bc5..b99745e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/VMArgumentsBlock.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/VMArgumentsBlock.java
@@ -20,17 +20,15 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.internal.ui.SWTFactory;
 import org.eclipse.debug.ui.StringVariableSelectionDialog;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.debug.ui.launchConfigurations.JavaLaunchTab;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
 import org.eclipse.jdt.internal.debug.ui.actions.ControlAccessibleListener;
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TraverseEvent;
-import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -47,6 +45,7 @@
 	// VM arguments widgets
 	protected Text fVMArgumentsText;
 	private Button fUseStartOnFirstThread = null;
+	private Button fHelpfulExceptions = null;
 	private Button fPgrmArgVariableButton;
 
 	/**
@@ -66,27 +65,20 @@
 		group.setText(LauncherMessages.JavaArgumentsTab_VM_ar_guments__6);
 
 		fVMArgumentsText = new Text(group, SWT.MULTI | SWT.WRAP| SWT.BORDER | SWT.V_SCROLL);
-		fVMArgumentsText.addTraverseListener(new TraverseListener() {
-			@Override
-			public void keyTraversed(TraverseEvent e) {
-				switch (e.detail) {
-					case SWT.TRAVERSE_ESCAPE:
-					case SWT.TRAVERSE_PAGE_NEXT:
-					case SWT.TRAVERSE_PAGE_PREVIOUS:
+		fVMArgumentsText.addTraverseListener(e -> {
+			switch (e.detail) {
+				case SWT.TRAVERSE_ESCAPE:
+				case SWT.TRAVERSE_PAGE_NEXT:
+				case SWT.TRAVERSE_PAGE_PREVIOUS:
+					e.doit = true;
+					break;
+				case SWT.TRAVERSE_RETURN:
+				case SWT.TRAVERSE_TAB_NEXT:
+				case SWT.TRAVERSE_TAB_PREVIOUS:
+					if (((fVMArgumentsText.getStyle() & SWT.SINGLE) != 0) || (!fVMArgumentsText.isEnabled() || (e.stateMask & SWT.MODIFIER_MASK) != 0)) {
 						e.doit = true;
-						break;
-					case SWT.TRAVERSE_RETURN:
-					case SWT.TRAVERSE_TAB_NEXT:
-					case SWT.TRAVERSE_TAB_PREVIOUS:
-						if ((fVMArgumentsText.getStyle() & SWT.SINGLE) != 0) {
-							e.doit = true;
-						} else {
-							if (!fVMArgumentsText.isEnabled() || (e.stateMask & SWT.MODIFIER_MASK) != 0) {
-								e.doit = true;
-							}
-						}
-						break;
-				}
+					}
+					break;
 			}
 		});
 		gd = new GridData(GridData.FILL_BOTH);
@@ -94,12 +86,7 @@
 		gd.widthHint = 100;
 		fVMArgumentsText.setLayoutData(gd);
 		fVMArgumentsText.setFont(font);
-		fVMArgumentsText.addModifyListener(new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent evt) {
-				scheduleUpdateJob();
-			}
-		});
+		fVMArgumentsText.addModifyListener(evt -> scheduleUpdateJob());
 		ControlAccessibleListener.addListener(fVMArgumentsText, group.getText());
 
 		fPgrmArgVariableButton = createPushButton(group, LauncherMessages.VMArgumentsBlock_4, null);
@@ -126,6 +113,15 @@
 				}
 			});
 		}
+		fHelpfulExceptions = SWTFactory.createCheckButton(group, LauncherMessages.VMArgumentsBlock_2, null, true, 1);
+		fHelpfulExceptions.setEnabled(false);
+		fHelpfulExceptions.setToolTipText(LauncherMessages.JavaArgumentsTab_AttributeTooltip_ActivateHelpfulNullPointerExceptions);
+		fHelpfulExceptions.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				scheduleUpdateJob();
+			}
+		});
 	}
 
 	/**
@@ -135,6 +131,7 @@
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 		configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, (String)null);
 		configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_USE_START_ON_FIRST_THREAD, true);
+		configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES, true);
 	}
 
 	/**
@@ -147,6 +144,9 @@
 			if(fUseStartOnFirstThread != null) {
 				fUseStartOnFirstThread.setSelection(configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_USE_START_ON_FIRST_THREAD, true));
 			}
+			if (fHelpfulExceptions != null) {
+				fHelpfulExceptions.setSelection(configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES, true));
+			}
 		} catch (CoreException e) {
 			setErrorMessage(LauncherMessages.JavaArgumentsTab_Exception_occurred_reading_configuration___15 + e.getStatus().getMessage());
 			JDIDebugUIPlugin.log(e);
@@ -162,6 +162,27 @@
 		if(fUseStartOnFirstThread != null) {
 			configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_USE_START_ON_FIRST_THREAD, fUseStartOnFirstThread.getSelection());
 		}
+		if (isJavaNewerThan(configuration, JavaCore.VERSION_13)) {
+			configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES, fHelpfulExceptions.getSelection());
+			fHelpfulExceptions.setEnabled(true);
+		} else {
+			fHelpfulExceptions.setEnabled(false);
+		}
+	}
+
+	/**
+	 *
+	 * @param configuration
+	 * @param version
+	 *            string eg. org.eclipse.jdt.core.JavaCore.VERSION_14
+	 * @return
+	 */
+	private boolean isJavaNewerThan(ILaunchConfiguration configuration, String version) {
+		try {
+			return JavaRuntime.compareJavaVersions(JavaRuntime.computeVMInstall(configuration), version) > 0;
+		} catch (CoreException e) {
+			return false;
+		}
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug/.classpath b/org.eclipse.jdt.debug/.classpath
index 722fc6a..82c1c48 100644
--- a/org.eclipse.jdt.debug/.classpath
+++ b/org.eclipse.jdt.debug/.classpath
@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" output="jdi-bin" path="jdi interfaces"/>
 	<classpathentry kind="src" path="model"/>
 	<classpathentry kind="src" path="jdi"/>
 	<classpathentry kind="src" path="eval"/>
diff --git a/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
index 4e75038..d139473 100644
--- a/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
@@ -17,9 +17,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -35,6 +35,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -93,6 +94,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
@@ -126,11 +128,13 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
@@ -138,17 +142,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=0
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
@@ -232,11 +239,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -266,6 +274,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -290,13 +300,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -343,6 +357,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -379,9 +395,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -407,8 +426,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.jdt.debug/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
index 27d41d8..04a9cea 100644
--- a/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
@@ -2,19 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
-Bundle-Version: 3.15.200.qualifier
-Bundle-ClassPath: jdi.jar,
- jdimodel.jar,
+Bundle-Version: 3.16.0.qualifier
+Bundle-ClassPath: jdimodel.jar,
  tools.jar
 Bundle-Activator: org.eclipse.jdt.internal.debug.core.JDIDebugPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: com.sun.jdi;x-friends:="org.eclipse.jdt.debug.ui,org.eclipse.jdt.launching",
- com.sun.jdi.connect;x-friends:="org.eclipse.jdt.debug.ui,org.eclipse.jdt.launching",
- com.sun.jdi.connect.spi;x-friends:="org.eclipse.jdt.debug.ui,org.eclipse.jdt.launching",
- com.sun.jdi.event;x-friends:="org.eclipse.jdt.debug.ui,org.eclipse.jdt.launching",
- com.sun.jdi.request;x-friends:="org.eclipse.jdt.debug.ui,org.eclipse.jdt.launching",
- org.eclipse.jdi,
+Export-Package: org.eclipse.jdi,
  org.eclipse.jdi.hcr,
  org.eclipse.jdi.internal;x-friends:="org.eclipse.jdt.debug.ui",
  org.eclipse.jdi.internal.connect;x-friends:="org.eclipse.jdt.debug.ui",
@@ -38,6 +32,6 @@
  org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Eclipse-BundleShape: dir
 Automatic-Module-Name: org.eclipse.jdt.debug
diff --git a/org.eclipse.jdt.debug/build.properties b/org.eclipse.jdt.debug/build.properties
index be0436c..b5bb2e4 100644
--- a/org.eclipse.jdt.debug/build.properties
+++ b/org.eclipse.jdt.debug/build.properties
@@ -18,16 +18,12 @@
                META-INF/,\
                .options
 
-source.jdi.jar = jdi interfaces/
-output.jdi.jar = jdi-bin/
 source.jdimodel.jar = model/,\
                       jdi/,\
                       eval/
 output.jdimodel.jar = bin/                   
 src.includes = about.html,\
                schema/
-jars.compile.order = jdi.jar,\
-                     jdimodel.jar
+jars.compile.order = jdimodel.jar
 javacWarnings..=-unavoidableGenericProblems
 javacWarnings.jdimodel.jar=-unavoidableGenericProblems
-javacWarnings.jdi.jar=-unavoidableGenericProblems
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 bacd7f3..8305885 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
@@ -626,7 +626,8 @@
 						|| problemId == IProblem.NotVisibleMethod
 						|| problemId == IProblem.NotVisibleConstructor
 						|| problemId == IProblem.NotVisibleField
-						|| problemId == IProblem.NotVisibleType) {
+						|| problemId == IProblem.NotVisibleType 
+						|| problemId == IProblem.UnexpectedStaticModifierForMethod) {
 					continue;
 				}
 				if (problem.isError()) {
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java
index 54fea75..b6d42fe 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java
@@ -359,7 +359,7 @@
 			}
 		}
 
-		if (isAnonymousType & hasEnclosingInstance) {
+		if (isAnonymousType && hasEnclosingInstance) {
 			source.append("};\n"); //$NON-NLS-1$
 		}
 
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/AbsentInformationException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/AbsentInformationException.java
deleted file mode 100644
index 428ec3e..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/AbsentInformationException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/AbsentInformationException.html
- */
-public class AbsentInformationException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public AbsentInformationException() {
-	}
-
-	public AbsentInformationException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Accessible.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Accessible.java
deleted file mode 100644
index 09d61bc..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Accessible.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Accessible.html
- */
-public interface Accessible {
-	public boolean isPackagePrivate();
-	public boolean isPrivate();
-	public boolean isProtected();
-	public boolean isPublic();
-	public int modifiers();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ArrayReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ArrayReference.java
deleted file mode 100644
index c19b29e..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ArrayReference.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ArrayReference.html
- */
-public interface ArrayReference extends ObjectReference {
-	public Value getValue(int arg1);
-	public List<Value> getValues();
-	public List<Value> getValues(int arg1, int arg2);
-	public int length();
-	public void setValue(int arg1, Value arg2) throws InvalidTypeException, ClassNotLoadedException;
-	public void setValues(int arg1, List<? extends Value> arg2, int arg3, int arg4)throws InvalidTypeException, ClassNotLoadedException;
-	public void setValues(List<? extends Value> arg1) throws InvalidTypeException, ClassNotLoadedException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ArrayType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ArrayType.java
deleted file mode 100644
index d8fcc34..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ArrayType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ArrayType.html
- */
-public interface ArrayType extends ReferenceType {
-	public String componentSignature();
-	public Type componentType() throws ClassNotLoadedException;
-	public String componentTypeName();
-	public ArrayReference newInstance(int arg1);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/BooleanType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/BooleanType.java
deleted file mode 100644
index eaef6fc..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/BooleanType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/BooleanType.html
- */
-public interface BooleanType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/BooleanValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/BooleanValue.java
deleted file mode 100644
index 0496ac2..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/BooleanValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/BooleanValue.html
- */
-public interface BooleanValue extends PrimitiveValue {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public boolean value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Bootstrap.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Bootstrap.java
deleted file mode 100644
index a4b4d81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Bootstrap.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Bootstrap.html
- */
-public class Bootstrap {
-	static public VirtualMachineManager virtualMachineManager() {
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ByteType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ByteType.java
deleted file mode 100644
index 4bf9dca..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ByteType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ByteType.html
- */
-public interface ByteType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ByteValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ByteValue.java
deleted file mode 100644
index 269b9bd..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ByteValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ByteValue.html
- */
-public interface ByteValue extends PrimitiveValue, Comparable<ByteValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public byte value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/CharType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/CharType.java
deleted file mode 100644
index ce990d9..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/CharType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/CharType.html
- */
-public interface CharType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/CharValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/CharValue.java
deleted file mode 100644
index 59f1f85..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/CharValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/CharValue.html
- */
-public interface CharValue extends PrimitiveValue, Comparable<CharValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public char value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassLoaderReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassLoaderReference.java
deleted file mode 100644
index 97e099f..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassLoaderReference.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ClassLoaderReference.html
- */
-public interface ClassLoaderReference extends ObjectReference {
-	public List<ReferenceType> definedClasses();
-	public List<ReferenceType> visibleClasses();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassNotLoadedException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassNotLoadedException.java
deleted file mode 100644
index 682ffce..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassNotLoadedException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ClassNotLoadedException.html
- */
-public class ClassNotLoadedException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ClassNotLoadedException(String className) {
-		name = className;
-	}
-
-	public ClassNotLoadedException(String className, String msg) {
-		super(msg);
-		name = className;
-	}
-
-	public String className() {
-		return name;
-	}
-
-	private String name;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassNotPreparedException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassNotPreparedException.java
deleted file mode 100644
index 39960e9..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassNotPreparedException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ClassNotPreparedException.html
- */
-public class ClassNotPreparedException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ClassNotPreparedException() {
-	}
-
-	public ClassNotPreparedException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassObjectReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassObjectReference.java
deleted file mode 100644
index 1d9df30..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassObjectReference.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ClassObjectReference.html
- */
-public abstract interface ClassObjectReference extends ObjectReference {
-	public abstract ReferenceType reflectedType();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassType.java
deleted file mode 100644
index 00dec52..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ClassType.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ClassType.html
- */
-public interface ClassType extends ReferenceType {
-	public static final int INVOKE_SINGLE_THREADED = 1;
-	public List<InterfaceType> allInterfaces();
-	public Method concreteMethodByName(String arg1, String arg2);
-	public List<InterfaceType> interfaces();
-	public Value invokeMethod(ThreadReference arg1, Method arg2, List<? extends Value> arg3, int arg4) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException;
-	public boolean isEnum();
-	public ObjectReference newInstance(ThreadReference arg1, Method arg2, List<? extends Value> arg3, int arg4) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException;
-	public void setValue(Field arg1, Value arg2) throws InvalidTypeException, ClassNotLoadedException;
-	public List<ClassType> subclasses();
-	public ClassType superclass();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/DoubleType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/DoubleType.java
deleted file mode 100644
index 0f7ebd1..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/DoubleType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/DoubleType.html
- */
-public interface DoubleType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/DoubleValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/DoubleValue.java
deleted file mode 100644
index 0e40f10..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/DoubleValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/DoubleValue.html
- */
-public interface DoubleValue extends PrimitiveValue, Comparable<DoubleValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public double value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Field.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Field.java
deleted file mode 100644
index 2793a4f..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Field.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Field.html
- */
-public interface Field extends TypeComponent, Comparable<Field> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public boolean isEnumConstant();
-	public boolean isTransient();
-	public boolean isVolatile();
-	public Type type() throws ClassNotLoadedException;
-	public String typeName();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/FloatType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/FloatType.java
deleted file mode 100644
index d9c0ccc..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/FloatType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/FloatType.html
- */
-public interface FloatType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/FloatValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/FloatValue.java
deleted file mode 100644
index 68e7876..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/FloatValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/FloatValue.html
- */
-public interface FloatValue extends PrimitiveValue, Comparable<FloatValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public float value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IncompatibleThreadStateException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IncompatibleThreadStateException.java
deleted file mode 100644
index 351b424..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IncompatibleThreadStateException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/IncompatibleThreadStateException.html
- */
-public class IncompatibleThreadStateException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public IncompatibleThreadStateException() {
-	}
-
-	public IncompatibleThreadStateException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InconsistentDebugInfoException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InconsistentDebugInfoException.java
deleted file mode 100644
index fe98154..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InconsistentDebugInfoException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InconsistentDebugInfoException.html
- */
-public class InconsistentDebugInfoException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public InconsistentDebugInfoException() {
-	}
-
-	public InconsistentDebugInfoException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IntegerType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IntegerType.java
deleted file mode 100644
index 124d73c..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IntegerType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/IntegerType.html
- */
-public interface IntegerType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IntegerValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IntegerValue.java
deleted file mode 100644
index d1b0a0b..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/IntegerValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/IntegerValue.html
- */
-public interface IntegerValue extends PrimitiveValue, Comparable<IntegerValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public int value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InterfaceType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InterfaceType.java
deleted file mode 100644
index fa71ce2..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InterfaceType.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Jesper Steen Møller <jesper@selskabet.org> - Bug 430839
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InterfaceType.html and
- * http://docs.oracle.com/javase/8/docs/jdk/api/jpda/jdi/com/sun/jdi/InterfaceType.html
- */
-public interface InterfaceType extends ReferenceType {
-	public List<ClassType> implementors();
-	public List<InterfaceType> subinterfaces();
-	public List<InterfaceType> superinterfaces();
-	public /* default */ Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InternalException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InternalException.java
deleted file mode 100644
index de4f79e..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InternalException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InternalException.html
- */
-public class InternalException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public InternalException() {
-	}
-
-	public InternalException(int errorCode) {
-		error = errorCode;
-	}
-
-	public InternalException(java.lang.String s) {
-		super(s);
-	}
-
-	public InternalException(java.lang.String s, int errorCode) {
-		super(s);
-		error = errorCode;
-	}
-
-	public int errorCode() {
-		return error;
-	}
-
-	private int error;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidCodeIndexException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidCodeIndexException.java
deleted file mode 100644
index 3fe21f3..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidCodeIndexException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InvalidCodeIndexException.html
- * @deprecated This exception is no longer thrown.
- */
-@Deprecated
-public class InvalidCodeIndexException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * @deprecated no longer thrown
-	 */
-	@Deprecated
-	public InvalidCodeIndexException() {
-	}
-
-	/**
-	 * @param arg1
-	 *            the message
-	 * @deprecated no longer thrown
-	 */
-	@Deprecated
-	public InvalidCodeIndexException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidLineNumberException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidLineNumberException.java
deleted file mode 100644
index 5dbe2d3..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidLineNumberException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InvalidLineNumberException.html
- * @deprecated This exception is no longer thrown.
- */
-@Deprecated
-public class InvalidLineNumberException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * @deprecated no longer thrown
-	 */
-	@Deprecated
-	public InvalidLineNumberException() {
-	}
-
-	/**
-	 * @param arg1
-	 *            the message
-	 * @deprecated no longer thrown
-	 */
-	@Deprecated
-	public InvalidLineNumberException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidStackFrameException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidStackFrameException.java
deleted file mode 100644
index 149a8e1..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidStackFrameException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InvalidStackFrameException.html
- */
-public class InvalidStackFrameException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public InvalidStackFrameException() {
-	}
-
-	public InvalidStackFrameException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidTypeException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidTypeException.java
deleted file mode 100644
index 26f5d68..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvalidTypeException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InvalidTypeException.html
- */
-public class InvalidTypeException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public InvalidTypeException() {
-	}
-
-	public InvalidTypeException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvocationException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvocationException.java
deleted file mode 100644
index 7997663..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/InvocationException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InvocationException.html
- */
-public class InvocationException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	private ObjectReference exception;
-
-	public InvocationException(ObjectReference arg1) {
-		exception = arg1;
-	}
-
-	public ObjectReference exception() {
-		return exception;
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/JDIPermission.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/JDIPermission.java
deleted file mode 100644
index ad5a499..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/JDIPermission.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.security.BasicPermission;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/JDIPermission.html
- */
-public class JDIPermission extends BasicPermission {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public JDIPermission(String arg1) {
-		super(arg1);
-	}
-
-	public JDIPermission(String arg1, String arg2) {
-		super(arg1, arg2);
-	}
-
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LocalVariable.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LocalVariable.java
deleted file mode 100644
index 9d38447..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LocalVariable.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/LocalVariable.html
- */
-public interface LocalVariable extends Mirror, Comparable<LocalVariable> {
-	@Override
-	public boolean equals(Object arg1);
-	public String genericSignature();
-	@Override
-	public int hashCode();
-	public boolean isArgument();
-	public boolean isVisible(StackFrame arg1);
-	public String name();
-	public String signature();
-	public Type type() throws ClassNotLoadedException;
-	public String typeName();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Locatable.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Locatable.java
deleted file mode 100644
index d34b9bb..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Locatable.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Locatable.html
- */
-public interface Locatable {
-	public Location location();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Location.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Location.java
deleted file mode 100644
index b905631..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Location.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Location.html
- */
-public interface Location extends Mirror, Comparable<Locatable> {
-	public long codeIndex();
-	public ReferenceType declaringType();
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public int lineNumber();
-	public int lineNumber(String stratum);
-	public Method method();
-	public String sourceName() throws AbsentInformationException;
-	public String sourceName(String stratum) throws AbsentInformationException;
-	public String sourcePath() throws AbsentInformationException;
-	public String sourcePath(String stratum) throws AbsentInformationException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LongType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LongType.java
deleted file mode 100644
index ea89b81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LongType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/LongType.html
- */
-public interface LongType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LongValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LongValue.java
deleted file mode 100644
index 0f0009d..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/LongValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/LongValue.html
- */
-public interface LongValue extends PrimitiveValue, Comparable<LongValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public long value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Method.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Method.java
deleted file mode 100644
index 8c2fc8a..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Method.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Method.html
- */
-public interface Method extends TypeComponent, Locatable, Comparable<Method> {
-	public List<Location> allLineLocations() throws AbsentInformationException;
-	public List<Location> allLineLocations(String arg1, String arg2) throws AbsentInformationException;
-	public List<LocalVariable> arguments() throws AbsentInformationException;
-	public List<String> argumentTypeNames();
-	public List<Type> argumentTypes() throws ClassNotLoadedException;
-	public byte[] bytecodes();
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public boolean isAbstract();
-	public boolean isBridge();
-	public boolean isConstructor();
-	public boolean isNative();
-	public boolean isObsolete();
-	public boolean isStaticInitializer();
-	public boolean isSynchronized();
-	public boolean isVarArgs();
-	public Location locationOfCodeIndex(long arg1);
-	public List<Location> locationsOfLine(int arg1) throws AbsentInformationException;
-	public List<Location> locationsOfLine(String arg1, String arg2, int arg3)	throws AbsentInformationException;
-	public Type returnType() throws ClassNotLoadedException;
-	public String returnTypeName();
-	public List<LocalVariable> variables() throws AbsentInformationException;
-	public List<LocalVariable> variablesByName(String arg1) throws AbsentInformationException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Mirror.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Mirror.java
deleted file mode 100644
index 16e01f1..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Mirror.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Mirror.html
- */
-public interface Mirror {
-	@Override
-	public String toString();
-	public VirtualMachine virtualMachine();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/MonitorInfo.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/MonitorInfo.java
deleted file mode 100644
index cdb0275..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/MonitorInfo.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/MonitorInfo.html
- */
-public interface MonitorInfo extends Mirror {
-	public ObjectReference monitor();
-	public int stackDepth();
-	public ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/NativeMethodException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/NativeMethodException.java
deleted file mode 100644
index e99ab9b..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/NativeMethodException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/NativeMethodException.html
- */
-public class NativeMethodException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public NativeMethodException() {
-	}
-
-	public NativeMethodException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ObjectCollectedException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ObjectCollectedException.java
deleted file mode 100644
index 546f727..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ObjectCollectedException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectCollectedException.html
- */
-public class ObjectCollectedException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ObjectCollectedException() {
-	}
-
-	public ObjectCollectedException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ObjectReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ObjectReference.java
deleted file mode 100644
index 355a9d7..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ObjectReference.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-import java.util.Map;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html
- */
-public interface ObjectReference extends com.sun.jdi.Value {
-	public static final int INVOKE_SINGLE_THREADED = 1;
-	public static final int INVOKE_NONVIRTUAL = 2;
-	public void disableCollection();
-	public void enableCollection();
-	public int entryCount() throws IncompatibleThreadStateException;
-	@Override
-	public boolean equals(Object arg1);
-	public Value getValue(Field arg1);
-	public Map<Field, Value> getValues(List<? extends Field> arg1);
-	@Override
-	public int hashCode();
-	public Value invokeMethod(ThreadReference arg1, Method arg2, List<? extends Value> arg3,	int arg4) throws InvalidTypeException, ClassNotLoadedException,	IncompatibleThreadStateException, InvocationException;
-	public boolean isCollected();
-	public ThreadReference owningThread() throws IncompatibleThreadStateException;
-	public ReferenceType referenceType();
-	public void setValue(Field arg1, Value arg2) throws InvalidTypeException, ClassNotLoadedException;
-	public long uniqueID();
-	public List<ThreadReference> waitingThreads() throws IncompatibleThreadStateException;
-	public List<ObjectReference> referringObjects(long arg1);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PathSearchingVirtualMachine.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PathSearchingVirtualMachine.java
deleted file mode 100644
index 96903bc..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PathSearchingVirtualMachine.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/PathSearchingVirtualMachine.html
- */
-public abstract interface PathSearchingVirtualMachine extends VirtualMachine {
-	public abstract List<String> classPath();
-	public abstract List<String> bootClassPath();
-	public abstract String baseDirectory();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PrimitiveType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PrimitiveType.java
deleted file mode 100644
index 17da974..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PrimitiveType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/PrimitiveType.html
- */
-public interface PrimitiveType extends Type {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PrimitiveValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PrimitiveValue.java
deleted file mode 100644
index f2d15b0..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/PrimitiveValue.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/PrimitiveValue.html
- */
-public interface PrimitiveValue extends Value {
-	public boolean booleanValue();
-	public byte byteValue();
-	public char charValue();
-	public double doubleValue();
-	public float floatValue();
-	public int intValue();
-	public long longValue();
-	public short shortValue();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ReferenceType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ReferenceType.java
deleted file mode 100644
index 303c290..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ReferenceType.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-import java.util.Map;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ReferenceType.html
- */
-public interface ReferenceType extends Type, Comparable<ReferenceType>, Accessible {
-	public List<Field> allFields();
-	public List<Location> allLineLocations() throws AbsentInformationException;
-	public List<Location> allLineLocations(String arg1, String arg2) throws AbsentInformationException;
-	public List<Method> allMethods();
-	public List<String> availableStrata();
-	public ClassLoaderReference classLoader();
-	public ClassObjectReference classObject();
-	public String defaultStratum();
-	@Override
-	public boolean equals(Object arg1);
-	public boolean failedToInitialize();
-	public Field fieldByName(String arg1);
-	public List<Field> fields();
-	public String genericSignature();
-	public Value getValue(Field arg1);
-	public Map<Field, Value> getValues(List<? extends Field> arg1);
-	@Override
-	public int hashCode();
-	public boolean isAbstract();
-	public boolean isFinal();
-	public boolean isInitialized();
-	public boolean isPrepared();
-	public boolean isStatic();
-	public boolean isVerified();
-	public List<Location> locationsOfLine(int arg1) throws AbsentInformationException;
-	public List<Location> locationsOfLine(String arg1, String arg2, int arg3)	throws AbsentInformationException;
-	public List<Method> methods();
-	public List<Method> methodsByName(String arg1);
-	public List<Method> methodsByName(String arg1, String arg2);
-	@Override
-	public String name();
-	public List<ReferenceType> nestedTypes();
-	public String sourceDebugExtension() throws AbsentInformationException;
-	public String sourceName() throws AbsentInformationException;
-	public List<String> sourceNames(String arg1) throws AbsentInformationException;
-	public List<String> sourcePaths(String arg1) throws AbsentInformationException;
-	public List<Field> visibleFields();
-	public List<Method> visibleMethods();
-	public List<ObjectReference> instances(long arg1);
-	public int majorVersion();
-	public int minorVersion();
-	public int constantPoolCount();
-	public byte[] constantPool();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ShortType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ShortType.java
deleted file mode 100644
index c6fb240..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ShortType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ShortType.html
- */
-public interface ShortType extends PrimitiveType {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ShortValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ShortValue.java
deleted file mode 100644
index 4e8553b..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ShortValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ShortValue.html
- */
-public interface ShortValue extends PrimitiveValue, Comparable<ShortValue> {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-	public short value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/StackFrame.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/StackFrame.java
deleted file mode 100644
index fe3eee4..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/StackFrame.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-import java.util.Map;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/StackFrame.html
- */
-public interface StackFrame extends Mirror, Locatable {
-	public Value getValue(LocalVariable arg1);
-	public Map<LocalVariable, Value> getValues(List<? extends LocalVariable> arg1);
-	@Override
-	public Location location();
-	public void setValue(LocalVariable arg1, Value arg2) throws InvalidTypeException, ClassNotLoadedException;
-	public ObjectReference thisObject();
-	public ThreadReference thread();
-	public LocalVariable visibleVariableByName(String arg1) throws AbsentInformationException;
-	public List<LocalVariable> visibleVariables() throws AbsentInformationException;
-	public List<Value> getArgumentValues();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/StringReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/StringReference.java
deleted file mode 100644
index 66c9406..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/StringReference.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/StringReference.html
- */
-public interface StringReference extends ObjectReference {
-	public String value();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ThreadGroupReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ThreadGroupReference.java
deleted file mode 100644
index 143ab4c..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ThreadGroupReference.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ThreadGroupReference.html
- */
-public interface ThreadGroupReference extends ObjectReference {
-	public String name();
-	public ThreadGroupReference parent();
-	public void resume();
-	public void suspend();
-	public List<ThreadGroupReference> threadGroups();
-	public List<ThreadReference> threads();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ThreadReference.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ThreadReference.java
deleted file mode 100644
index 5233c1a..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/ThreadReference.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ThreadReference.html
- */
-public interface ThreadReference extends ObjectReference {
-	public static final int THREAD_STATUS_UNKNOWN = -1;
-	public static final int THREAD_STATUS_ZOMBIE = 0;
-	public static final int THREAD_STATUS_RUNNING = 1;
-	public static final int THREAD_STATUS_SLEEPING = 2;
-	public static final int THREAD_STATUS_MONITOR = 3;
-	public static final int THREAD_STATUS_WAIT = 4;
-	public static final int THREAD_STATUS_NOT_STARTED = 5;
-	public ObjectReference currentContendedMonitor() throws IncompatibleThreadStateException;
-	public StackFrame frame(int arg1) throws IncompatibleThreadStateException;
-	public int frameCount() throws IncompatibleThreadStateException;
-	public List<StackFrame> frames() throws IncompatibleThreadStateException;
-	public List<StackFrame> frames(int arg1, int arg2) throws IncompatibleThreadStateException;
-	public void interrupt();
-	public boolean isAtBreakpoint();
-	public boolean isSuspended();
-	public String name();
-	public List<ObjectReference> ownedMonitors() throws IncompatibleThreadStateException;
-	public void popFrames(StackFrame frame) throws IncompatibleThreadStateException;
-	public void resume();
-	public int status();
-	public void stop(ObjectReference arg1) throws InvalidTypeException;
-	public void suspend();
-	public int suspendCount();
-	public ThreadGroupReference threadGroup();
-	public void forceEarlyReturn(Value arg1) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException;
-	public List<MonitorInfo> ownedMonitorsAndFrames() throws IncompatibleThreadStateException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Type.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Type.java
deleted file mode 100644
index 5a6b2e1..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Type.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Type.html
- */
-public interface Type extends Mirror {
-	public String name();
-	public String signature();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/TypeComponent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/TypeComponent.java
deleted file mode 100644
index 9644155..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/TypeComponent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/TypeComponent.html
- */
-public interface TypeComponent extends Mirror, Accessible {
-	public ReferenceType declaringType();
-	public String genericSignature();
-	public boolean isFinal();
-	public boolean isStatic();
-	public boolean isSynthetic();
-	public String name();
-	public String signature();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMCannotBeModifiedException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMCannotBeModifiedException.java
deleted file mode 100644
index 8b20e53..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMCannotBeModifiedException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VMCannotBeModifiedException.html
- */
-public class VMCannotBeModifiedException extends UnsupportedOperationException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public VMCannotBeModifiedException() {
-	}
-
-	public VMCannotBeModifiedException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMDisconnectedException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMDisconnectedException.java
deleted file mode 100644
index cdb2c45..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMDisconnectedException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VMDisconnectedException.html
- */
-public class VMDisconnectedException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public VMDisconnectedException() {
-	}
-
-	public VMDisconnectedException(java.lang.String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMMismatchException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMMismatchException.java
deleted file mode 100644
index 0c20166..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMMismatchException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VMMismatchException.html
- */
-public class VMMismatchException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public VMMismatchException() {
-	}
-
-	public VMMismatchException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMOutOfMemoryException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMOutOfMemoryException.java
deleted file mode 100644
index a9ce603..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VMOutOfMemoryException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VMOutOfMemoryException.html
- */
-public class VMOutOfMemoryException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public VMOutOfMemoryException() {
-	}
-
-	public VMOutOfMemoryException(String s) {
-		super(s);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Value.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Value.java
deleted file mode 100644
index db53836..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/Value.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/Value.html
- */
-public interface Value extends Mirror {
-	public Type type();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VirtualMachine.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VirtualMachine.java
deleted file mode 100644
index 77a22fd..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VirtualMachine.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.util.List;
-import java.util.Map;
-
-import com.sun.jdi.event.EventQueue;
-import com.sun.jdi.request.EventRequestManager;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VirtualMachine.html
- */
-public interface VirtualMachine extends Mirror {
-	public static final int TRACE_NONE = 0;
-	public static final int TRACE_SENDS = 1;
-	public static final int TRACE_RECEIVES = 2;
-	public static final int TRACE_EVENTS = 4;
-	public static final int TRACE_REFTYPES = 8;
-	public static final int TRACE_OBJREFS = 16;
-	public static final int TRACE_ALL = 16777215;
-	public List<ReferenceType> allClasses();
-	public List<ThreadReference> allThreads();
-	public boolean canAddMethod();
-	public boolean canBeModified();
-	public boolean canGetBytecodes();
-	public boolean canGetCurrentContendedMonitor();
-	public boolean canGetMonitorInfo();
-	public boolean canGetOwnedMonitorInfo();
-	public boolean canGetSourceDebugExtension();
-	public boolean canGetSyntheticAttribute();
-	public boolean canPopFrames();
-	public boolean canRedefineClasses();
-	public boolean canRequestVMDeathEvent();
-	public boolean canUnrestrictedlyRedefineClasses();
-	public boolean canUseInstanceFilters();
-	public boolean canWatchFieldAccess();
-	public boolean canWatchFieldModification();
-	public List<ReferenceType> classesByName(String arg1);
-	public String description();
-	public void dispose();
-	public EventQueue eventQueue();
-	public EventRequestManager eventRequestManager();
-	public void exit(int arg1);
-	public String getDefaultStratum();
-	public BooleanValue mirrorOf(boolean arg1);
-	public ByteValue mirrorOf(byte arg1);
-	public CharValue mirrorOf(char arg1);
-	public DoubleValue mirrorOf(double arg1);
-	public FloatValue mirrorOf(float arg1);
-	public IntegerValue mirrorOf(int arg1);
-	public LongValue mirrorOf(long arg1);
-	public StringReference mirrorOf(String arg1);
-	public ShortValue mirrorOf(short arg1);
-	public String name();
-	public Process process();
-	public void redefineClasses(Map<? extends ReferenceType,byte[]> arg1);
-	public void resume();
-	public void setDebugTraceMode(int arg1);
-	public void setDefaultStratum(String arg1);
-	public void suspend();
-	public List<ThreadGroupReference> topLevelThreadGroups();
-	public String version();
-	public boolean canGetInstanceInfo();
-	public long[] instanceCounts(List<? extends ReferenceType> arg1);
-	public boolean canGetClassFileVersion();
-	public boolean canGetConstantPool();
-	public boolean canUseSourceNameFilters();
-	public boolean canGetMethodReturnValues();
-	public boolean canForceEarlyReturn();
-	public boolean canRequestMonitorEvents();
-	public boolean canGetMonitorFrameInfo();
-	public VoidValue mirrorOfVoid();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VirtualMachineManager.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VirtualMachineManager.java
deleted file mode 100644
index 39b6b14..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VirtualMachineManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-
-import java.io.IOException;
-import java.util.List;
-
-import com.sun.jdi.connect.AttachingConnector;
-import com.sun.jdi.connect.Connector;
-import com.sun.jdi.connect.LaunchingConnector;
-import com.sun.jdi.connect.ListeningConnector;
-import com.sun.jdi.connect.spi.Connection;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VirtualMachineManager.html
- */
-public interface VirtualMachineManager {
-	public List<Connector> allConnectors();
-	public List<AttachingConnector> attachingConnectors();
-	public List<VirtualMachine> connectedVirtualMachines();
-	public VirtualMachine createVirtualMachine(Connection connection) throws IOException;
-	public VirtualMachine createVirtualMachine(Connection connection, Process process) throws IOException;
-	public LaunchingConnector defaultConnector();
-	public List<LaunchingConnector> launchingConnectors();
-	public List<ListeningConnector> listeningConnectors();
-	public int majorInterfaceVersion();
-	public int minorInterfaceVersion();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VoidType.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VoidType.java
deleted file mode 100644
index ca11543..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VoidType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VoidType.html
- */
-public interface VoidType extends Type {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VoidValue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VoidValue.java
deleted file mode 100644
index 4bb78c3..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/VoidValue.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/VoidValue.html
- */
-public interface VoidValue extends Value {
-	@Override
-	public boolean equals(Object arg1);
-	@Override
-	public int hashCode();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/AttachingConnector.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/AttachingConnector.java
deleted file mode 100644
index 5ff816b..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/AttachingConnector.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-
-import java.io.IOException;
-import java.util.Map;
-
-import com.sun.jdi.VirtualMachine;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/AttachingConnector.html
- */
-public interface AttachingConnector extends Connector {
-	public VirtualMachine attach(Map<String,? extends Connector.Argument> arguments) throws IOException, IllegalConnectorArgumentsException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/Connector.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/Connector.java
deleted file mode 100644
index 0e93635..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/Connector.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.html
- */
-public interface Connector {
-	public Map<String, Connector.Argument> defaultArguments();
-	public String description();
-	public String name();
-	public Transport transport();
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.Argument.html
-	 */
-	public interface Argument extends Serializable {
-		public String description();
-		public boolean isValid(String arg1);
-		public String label();
-		public boolean mustSpecify();
-		public String name();
-		public void setValue(String arg1);
-		public String value();
-	}
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.StringArgument.html
-	 */
-	public interface StringArgument extends Connector.Argument {
-		@Override
-		public boolean isValid(String arg1);
-	}
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.IntegerArgument.html
-	 */
-	public interface IntegerArgument extends Connector.Argument {
-		public int intValue();
-		public boolean isValid(int arg1);
-		@Override
-		public boolean isValid(String arg1);
-		public int max();
-		public int min();
-		public void setValue(int arg1);
-		public String stringValueOf(int arg1);
-	}
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.BooleanArgument.html
-	 */
-	public interface BooleanArgument extends Connector.Argument {
-		public boolean booleanValue();
-		@Override
-		public boolean isValid(String arg1);
-		public void setValue(boolean arg1);
-		public String stringValueOf(boolean arg1);
-	}
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.SelectedArgument.html
-	 */
-	public interface SelectedArgument extends Connector.Argument {
-		public List<String> choices();
-		@Override
-		public boolean isValid(String arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/IllegalConnectorArgumentsException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
deleted file mode 100644
index 55399e0..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-
-import java.util.ArrayList;
-import java.util.List;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/IllegalConnectorArgumentsException.html
- */
-public class IllegalConnectorArgumentsException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	List<String> fNames;
-
-	public IllegalConnectorArgumentsException(String message, List<String> argNames) {
-		super(message);
-		fNames = argNames;
-	}
-
-	public IllegalConnectorArgumentsException(String message, String argName) {
-		super(message);
-		fNames = new ArrayList<>(1);
-		fNames.add(argName);
-	}
-
-	public List<String> argumentNames() {
-		return fNames;
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/LaunchingConnector.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/LaunchingConnector.java
deleted file mode 100644
index 6f109b5..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/LaunchingConnector.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-
-import java.io.IOException;
-import java.util.Map;
-
-import com.sun.jdi.VirtualMachine;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/LaunchingConnector.html
- */
-public interface LaunchingConnector extends Connector {
-	public VirtualMachine launch(Map<String,? extends Connector.Argument> arg1) throws IOException, IllegalConnectorArgumentsException, VMStartException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/ListeningConnector.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/ListeningConnector.java
deleted file mode 100644
index 7e8b9c2..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/ListeningConnector.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-
-import java.io.IOException;
-import java.util.Map;
-
-import com.sun.jdi.VirtualMachine;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/ListeningConnector.html
- */
-public interface ListeningConnector extends Connector {
-	public VirtualMachine accept(Map<String,? extends Connector.Argument> arg1) throws IOException, IllegalConnectorArgumentsException;
-	public String startListening(Map<String,? extends Connector.Argument> arg1) throws IOException, IllegalConnectorArgumentsException;
-	public void stopListening(Map<String,? extends Connector.Argument> arg1) throws IOException, IllegalConnectorArgumentsException;
-	public boolean supportsMultipleConnections() throws IOException, IllegalConnectorArgumentsException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/Transport.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/Transport.java
deleted file mode 100644
index 57ce481..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/Transport.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Transport.html
- */
-public interface Transport {
-	public String name();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/TransportTimeoutException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/TransportTimeoutException.java
deleted file mode 100644
index 24e4eec..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/TransportTimeoutException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-
-import java.io.IOException;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/TransportTimeoutException.html
- */
-public class TransportTimeoutException extends IOException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public TransportTimeoutException() {
-	}
-
-	public TransportTimeoutException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/VMStartException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/VMStartException.java
deleted file mode 100644
index bac7629..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/VMStartException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/VMStartException.html
- */
-public class VMStartException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	Process fProcess;
-
-	public VMStartException(Process proc) {
-		fProcess = proc;
-	}
-
-	public VMStartException(String str, Process proc) {
-		super(str);
-		fProcess = proc;
-	}
-
-	public Process process() {
-		return fProcess;
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/package.html b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/package.html
deleted file mode 100644
index 7eb1b81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Eclipse JDI Interfaces</title>
-</head>
-
-<body link="#0000FF" vlink="#800080">
-
-<p align="left">Provides JDI interfaces</p>
-
-<h2 align="left">Package Specification</h2>
-
-<p>This package provides a definition of the JDI class interfaces as specified
-in the JPDA. The specification for these interfaces can be found at
-<a href="http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html">
-http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html</a> </p>
-</body>
-</html>
-
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/ClosedConnectionException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/ClosedConnectionException.java
deleted file mode 100644
index e427e64..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/ClosedConnectionException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect.spi;
-
-import java.io.IOException;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/spi/ClosedConnectionException.html
- */
-public class ClosedConnectionException extends IOException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ClosedConnectionException() {
-	}
-
-	public ClosedConnectionException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/Connection.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/Connection.java
deleted file mode 100644
index 9ce86c5..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/Connection.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect.spi;
-
-import java.io.IOException;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/spi/Connection.html
- */
-public abstract class Connection {
-	public abstract void close() throws IOException;
-
-	public abstract boolean isOpen();
-
-	public abstract byte[] readPacket() throws IOException;
-
-	public abstract void writePacket(byte[] arg1) throws IOException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/TransportService.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/TransportService.java
deleted file mode 100644
index 94f74ba..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/TransportService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.connect.spi;
-
-import java.io.IOException;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/spi/TransportService.html
- */
-public abstract class TransportService {
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/spi/TransportService.Capabilities.html
-	 */
-	public abstract static class Capabilities {
-		public abstract boolean supportsAcceptTimeout();
-
-		public abstract boolean supportsAttachTimeout();
-
-		public abstract boolean supportsHandshakeTimeout();
-
-		public abstract boolean supportsMultipleConnections();
-	}
-	/**
-	 * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/spi/TransportService.ListenKey.html
-	 */
-	public abstract static class ListenKey {
-		public abstract String address();
-	}
-
-	public abstract Connection accept(ListenKey listenKey, long attachTimeout,
-			long handshakeTimeout) throws IOException;
-
-	public abstract Connection attach(String address, long attachTimeout,
-			long handshakeTimeout) throws IOException;
-
-	public abstract TransportService.Capabilities capabilities();
-
-	public abstract String description();
-
-	public abstract String name();
-
-	public abstract TransportService.ListenKey startListening()
-			throws IOException;
-
-	public abstract TransportService.ListenKey startListening(String arg1)
-			throws IOException;
-
-	public abstract void stopListening(TransportService.ListenKey arg1)
-			throws IOException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/package.html b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/package.html
deleted file mode 100644
index 7eb1b81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/connect/spi/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Eclipse JDI Interfaces</title>
-</head>
-
-<body link="#0000FF" vlink="#800080">
-
-<p align="left">Provides JDI interfaces</p>
-
-<h2 align="left">Package Specification</h2>
-
-<p>This package provides a definition of the JDI class interfaces as specified
-in the JPDA. The specification for these interfaces can be found at
-<a href="http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html">
-http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html</a> </p>
-</body>
-</html>
-
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/AccessWatchpointEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/AccessWatchpointEvent.java
deleted file mode 100644
index c562101..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/AccessWatchpointEvent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/AccessWatchpointEvent.html
- */
-public interface AccessWatchpointEvent extends WatchpointEvent {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/BreakpointEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/BreakpointEvent.java
deleted file mode 100644
index c8cdb2a..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/BreakpointEvent.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/BreakpointEvent.html
- */
-public interface BreakpointEvent extends LocatableEvent {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ClassPrepareEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ClassPrepareEvent.java
deleted file mode 100644
index 483c933..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ClassPrepareEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/ClassPrepareEvent.html
- */
-public interface ClassPrepareEvent extends Event {
-	public ReferenceType referenceType();
-	public ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ClassUnloadEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ClassUnloadEvent.java
deleted file mode 100644
index 3a2f574..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ClassUnloadEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/ClassUnloadEvent.html
- */
-public interface ClassUnloadEvent extends Event {
-	public String className();
-	public String classSignature();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/Event.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/Event.java
deleted file mode 100644
index 331a8b3..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/Event.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Mirror;
-import com.sun.jdi.request.EventRequest;
-
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/Event.html
- */
-public interface Event extends Mirror {
-	public EventRequest request();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventIterator.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventIterator.java
deleted file mode 100644
index 0d7f03b..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventIterator.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import java.util.Iterator;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/EventIterator.html
- */
-public interface EventIterator extends Iterator<Event> {
-	public Event nextEvent();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventQueue.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventQueue.java
deleted file mode 100644
index b3a03f9..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventQueue.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Mirror;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/EventQueue.html
- */
-public interface EventQueue extends Mirror {
-	public EventSet remove() throws InterruptedException;
-	public EventSet remove(long arg1) throws InterruptedException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventSet.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventSet.java
deleted file mode 100644
index 93d943f..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/EventSet.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import java.util.Set;
-
-import com.sun.jdi.Mirror;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/EventSet.html
- */
-public interface EventSet extends Mirror, Set<Event> {
-	public EventIterator eventIterator();
-	public void resume();
-	public int suspendPolicy();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ExceptionEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ExceptionEvent.java
deleted file mode 100644
index 1762c28..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ExceptionEvent.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Location;
-import com.sun.jdi.ObjectReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/ExceptionEvent.html
- */
-public interface ExceptionEvent extends LocatableEvent {
-	public Location catchLocation();
-	public ObjectReference exception();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/LocatableEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/LocatableEvent.java
deleted file mode 100644
index 6ea81d9..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/LocatableEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Locatable;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/LocatableEvent.html
- */
-public abstract interface LocatableEvent extends Event, Locatable {
-	public abstract ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MethodEntryEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MethodEntryEvent.java
deleted file mode 100644
index f0ff11d..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MethodEntryEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Method;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/MethodEntryEvent.html
- */
-public interface MethodEntryEvent extends LocatableEvent {
-	public Method method();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MethodExitEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MethodExitEvent.java
deleted file mode 100644
index d25631d..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MethodExitEvent.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Method;
-import com.sun.jdi.Value;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/MethodExitEvent.html
- */
-public interface MethodExitEvent extends LocatableEvent {
-	public Method method();
-	public Value returnValue();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ModificationWatchpointEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ModificationWatchpointEvent.java
deleted file mode 100644
index 2a1438a..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ModificationWatchpointEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Value;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/ModificationWatchpointEvent.html
- */
-public interface ModificationWatchpointEvent extends WatchpointEvent {
-	public Value valueToBe();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorContendedEnterEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorContendedEnterEvent.java
deleted file mode 100644
index ac66070..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorContendedEnterEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/MonitorContendedEnterEvent.html
- */
-public interface MonitorContendedEnterEvent extends LocatableEvent {
-	@Override
-	public ThreadReference thread();
-	public ObjectReference monitor();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorContendedEnteredEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorContendedEnteredEvent.java
deleted file mode 100644
index 226879e..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorContendedEnteredEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/MonitorContendedEnteredEvent.html
- */
-public interface MonitorContendedEnteredEvent extends LocatableEvent {
-	@Override
-	public ThreadReference thread();
-	public ObjectReference monitor();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorWaitEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorWaitEvent.java
deleted file mode 100644
index 46774d0..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorWaitEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/MonitorWaitEvent.html
- */
-public interface MonitorWaitEvent extends LocatableEvent {
-	@Override
-	public ThreadReference thread();
-	public ObjectReference monitor();
-	public long timeout();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorWaitedEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorWaitedEvent.java
deleted file mode 100644
index 276f4fc..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/MonitorWaitedEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/MonitorWaitedEvent.html
- */
-public interface MonitorWaitedEvent extends LocatableEvent {
-	@Override
-	public ThreadReference thread();
-	public ObjectReference monitor();
-	public boolean timedout();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/StepEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/StepEvent.java
deleted file mode 100644
index 1788314..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/StepEvent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/StepEvent.html
- */
-public interface StepEvent extends LocatableEvent {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ThreadDeathEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ThreadDeathEvent.java
deleted file mode 100644
index 7a5a29a..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ThreadDeathEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/ThreadDeathEvent.html
- */
-public interface ThreadDeathEvent extends Event {
-	public ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ThreadStartEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ThreadStartEvent.java
deleted file mode 100644
index ed34f0e..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/ThreadStartEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/ThreadStartEvent.html
- */
-public interface ThreadStartEvent extends Event {
-	public ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMDeathEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMDeathEvent.java
deleted file mode 100644
index 550638a..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMDeathEvent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/VMDeathEvent.html
- */
-public interface VMDeathEvent extends Event {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMDisconnectEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMDisconnectEvent.java
deleted file mode 100644
index 008ea59..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMDisconnectEvent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/VMDisconnectEvent.html
- */
-public interface VMDisconnectEvent extends Event {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMStartEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMStartEvent.java
deleted file mode 100644
index 7718f47..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/VMStartEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/VMStartEvent.html
- */
-public interface VMStartEvent extends Event {
-	public ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/WatchpointEvent.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/WatchpointEvent.java
deleted file mode 100644
index e7636a2..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/WatchpointEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.event;
-
-import com.sun.jdi.Field;
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.Value;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/event/WatchpointEvent.html
- */
-public interface WatchpointEvent extends LocatableEvent {
-	public Field field();
-	public ObjectReference object();
-	public Value valueCurrent();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/package.html b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/package.html
deleted file mode 100644
index 7eb1b81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/event/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Eclipse JDI Interfaces</title>
-</head>
-
-<body link="#0000FF" vlink="#800080">
-
-<p align="left">Provides JDI interfaces</p>
-
-<h2 align="left">Package Specification</h2>
-
-<p>This package provides a definition of the JDI class interfaces as specified
-in the JPDA. The specification for these interfaces can be found at
-<a href="http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html">
-http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html</a> </p>
-</body>
-</html>
-
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/package.html b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/package.html
deleted file mode 100644
index 7eb1b81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Eclipse JDI Interfaces</title>
-</head>
-
-<body link="#0000FF" vlink="#800080">
-
-<p align="left">Provides JDI interfaces</p>
-
-<h2 align="left">Package Specification</h2>
-
-<p>This package provides a definition of the JDI class interfaces as specified
-in the JPDA. The specification for these interfaces can be found at
-<a href="http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html">
-http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html</a> </p>
-</body>
-</html>
-
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/AccessWatchpointRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/AccessWatchpointRequest.java
deleted file mode 100644
index 8629084..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/AccessWatchpointRequest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/AccessWatchpointRequest.html
- */
-public interface AccessWatchpointRequest extends WatchpointRequest {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/BreakpointRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/BreakpointRequest.java
deleted file mode 100644
index 687ee94..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/BreakpointRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.Locatable;
-import com.sun.jdi.Location;
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/BreakpointRequest.html
- */
-public interface BreakpointRequest extends EventRequest, Locatable {
-	public void addThreadFilter(ThreadReference arg1);
-	public void addInstanceFilter(ObjectReference instance);
-	@Override
-	public Location location();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ClassPrepareRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ClassPrepareRequest.java
deleted file mode 100644
index 93a92b1..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ClassPrepareRequest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ReferenceType;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/ClassPrepareRequest.html
- */
-public interface ClassPrepareRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(ReferenceType arg1);
-	public void addClassFilter(String arg1);
-	void addSourceNameFilter(String arg1);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ClassUnloadRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ClassUnloadRequest.java
deleted file mode 100644
index b36a667..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ClassUnloadRequest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/ClassUnloadRequest.html
- */
-public interface ClassUnloadRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(String arg1);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/DuplicateRequestException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/DuplicateRequestException.java
deleted file mode 100644
index 97c8c70..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/DuplicateRequestException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/DuplicateRequestException.html
- */
-public class DuplicateRequestException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public DuplicateRequestException() {
-	}
-
-	public DuplicateRequestException(String message) {
-		super(message);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/EventRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/EventRequest.java
deleted file mode 100644
index c303cbd..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/EventRequest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.Mirror;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/EventRequest.html
- */
-public interface EventRequest extends Mirror {
-	public static final int SUSPEND_NONE = 0;
-	public static final int SUSPEND_EVENT_THREAD = 1;
-	public static final int SUSPEND_ALL = 2;
-
-	public void addCountFilter(int arg1) throws InvalidRequestStateException;
-
-	public void disable();
-
-	public void enable();
-
-	public Object getProperty(Object key);
-
-	public boolean isEnabled();
-
-	public void putProperty(Object key, Object value);
-
-	public void setEnabled(boolean arg1);
-
-	public void setSuspendPolicy(int arg1);
-
-	public int suspendPolicy();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/EventRequestManager.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/EventRequestManager.java
deleted file mode 100644
index fd4b202..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/EventRequestManager.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import java.util.List;
-
-import com.sun.jdi.Field;
-import com.sun.jdi.Location;
-import com.sun.jdi.Mirror;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/EventRequestManager.html
- */
-public interface EventRequestManager extends Mirror {
-	public List<AccessWatchpointRequest> accessWatchpointRequests();
-	public List<BreakpointRequest> breakpointRequests();
-	public List<ClassPrepareRequest> classPrepareRequests();
-	public List<ClassUnloadRequest> classUnloadRequests();
-	public AccessWatchpointRequest createAccessWatchpointRequest(Field arg1);
-	public BreakpointRequest createBreakpointRequest(Location arg1);
-	public ClassPrepareRequest createClassPrepareRequest();
-	public ClassUnloadRequest createClassUnloadRequest();
-	public ExceptionRequest createExceptionRequest(ReferenceType arg1, boolean arg2, boolean arg3);
-	public MethodEntryRequest createMethodEntryRequest();
-	public MethodExitRequest createMethodExitRequest();
-	public MonitorContendedEnteredRequest createMonitorContendedEnteredRequest();
-	public MonitorContendedEnterRequest createMonitorContendedEnterRequest();
-	public MonitorWaitedRequest createMonitorWaitedRequest();
-	public MonitorWaitRequest createMonitorWaitRequest();
-	public ModificationWatchpointRequest createModificationWatchpointRequest(Field arg1);
-	public StepRequest createStepRequest(ThreadReference arg1, int arg2, int arg3);
-	public ThreadDeathRequest createThreadDeathRequest();
-	public ThreadStartRequest createThreadStartRequest();
-	public VMDeathRequest createVMDeathRequest();
-	public void deleteAllBreakpoints();
-	public void deleteEventRequest(EventRequest arg1);
-	public void deleteEventRequests(List<? extends EventRequest> arg1);
-	public List<ExceptionRequest> exceptionRequests();
-	public List<MethodEntryRequest> methodEntryRequests();
-	public List<MethodExitRequest> methodExitRequests();
-	public List<ModificationWatchpointRequest> modificationWatchpointRequests();
-	public List<StepRequest> stepRequests();
-	public List<ThreadDeathRequest> threadDeathRequests();
-	public List<ThreadStartRequest> threadStartRequests();
-	public List<VMDeathRequest> vmDeathRequests();
-	public List<MonitorContendedEnterRequest> monitorContendedEnterRequests();
-	public List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests();
-	public List<MonitorWaitRequest> monitorWaitRequests();
-	public List<MonitorWaitedRequest> monitorWaitedRequests();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ExceptionRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ExceptionRequest.java
deleted file mode 100644
index d4854fe..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ExceptionRequest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/ExceptionRequest.html
- */
-public interface ExceptionRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(ReferenceType arg1);
-	public void addClassFilter(String arg1);
-	public void addInstanceFilter(ObjectReference instance);
-	public void addThreadFilter(ThreadReference arg1);
-	public ReferenceType exception();
-	public boolean notifyCaught();
-	public boolean notifyUncaught();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/InvalidRequestStateException.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/InvalidRequestStateException.java
deleted file mode 100644
index 258f3bb..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/InvalidRequestStateException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/InvalidRequestStateException.html
- */
-public class InvalidRequestStateException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public InvalidRequestStateException() {
-	}
-
-	public InvalidRequestStateException(String arg1) {
-		super(arg1);
-	}
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MethodEntryRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MethodEntryRequest.java
deleted file mode 100644
index 7607e66..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MethodEntryRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/MethodEntryRequest.html
- */
-public interface MethodEntryRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(ReferenceType arg1);
-	public void addClassFilter(String arg1);
-	public void addThreadFilter(ThreadReference arg1);
-	public void addInstanceFilter(ObjectReference instance);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MethodExitRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MethodExitRequest.java
deleted file mode 100644
index eaf6ded..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MethodExitRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/MethodExitRequest.html
- */
-public interface MethodExitRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(ReferenceType arg1);
-	public void addClassFilter(String arg1);
-	public void addThreadFilter(ThreadReference arg1);
-	public void addInstanceFilter(ObjectReference instance);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ModificationWatchpointRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ModificationWatchpointRequest.java
deleted file mode 100644
index 177849d..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ModificationWatchpointRequest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/ModificationWatchpointRequest.html
- */
-public interface ModificationWatchpointRequest extends WatchpointRequest {
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorContendedEnterRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorContendedEnterRequest.java
deleted file mode 100644
index 6d09cb9..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorContendedEnterRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/MonitorContendedEnterRequest.html
- */
-public interface MonitorContendedEnterRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1) throws InvalidRequestStateException;
-	public void addClassFilter(ReferenceType arg1) throws InvalidRequestStateException;
-	public void addClassFilter(String arg1) throws InvalidRequestStateException;
-	public void addInstanceFilter(ObjectReference arg1) throws InvalidRequestStateException;
-	public void addThreadFilter(ThreadReference arg1) throws InvalidRequestStateException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorContendedEnteredRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorContendedEnteredRequest.java
deleted file mode 100644
index 0162cf0..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorContendedEnteredRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/MonitorContendedEnteredRequest.html
- */
-public interface MonitorContendedEnteredRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1) throws InvalidRequestStateException;
-	public void addClassFilter(ReferenceType arg1) throws InvalidRequestStateException;
-	public void addClassFilter(String arg1) throws InvalidRequestStateException;
-	public void addInstanceFilter(ObjectReference arg1) throws InvalidRequestStateException;
-	public void addThreadFilter(ThreadReference arg1) throws InvalidRequestStateException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorWaitRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorWaitRequest.java
deleted file mode 100644
index c8a0d1f..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorWaitRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/MonitorWaitRequest.html
- */
-public interface MonitorWaitRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1) throws InvalidRequestStateException;
-	public void addClassFilter(ReferenceType arg1) throws InvalidRequestStateException;
-	public void addClassFilter(String arg1) throws InvalidRequestStateException;
-	public void addInstanceFilter(ObjectReference arg1) throws InvalidRequestStateException;
-	public void addThreadFilter(ThreadReference arg1) throws InvalidRequestStateException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorWaitedRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorWaitedRequest.java
deleted file mode 100644
index 57d9d7e..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/MonitorWaitedRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/MonitorWaitedRequest.html
- */
-public interface MonitorWaitedRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1) throws InvalidRequestStateException;
-	public void addClassFilter(ReferenceType arg1) throws InvalidRequestStateException;
-	public void addClassFilter(String arg1) throws InvalidRequestStateException;
-	public void addInstanceFilter(ObjectReference arg1) throws InvalidRequestStateException;
-	public void addThreadFilter(ThreadReference arg1) throws InvalidRequestStateException;
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/StepRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/StepRequest.java
deleted file mode 100644
index 5147434..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/StepRequest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/StepRequest.html
- */
-public interface StepRequest extends EventRequest {
-	public static final int STEP_INTO = 1;
-	public static final int STEP_OVER = 2;
-	public static final int STEP_OUT = 3;
-	public static final int STEP_MIN = -1;
-	public static final int STEP_LINE = -2;
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(ReferenceType arg1);
-	public void addClassFilter(String arg1);
-	public void addInstanceFilter(ObjectReference instance);
-	public int depth();
-	public int size();
-	public ThreadReference thread();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ThreadDeathRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ThreadDeathRequest.java
deleted file mode 100644
index 6d26638..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ThreadDeathRequest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/ThreadDeathRequest.html
- */
-public interface ThreadDeathRequest extends EventRequest {
-	public void addThreadFilter(ThreadReference arg1);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ThreadStartRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ThreadStartRequest.java
deleted file mode 100644
index ce9284f..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/ThreadStartRequest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/ThreadStartRequest.html
- */
-public interface ThreadStartRequest extends EventRequest {
-	public void addThreadFilter(ThreadReference arg1);
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/VMDeathRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/VMDeathRequest.java
deleted file mode 100644
index 3b5df43..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/VMDeathRequest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/VMDeathRequest.html
- */
-public interface VMDeathRequest extends EventRequest {
-
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/WatchpointRequest.java b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/WatchpointRequest.java
deleted file mode 100644
index 12b4c18..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/WatchpointRequest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package com.sun.jdi.request;
-
-import com.sun.jdi.Field;
-import com.sun.jdi.ObjectReference;
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.ThreadReference;
-/**
- * See http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/request/WatchpointRequest.html
- */
-public interface WatchpointRequest extends EventRequest {
-	public void addClassExclusionFilter(String arg1);
-	public void addClassFilter(ReferenceType arg1);
-	public void addClassFilter(String arg1);
-	public void addInstanceFilter(ObjectReference instance);
-	public void addThreadFilter(ThreadReference arg1);
-	public Field field();
-}
diff --git a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/package.html b/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/package.html
deleted file mode 100644
index 7eb1b81..0000000
--- a/org.eclipse.jdt.debug/jdi interfaces/com/sun/jdi/request/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Eclipse JDI Interfaces</title>
-</head>
-
-<body link="#0000FF" vlink="#800080">
-
-<p align="left">Provides JDI interfaces</p>
-
-<h2 align="left">Package Specification</h2>
-
-<p>This package provides a definition of the JDI class interfaces as specified
-in the JPDA. The specification for these interfaces can be found at
-<a href="http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html">
-http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/index.html</a> </p>
-</body>
-</html>
-
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/LocationImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/LocationImpl.java
index 5885ae4..222d070 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/LocationImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/LocationImpl.java
@@ -20,7 +20,6 @@
 import org.eclipse.osgi.util.NLS;
 
 import com.sun.jdi.AbsentInformationException;
-import com.sun.jdi.Locatable;
 import com.sun.jdi.Location;
 import com.sun.jdi.Method;
 import com.sun.jdi.ReferenceType;
@@ -93,7 +92,7 @@
 	 * @see java.lang.Comparable#compareTo(java.lang.Object)
 	 */
 	@Override
-	public int compareTo(Locatable locatable) {
+	public int compareTo(Location locatable) {
 		if (locatable == null || !locatable.getClass().equals(this.getClass())) {
 			throw new ClassCastException(
 					JDIMessages.LocationImpl_Can__t_compare_location_to_given_object_1);
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 97aadd6..a5fc75d 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
@@ -21,7 +21,6 @@
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.InstanceScope;
@@ -228,13 +227,8 @@
 			final boolean allowTerminate, final boolean allowDisconnect,
 			final boolean resume) {
 		final IJavaDebugTarget[] target = new IJavaDebugTarget[1];
-		IWorkspaceRunnable r = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor m) {
-				target[0] = new JDIDebugTarget(launch, vm, name,
-						allowTerminate, allowDisconnect, process, resume);
-			}
-		};
+		IWorkspaceRunnable r = m -> target[0] = new JDIDebugTarget(launch, vm, name,
+				allowTerminate, allowDisconnect, process, resume);
 		try {
 			ResourcesPlugin.getWorkspace().run(r, null, 0, null);
 		} catch (CoreException e) {
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaClassPrepareBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaClassPrepareBreakpoint.java
index 2fad0c3..d5c66ee 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaClassPrepareBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaClassPrepareBreakpoint.java
@@ -20,7 +20,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugException;
@@ -91,27 +90,22 @@
 			final String typeName, final int memberType, final int charStart,
 			final int charEnd, final boolean add, final Map<String, Object> attributes)
 			throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
+		IWorkspaceRunnable wr = monitor -> {
+			// create the marker
+			setMarker(resource.createMarker(JAVA_CLASS_PREPARE_BREAKPOINT));
 
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				// create the marker
-				setMarker(resource.createMarker(JAVA_CLASS_PREPARE_BREAKPOINT));
+			// add attributes
+			attributes.put(IBreakpoint.ID, getModelIdentifier());
+			attributes.put(IMarker.CHAR_START, Integer.valueOf(charStart));
+			attributes.put(IMarker.CHAR_END, Integer.valueOf(charEnd));
+			attributes.put(TYPE_NAME, typeName);
+			attributes.put(MEMBER_TYPE, Integer.valueOf(memberType));
+			attributes.put(ENABLED, Boolean.TRUE);
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
 
-				// add attributes
-				attributes.put(IBreakpoint.ID, getModelIdentifier());
-				attributes.put(IMarker.CHAR_START, Integer.valueOf(charStart));
-				attributes.put(IMarker.CHAR_END, Integer.valueOf(charEnd));
-				attributes.put(TYPE_NAME, typeName);
-				attributes.put(MEMBER_TYPE, Integer.valueOf(memberType));
-				attributes.put(ENABLED, Boolean.TRUE);
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			ensureMarker().setAttributes(attributes);
 
-				ensureMarker().setAttributes(attributes);
-
-				register(add);
-			}
-
+			register(add);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaExceptionBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaExceptionBreakpoint.java
index 3dca9ae..cfc639d 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaExceptionBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaExceptionBreakpoint.java
@@ -24,7 +24,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
@@ -169,27 +168,22 @@
 			final String exceptionName, final boolean caught,
 			final boolean uncaught, final boolean checked, final boolean add,
 			final Map<String, Object> attributes) throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
+		IWorkspaceRunnable wr = monitor -> {
+			// create the marker
+			setMarker(resource.createMarker(JAVA_EXCEPTION_BREAKPOINT));
 
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				// create the marker
-				setMarker(resource.createMarker(JAVA_EXCEPTION_BREAKPOINT));
+			// add attributes
+			attributes.put(IBreakpoint.ID, getModelIdentifier());
+			attributes.put(TYPE_NAME, exceptionName);
+			attributes.put(ENABLED, Boolean.TRUE);
+			attributes.put(CAUGHT, Boolean.valueOf(caught));
+			attributes.put(UNCAUGHT, Boolean.valueOf(uncaught));
+			attributes.put(CHECKED, Boolean.valueOf(checked));
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
 
-				// add attributes
-				attributes.put(IBreakpoint.ID, getModelIdentifier());
-				attributes.put(TYPE_NAME, exceptionName);
-				attributes.put(ENABLED, Boolean.TRUE);
-				attributes.put(CAUGHT, Boolean.valueOf(caught));
-				attributes.put(UNCAUGHT, Boolean.valueOf(uncaught));
-				attributes.put(CHECKED, Boolean.valueOf(checked));
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			ensureMarker().setAttributes(attributes);
 
-				ensureMarker().setAttributes(attributes);
-
-				register(add);
-			}
-
+			register(add);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java
index 35d98aa..782809c 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java
@@ -27,7 +27,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugException;
@@ -144,24 +143,21 @@
 			final int charEnd, final int hitCount, final boolean add,
 			final Map<String, Object> attributes, final String markerType)
 			throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
+		IWorkspaceRunnable wr = monitor -> {
 
-				// create the marker
-				setMarker(resource.createMarker(markerType));
+			// create the marker
+			setMarker(resource.createMarker(markerType));
 
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addTypeNameAndHitCount(attributes, typeName, hitCount);
-				// set attributes
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				ensureMarker().setAttributes(attributes);
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addTypeNameAndHitCount(attributes, typeName, hitCount);
+			// set attributes
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			ensureMarker().setAttributes(attributes);
 
-				// add to breakpoint manager if requested
-				register(add);
-			}
+			// add to breakpoint manager if requested
+			register(add);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodBreakpoint.java
index b2c7fdd..c8ac555 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodBreakpoint.java
@@ -22,7 +22,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.model.IDebugTarget;
@@ -147,27 +146,23 @@
 			final boolean exit, final boolean nativeOnly, final int lineNumber,
 			final int charStart, final int charEnd, final int hitCount,
 			final boolean register, final Map<String, Object> attributes) throws CoreException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				// create the marker
-				setMarker(resource.createMarker(JAVA_METHOD_BREAKPOINT));
+		IWorkspaceRunnable wr = monitor -> {
+			// create the marker
+			setMarker(resource.createMarker(JAVA_METHOD_BREAKPOINT));
 
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addMethodNameAndSignature(attributes, methodName,
-						methodSignature);
-				addTypeNameAndHitCount(attributes, typePattern, hitCount);
-				attributes.put(ENTRY, Boolean.valueOf(entry));
-				attributes.put(EXIT, Boolean.valueOf(exit));
-				attributes.put(NATIVE, Boolean.valueOf(nativeOnly));
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				// set attributes
-				ensureMarker().setAttributes(attributes);
-				register(register);
-			}
-
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addMethodNameAndSignature(attributes, methodName,
+					methodSignature);
+			addTypeNameAndHitCount(attributes, typePattern, hitCount);
+			attributes.put(ENTRY, Boolean.valueOf(entry));
+			attributes.put(EXIT, Boolean.valueOf(exit));
+			attributes.put(NATIVE, Boolean.valueOf(nativeOnly));
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			// set attributes
+			ensureMarker().setAttributes(attributes);
+			register(register);
 		};
 		run(getMarkerRule(resource), wr);
 		if (typePattern != null) {
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodEntryBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodEntryBreakpoint.java
index ffaf758..c1e4760 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodEntryBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaMethodEntryBreakpoint.java
@@ -19,7 +19,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
 import org.eclipse.jdt.debug.core.IJavaMethodEntryBreakpoint;
@@ -77,25 +76,21 @@
 			final String methodSignature, final int lineNumber,
 			final int charStart, final int charEnd, final int hitCount,
 			final boolean register, final Map<String, Object> attributes) throws CoreException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				// create the marker
-				setMarker(resource.createMarker(JAVA_METHOD_ENTRY_BREAKPOINT));
+		IWorkspaceRunnable wr = monitor -> {
+			// create the marker
+			setMarker(resource.createMarker(JAVA_METHOD_ENTRY_BREAKPOINT));
 
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addMethodNameAndSignature(attributes, methodName,
-						methodSignature);
-				addTypeNameAndHitCount(attributes, typeName, hitCount);
-				// set attributes
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				ensureMarker().setAttributes(attributes);
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addMethodNameAndSignature(attributes, methodName,
+					methodSignature);
+			addTypeNameAndHitCount(attributes, typeName, hitCount);
+			// set attributes
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			ensureMarker().setAttributes(attributes);
 
-				register(register);
-			}
-
+			register(register);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaPatternBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaPatternBreakpoint.java
index 8e711b3..077c4d5 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaPatternBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaPatternBreakpoint.java
@@ -21,7 +21,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.jdt.debug.core.IJavaPatternBreakpoint;
 import org.eclipse.jdt.debug.core.JDIDebugModel;
@@ -66,23 +65,20 @@
 			final int lineNumber, final int charStart, final int charEnd,
 			final int hitCount, final boolean add, final Map<String, Object> attributes,
 			final String markerType) throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
+		IWorkspaceRunnable wr = monitor -> {
 
-				// create the marker
-				setMarker(resource.createMarker(markerType));
+			// create the marker
+			setMarker(resource.createMarker(markerType));
 
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addPatternAndHitCount(attributes, sourceName, pattern, hitCount);
-				// set attributes
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				ensureMarker().setAttributes(attributes);
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addPatternAndHitCount(attributes, sourceName, pattern, hitCount);
+			// set attributes
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			ensureMarker().setAttributes(attributes);
 
-				register(add);
-			}
+			register(add);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaStratumLineBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaStratumLineBreakpoint.java
index 20137de..de63d19 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaStratumLineBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaStratumLineBreakpoint.java
@@ -20,7 +20,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugException;
@@ -141,30 +140,27 @@
 			final int lineNumber, final int charStart, final int charEnd,
 			final int hitCount, final boolean register, final Map<String, Object> attributes,
 			final String markerType) throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
+		IWorkspaceRunnable wr = monitor -> {
 
-				// create the marker
-				setMarker(resource.createMarker(markerType));
+			// create the marker
+			setMarker(resource.createMarker(markerType));
 
-				// modify pattern
-				String pattern = classNamePattern;
-				if (pattern != null && pattern.length() == 0) {
-					pattern = null;
-				}
-
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addStratumPatternAndHitCount(attributes, stratum, sourceName,
-						sourcePath, pattern, hitCount);
-				// set attributes
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				ensureMarker().setAttributes(attributes);
-
-				register(register);
+			// modify pattern
+			String pattern = classNamePattern;
+			if (pattern != null && pattern.length() == 0) {
+				pattern = null;
 			}
+
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addStratumPatternAndHitCount(attributes, stratum, sourceName,
+					sourcePath, pattern, hitCount);
+			// set attributes
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			ensureMarker().setAttributes(attributes);
+
+			register(register);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaTargetPatternBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaTargetPatternBreakpoint.java
index d0c0944..fea4972 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaTargetPatternBreakpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaTargetPatternBreakpoint.java
@@ -21,7 +21,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.jdt.debug.core.IJavaDebugTarget;
 import org.eclipse.jdt.debug.core.IJavaTargetPatternBreakpoint;
@@ -63,23 +62,20 @@
 			final int charEnd, final int hitCount, final boolean add,
 			final Map<String, Object> attributes, final String markerType)
 			throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
+		IWorkspaceRunnable wr = monitor -> {
 
-				// create the marker
-				setMarker(resource.createMarker(markerType));
+			// create the marker
+			setMarker(resource.createMarker(markerType));
 
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addSourceNameAndHitCount(attributes, sourceName, hitCount);
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				// set attributes
-				ensureMarker().setAttributes(attributes);
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addSourceNameAndHitCount(attributes, sourceName, hitCount);
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			// set attributes
+			ensureMarker().setAttributes(attributes);
 
-				register(add);
-			}
+			register(add);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaWatchpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaWatchpoint.java
index f84253a..24433a9 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaWatchpoint.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaWatchpoint.java
@@ -19,7 +19,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
@@ -111,26 +110,23 @@
 			final String fieldName, final int lineNumber, final int charStart,
 			final int charEnd, final int hitCount, final boolean add,
 			final Map<String, Object> attributes) throws DebugException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				setMarker(resource.createMarker(JAVA_WATCHPOINT));
+		IWorkspaceRunnable wr = monitor -> {
+			setMarker(resource.createMarker(JAVA_WATCHPOINT));
 
-				// add attributes
-				addLineBreakpointAttributes(attributes, getModelIdentifier(),
-						true, lineNumber, charStart, charEnd);
-				addTypeNameAndHitCount(attributes, typeName, hitCount);
-				attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
-				// configure the field handle
-				addFieldName(attributes, fieldName);
-				// configure the access and modification flags to defaults
-				addDefaultAccessAndModification(attributes);
+			// add attributes
+			addLineBreakpointAttributes(attributes, getModelIdentifier(),
+					true, lineNumber, charStart, charEnd);
+			addTypeNameAndHitCount(attributes, typeName, hitCount);
+			attributes.put(SUSPEND_POLICY, Integer.valueOf(getDefaultSuspendPolicy()));
+			// configure the field handle
+			addFieldName(attributes, fieldName);
+			// configure the access and modification flags to defaults
+			addDefaultAccessAndModification(attributes);
 
-				// set attributes
-				ensureMarker().setAttributes(attributes);
+			// set attributes
+			ensureMarker().setAttributes(attributes);
 
-				register(add);
-			}
+			register(add);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
index 76a4d13..4fa9a29 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
@@ -314,22 +314,12 @@
 		final List<JDIDebugTarget> hotSwapTargets = getHotSwapTargets();
 		final List<JDIDebugTarget> noHotSwapTargets = getNoHotSwapTargets();
 		if (!hotSwapTargets.isEmpty()) {
-			Runnable runnable = new Runnable() {
-				@Override
-				public void run() {
-					doHotCodeReplace(hotSwapTargets, resources, qualifiedNames);
-				}
-			};
+			Runnable runnable = () -> doHotCodeReplace(hotSwapTargets, resources, qualifiedNames);
 			DebugPlugin.getDefault().asyncExec(runnable);
 		}
 		if (!noHotSwapTargets.isEmpty()) {
-			Runnable runnable = new Runnable() {
-				@Override
-				public void run() {
-					notifyUnsupportedHCR(noHotSwapTargets, resources,
-							qualifiedNames);
-				}
-			};
+			Runnable runnable = () -> notifyUnsupportedHCR(noHotSwapTargets, resources,
+					qualifiedNames);
 			DebugPlugin.getDefault().asyncExec(runnable);
 		}
 	}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java
index 3ac7c71..d6c0016 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java
@@ -556,18 +556,15 @@
 		fireCreationEvent();
 		// begin handling/dispatching events after the creation event is handled
 		// by all listeners
-		plugin.asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				EventDispatcher dispatcher = getEventDispatcher();
-				if (dispatcher != null) {
-					Thread t = new Thread(
-							dispatcher,
-							JDIDebugModel.getPluginIdentifier()
-									+ JDIDebugModelMessages.JDIDebugTarget_JDI_Event_Dispatcher);
-					t.setDaemon(true);
-					t.start();
-				}
+		plugin.asyncExec(() -> {
+			EventDispatcher dispatcher = getEventDispatcher();
+			if (dispatcher != null) {
+				Thread t = new Thread(
+						dispatcher,
+						JDIDebugModel.getPluginIdentifier()
+								+ JDIDebugModelMessages.JDIDebugTarget_JDI_Event_Dispatcher);
+				t.setDaemon(true);
+				t.start();
 			}
 		});
 	}
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 4c51147..7dff265 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
@@ -17,7 +17,6 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
@@ -352,19 +351,16 @@
 							}
 						}
 						Collections.sort(fVariables,
-								new Comparator<IJavaVariable>() {
-									@Override
-									public int compare(IJavaVariable a, IJavaVariable b) {
-										JDIFieldVariable v1 = (JDIFieldVariable) a;
-										JDIFieldVariable v2 = (JDIFieldVariable) b;
-										try {
-											return v1.getName()
-													.compareToIgnoreCase(
-															v2.getName());
-										} catch (DebugException de) {
-											logError(de);
-											return -1;
-										}
+								(a, b) -> {
+									JDIFieldVariable v1 = (JDIFieldVariable) a;
+									JDIFieldVariable v2 = (JDIFieldVariable) b;
+									try {
+										return v1.getName()
+												.compareToIgnoreCase(
+														v2.getName());
+									} catch (DebugException de) {
+										logError(de);
+										return -1;
 									}
 								});
 					}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
index 982bd78..e495b02 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
@@ -2050,50 +2050,47 @@
 			return;
 		}
 		fIsSuspending = true;
-		Thread thread = new Thread(new Runnable() {
-			@Override
-			public void run() {
-				try {
-					fThread.suspend();
-					int timeout = Platform.getPreferencesService().getInt(
-							JDIDebugPlugin.getUniqueIdentifier(),
-							JDIDebugModel.PREF_REQUEST_TIMEOUT,
-							JDIDebugModel.DEF_REQUEST_TIMEOUT,
-							null);
-					long stop = System.currentTimeMillis() + timeout;
-					boolean suspended = isUnderlyingThreadSuspended();
-					while (System.currentTimeMillis() < stop && !suspended) {
-						try {
-							Thread.sleep(50);
-						} catch (InterruptedException e) {
-						}
-						suspended = isUnderlyingThreadSuspended();
-						if (suspended) {
-							break;
-						}
+		Thread thread = new Thread(() -> {
+			try {
+				fThread.suspend();
+				int timeout = Platform.getPreferencesService().getInt(
+						JDIDebugPlugin.getUniqueIdentifier(),
+						JDIDebugModel.PREF_REQUEST_TIMEOUT,
+						JDIDebugModel.DEF_REQUEST_TIMEOUT,
+						null);
+				long stop = System.currentTimeMillis() + timeout;
+				boolean suspended = isUnderlyingThreadSuspended();
+				while (System.currentTimeMillis() < stop && !suspended) {
+					try {
+						Thread.sleep(50);
+					} catch (InterruptedException e1) {
 					}
-					if (!suspended) {
-						IStatus status = new Status(
-								IStatus.ERROR,
-								JDIDebugPlugin.getUniqueIdentifier(),
-								SUSPEND_TIMEOUT,
-								MessageFormat.format(JDIDebugModelMessages.JDIThread_suspend_timeout, Integer.valueOf(timeout).toString()),
-								null);
-						IStatusHandler handler = DebugPlugin.getDefault()
-								.getStatusHandler(status);
-						if (handler != null) {
-							try {
-								handler.handleStatus(status, JDIThread.this);
-							} catch (CoreException e) {
-							}
-						}
+					suspended = isUnderlyingThreadSuspended();
+					if (suspended) {
+						break;
 					}
-					setRunning(false);
-					fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
-				} catch (RuntimeException exception) {
-				} finally {
-					fIsSuspending = false;
 				}
+				if (!suspended) {
+					IStatus status = new Status(
+							IStatus.ERROR,
+							JDIDebugPlugin.getUniqueIdentifier(),
+							SUSPEND_TIMEOUT,
+							MessageFormat.format(JDIDebugModelMessages.JDIThread_suspend_timeout, Integer.valueOf(timeout).toString()),
+							null);
+					IStatusHandler handler = DebugPlugin.getDefault()
+							.getStatusHandler(status);
+					if (handler != null) {
+						try {
+							handler.handleStatus(status, JDIThread.this);
+						} catch (CoreException e2) {
+						}
+					}
+				}
+				setRunning(false);
+				fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
+			} catch (RuntimeException exception) {
+			} finally {
+				fIsSuspending = false;
 			}
 		});
 		thread.setDaemon(true);
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIValue.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIValue.java
index 9e5ccbe..791e84c 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIValue.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIValue.java
@@ -16,7 +16,6 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
@@ -283,12 +282,7 @@
 							(JDIDebugTarget) getDebugTarget(), field, object,
 							fLogicalParent));
 				}
-				Collections.sort(fVariables, new Comparator<IJavaVariable>() {
-					@Override
-					public int compare(IJavaVariable a, IJavaVariable b) {
-						return sortChildren(a, b);
-					}
-				});
+				Collections.sort(fVariables, (a, b) -> sortChildren(a, b));
 			}
 
 			return fVariables;
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/Timer.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/Timer.java
index cfdc709..fce9869 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/Timer.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/Timer.java
@@ -51,23 +51,20 @@
 	 */
 	public Timer() {
 		setTimeout(Integer.MAX_VALUE);
-		Runnable r = new Runnable() {
-			@Override
-			public void run() {
-				while (isAlive()) {
-					boolean interrupted = false;
-					try {
-						Thread.sleep(getTimeout());
-					} catch (InterruptedException e) {
-						interrupted = true;
-					}
-					if (!interrupted) {
-						if (getListener() != null) {
-							setStarted(false);
-							setTimeout(Integer.MAX_VALUE);
-							getListener().timeout();
-							setListener(null);
-						}
+		Runnable r = () -> {
+			while (isAlive()) {
+				boolean interrupted = false;
+				try {
+					Thread.sleep(getTimeout());
+				} catch (InterruptedException e) {
+					interrupted = true;
+				}
+				if (!interrupted) {
+					if (getListener() != null) {
+						setStarted(false);
+						setTimeout(Integer.MAX_VALUE);
+						getListener().timeout();
+						setListener(null);
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.debug/pom.xml b/org.eclipse.jdt.debug/pom.xml
index 32a21a1..cdc2b59 100644
--- a/org.eclipse.jdt.debug/pom.xml
+++ b/org.eclipse.jdt.debug/pom.xml
@@ -18,9 +18,6 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug</artifactId>
-  <version>3.15.200-SNAPSHOT</version>
+  <version>3.16.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
-  <properties>
-    <maven.compiler.release>8</maven.compiler.release>
-  </properties>
 </project>
diff --git a/org.eclipse.jdt.launching/.classpath b/org.eclipse.jdt.launching/.classpath
index 8ee586f..7f26826 100644
--- a/org.eclipse.jdt.launching/.classpath
+++ b/org.eclipse.jdt.launching/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="launching"/>
 	<classpathentry kind="src" output="support_bin" path="support">
diff --git a/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
index 75410b6..425bbf6 100644
--- a/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
@@ -17,9 +17,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -35,6 +35,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -93,6 +94,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
@@ -126,11 +128,13 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
@@ -138,17 +142,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=0
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
@@ -232,11 +239,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -266,6 +274,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -290,13 +300,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -343,6 +357,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -379,9 +395,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -407,8 +426,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.jdt.launching/META-INF/MANIFEST.MF b/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
index 39ab22d..0f31a53 100644
--- a/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.launching; singleton:=true
-Bundle-Version: 3.17.200.qualifier
+Bundle-Version: 3.18.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.launching.LaunchingPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -23,5 +23,5 @@
  org.eclipse.osgi;bundle-version="[3.8.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Automatic-Module-Name: org.eclipse.jdt.launching
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketListenConnectorProcess.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketListenConnectorProcess.java
index a0714fa..50ffe23 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketListenConnectorProcess.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/SocketListenConnectorProcess.java
@@ -113,14 +113,10 @@
 		fStartTime = System.currentTimeMillis();
 		fAccepted = 0;
 		// If the connector does not support multiple connections, accept a single connection
-		try {
-			if (!connector.supportsMultipleConnections()) {
-				fConnectionLimit = 1;
-			}
-		}
-		catch (IOException | IllegalConnectorArgumentsException ex) {
+		if (!connector.supportsMultipleConnections()) {
 			fConnectionLimit = 1;
 		}
+
 		fLaunch.addProcess(this);
 		fWaitForConnectionJob = new WaitForConnectionJob(connector,arguments);
 		fWaitForConnectionJob.setPriority(Job.SHORT);
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
index 125ccf7..e07c27b 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
@@ -22,7 +22,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -45,7 +44,6 @@
 import org.eclipse.jdt.debug.core.JDIDebugModel;
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
 import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.IVMInstall2;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.jdt.launching.SocketUtil;
 import org.eclipse.jdt.launching.VMRunnerConfiguration;
@@ -113,9 +111,7 @@
 		public void run() {
 			try {
 				fVirtualMachine = fConnector.accept(fConnectionMap);
-			} catch (IOException e) {
-				fException = e;
-			} catch (IllegalConnectorArgumentsException e) {
+			} catch (IOException | IllegalConnectorArgumentsException e) {
 				fException = e;
 			}
 		}
@@ -192,14 +188,11 @@
 
 		if (fVMInstance instanceof StandardVM && ((StandardVM)fVMInstance).getDebugArgs() != null){
 			String debugArgString = ((StandardVM)fVMInstance).getDebugArgs().replaceAll("\\Q" + StandardVM.VAR_PORT + "\\E", Integer.toString(port));  //$NON-NLS-1$ //$NON-NLS-2$
-			String[] debugArgs = DebugPlugin.parseArguments(debugArgString);
-			for (int i = 0; i < debugArgs.length; i++) {
-				arguments.add(debugArgs[i]);
-			}
+			arguments.addAll(Arrays.asList(DebugPlugin.parseArguments(debugArgString)));
 		} else {
 			// VM arguments are the first thing after the java program so that users can specify
 			// options like '-client' & '-server' which are required to be the first options
-			double version = getJavaVersion();
+			double version = getJavaVersion(fVMInstance);
 			if (version < 1.5) {
 				arguments.add("-Xdebug"); //$NON-NLS-1$
 				arguments.add("-Xnoagent"); //$NON-NLS-1$
@@ -209,6 +202,12 @@
 			if (version < 1.4) {
 				arguments.add("-Djava.compiler=NONE"); //$NON-NLS-1$
 			}
+			// check if java 14 or greater
+			if (version >= 14) {
+				if (launch.getLaunchConfiguration().getAttribute(IJavaLaunchConfigurationConstants.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES, true)) {
+					arguments.add("-XX:+ShowCodeDetailsInExceptionMessages"); //$NON-NLS-1$
+				}
+			}
 			if (version < 1.5) {
 				arguments.add("-Xrunjdwp:transport=dt_socket,suspend=y,address=localhost:" + port); //$NON-NLS-1$
 			} else {
@@ -241,11 +240,7 @@
 
 		String dependencies = config.getOverrideDependencies();
 		if (dependencies != null && dependencies.length() > 0) {
-			String[] parseArguments = DebugPlugin.parseArguments(dependencies);
-			for (String string : parseArguments) {
-				arguments.add(string);
-			}
-
+			arguments.addAll(Arrays.asList(DebugPlugin.parseArguments(dependencies)));
 		}
 
 		if (isModular(config, fVMInstance)) {
@@ -365,7 +360,7 @@
 					process.setAttribute(DebugPlugin.ATTR_ENVIRONMENT, buff.toString());
 				}
 				if (!cmdDetails.getClasspathShortener().getProcessTempFiles().isEmpty()) {
-					String tempFiles = cmdDetails.getClasspathShortener().getProcessTempFiles().stream().map(file -> file.getAbsolutePath()).collect(Collectors.joining(File.pathSeparator));
+					String tempFiles = cmdDetails.getClasspathShortener().getProcessTempFiles().stream().map(File::getAbsolutePath).collect(Collectors.joining(File.pathSeparator));
 					process.setAttribute(LaunchingPlugin.ATTR_LAUNCH_TEMP_FILES, tempFiles);
 				}
 				subMonitor.worked(1);
@@ -439,7 +434,7 @@
 						}
 						Object result = handler.handleStatus(status, this);
 						if (result instanceof Boolean) {
-							retry = ((Boolean)result).booleanValue();
+							retry = ((Boolean)result);
 						}
 						if (!retry && retryCount < 5) {
 							retry = true;
@@ -501,16 +496,14 @@
 				if(env == null){
 					Map<String, String> map = DebugPlugin.getDefault().getLaunchManager().getNativeEnvironment();
 					env = new String[map.size()];
-					String var = null;
 					int index = 0;
-					for(Iterator<String> iter = map.keySet().iterator(); iter.hasNext();) {
-						var = iter.next();
+					for (String var : map.keySet()) {
 						String value = map.get(var);
 						if (value == null) {
 							value = ""; //$NON-NLS-1$
 						}
 						if (var.equalsIgnoreCase("path")) { //$NON-NLS-1$
-							if(value.indexOf(jrestr) == -1) {
+							if (!value.contains(jrestr)) {
 								value = jrestr+';'+value;
 							}
 						}
@@ -554,38 +547,6 @@
 	}
 
 	/**
-	 * Returns the version of the current VM in use
-	 * @return the VM version
-	 */
-	private double getJavaVersion() {
-		String version = null;
-		if (fVMInstance instanceof IVMInstall2) {
-			version = ((IVMInstall2)fVMInstance).getJavaVersion();
-		} else {
-			LibraryInfo libInfo = LaunchingPlugin.getLibraryInfo(fVMInstance.getInstallLocation().getAbsolutePath());
-			if (libInfo == null) {
-			    return 0D;
-			}
-			version = libInfo.getVersion();
-		}
-		if (version == null) {
-			// unknown version
-			return 0D;
-		}
-		int index = version.indexOf("."); //$NON-NLS-1$
-		int nextIndex = version.indexOf(".", index+1); //$NON-NLS-1$
-		try {
-			if (index > 0 && nextIndex>index) {
-				return Double.parseDouble(version.substring(0,nextIndex));
-			}
-			return Double.parseDouble(version);
-		} catch (NumberFormatException e) {
-			return 0D;
-		}
-
-	}
-
-	/**
 	 * Checks and forwards an error from the specified process
 	 * @param process the process to get the error message from
 	 * @throws CoreException if a problem occurs
@@ -630,9 +591,7 @@
 	 */
 	@SuppressWarnings("nls")
 	protected ListeningConnector getConnector() {
-		List<ListeningConnector> connectors= Bootstrap.virtualMachineManager().listeningConnectors();
-		for (int i= 0; i < connectors.size(); i++) {
-			ListeningConnector c= connectors.get(i);
+		for (ListeningConnector c : Bootstrap.virtualMachineManager().listeningConnectors()) {
 			if ("com.sun.jdi.SocketListen".equals(c.name())) {
 				return c;
 			}
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
index 074cb3c..f89b4c7 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
@@ -109,9 +109,7 @@
 		if (args == null) {
 			return;
 		}
-		for (int i= 0; i < args.length; i++) {
-			v.add(args[i]);
-		}
+		v.addAll(Arrays.asList(args));
 	}
 
 	/**
@@ -133,7 +131,7 @@
 		catch(CoreException ce) {
 			LaunchingPlugin.log(ce);
 		}
-		return cmdLine;
+		return null;
 	}
 
 	/**
@@ -147,8 +145,8 @@
 	 */
 	private String[] wrap(ILaunchConfiguration config, String[] cmdLine) throws CoreException {
 		if(config != null && Platform.OS_MACOSX.equals(Platform.getOS())) {
-			for (int i= 0; i < cmdLine.length; i++) {
-				if ("-ws".equals(cmdLine[i]) || cmdLine[i].indexOf("swt.jar") > -1 || cmdLine[i].indexOf("org.eclipse.swt") > -1) {   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+			for (String element : cmdLine) {
+				if ("-ws".equals(element) || element.contains("swt.jar") || element.contains("org.eclipse.swt")) { //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 					return createSWTlauncher(cmdLine,
 							cmdLine[0],
 							config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_USE_START_ON_FIRST_THREAD, true));
@@ -172,11 +170,11 @@
 			// not started via java_swt -> now we require that the VM supports the "-XstartOnFirstThread" option
 			boolean found = false;
 			ArrayList<String> args = new ArrayList<>();
-			for (int i = 0; i < cmdLine.length; i++) {
-				if(XSTART_ON_FIRST_THREAD.equals(cmdLine[i])) {
+			for (String element : cmdLine) {
+				if(XSTART_ON_FIRST_THREAD.equals(element)) {
 					found = true;
 				}
-				args.add(cmdLine[i]);
+				args.add(element);
 			}
 			//newer VMs and non-MacOSX VMs don't like "-XstartOnFirstThread"
 			// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=211625
@@ -191,9 +189,7 @@
 			Process process= Runtime.getRuntime().exec(new String[] { "/bin/cp", java_swt, "/tmp" }); //$NON-NLS-1$ //$NON-NLS-2$
 			process.waitFor();
 			java_swt= "/tmp/java_swt"; //$NON-NLS-1$
-		} catch (IOException e) {
-			// ignore and run java_swt in place
-		} catch (InterruptedException e) {
+		} catch (IOException | InterruptedException e) {
 			// ignore and run java_swt in place
 		}
 		String[] newCmdLine= new String[cmdLine.length+1];
@@ -310,11 +306,11 @@
 		if (cp.length == 0) {
 			return "";    //$NON-NLS-1$
 		}
-		for (int i= 0; i < cp.length; i++) {
+		for (String element : cp) {
 			if (pathCount > 0) {
 				buf.append(File.pathSeparator);
 			}
-			buf.append(cp[i]);
+			buf.append(element);
 			pathCount++;
 		}
 		return buf.toString();
@@ -332,8 +328,8 @@
 	 */
 	protected String[] ensureEncoding(ILaunch launch, String[] vmargs) {
 		boolean foundencoding = false;
-		for(int i = 0; i < vmargs.length; i++) {
-			if(vmargs[i].startsWith("-Dfile.encoding=")) { //$NON-NLS-1$
+		for (String vmarg : vmargs) {
+			if(vmarg.startsWith("-Dfile.encoding=")) { //$NON-NLS-1$
 				foundencoding = true;
 			}
 		}
@@ -444,13 +440,18 @@
 			arguments.add("--enable-preview"); //$NON-NLS-1$
 		}
 
+		ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
+		// check if java 14 or greater
+		if (getJavaVersion(fVMInstance) >= 14) {
+			if (launchConfiguration != null
+					&& launchConfiguration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES, true)) {
+				arguments.add("-XX:+ShowCodeDetailsInExceptionMessages"); //$NON-NLS-1$
+			}
+		}
+
 		String dependencies = config.getOverrideDependencies();
 		if (dependencies != null && dependencies.length() > 0) {
-			String[] parseArguments = DebugPlugin.parseArguments(dependencies);
-			for (String string : parseArguments) {
-				arguments.add(string);
-			}
-
+			arguments.addAll(Arrays.asList(DebugPlugin.parseArguments(dependencies)));
 		}
 		if (isModular(config, fVMInstance)) {
 			arguments.add("-m"); //$NON-NLS-1$
@@ -472,7 +473,7 @@
 			cmdLine = classpathShortener.getCmdLine();
 			envp = classpathShortener.getEnvp();
 		}
-		String[] newCmdLine = validateCommandLine(launch.getLaunchConfiguration(), cmdLine);
+		String[] newCmdLine = validateCommandLine(launchConfiguration, cmdLine);
 		if (newCmdLine != null) {
 			cmdLine = newCmdLine;
 		}
@@ -531,7 +532,7 @@
 			process.setAttribute(DebugPlugin.ATTR_ENVIRONMENT, buff.toString());
 		}
 		if (!cmdDetails.getClasspathShortener().getProcessTempFiles().isEmpty()) {
-			String tempFiles = cmdDetails.getClasspathShortener().getProcessTempFiles().stream().map(file -> file.getAbsolutePath()).collect(Collectors.joining(File.pathSeparator));
+			String tempFiles = cmdDetails.getClasspathShortener().getProcessTempFiles().stream().map(File::getAbsolutePath).collect(Collectors.joining(File.pathSeparator));
 			process.setAttribute(LaunchingPlugin.ATTR_LAUNCH_TEMP_FILES, tempFiles);
 		}
 		subMonitor.worked(1);
@@ -646,4 +647,36 @@
 		}
 	}
 
+	/**
+	 * Returns the version of the current VM in use
+	 * @return the VM version
+	 */
+	protected double getJavaVersion(IVMInstall fVMInstance) {
+		String version = null;
+		if (fVMInstance instanceof IVMInstall2) {
+			version = ((IVMInstall2)fVMInstance).getJavaVersion();
+		} else {
+			LibraryInfo libInfo = LaunchingPlugin.getLibraryInfo(fVMInstance.getInstallLocation().getAbsolutePath());
+			if (libInfo == null) {
+			    return 0D;
+			}
+			version = libInfo.getVersion();
+		}
+		if (version == null) {
+			// unknown version
+			return 0D;
+		}
+		int index = version.indexOf("."); //$NON-NLS-1$
+		int nextIndex = version.indexOf(".", index+1); //$NON-NLS-1$
+		try {
+			if (index > 0 && nextIndex>index) {
+				return Double.parseDouble(version.substring(0,nextIndex));
+			}
+			return Double.parseDouble(version);
+		} catch (NumberFormatException e) {
+			return 0D;
+		}
+
+	}
+
 }
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/IJavaLaunchConfigurationConstants.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/IJavaLaunchConfigurationConstants.java
index e538000..ff147bb 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/IJavaLaunchConfigurationConstants.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/IJavaLaunchConfigurationConstants.java
@@ -371,6 +371,15 @@
 	public static final String ATTR_USE_START_ON_FIRST_THREAD = LaunchingPlugin.getUniqueIdentifier() + ".ATTR_USE_START_ON_FIRST_THREAD"; //$NON-NLS-1$
 
 	/**
+	 * Attribute key to improve the usability of NullPointerExceptions generated by the JVM by describing precisely which variable was null. Value is
+	 * a boolean indicating if the <code>-XX:+ShowCodeDetailsInExceptionMessages</code> argument should be used when launching. Only valid for java >
+	 * 14 see https://openjdk.java.net/jeps/358
+	 *
+	 * @since 3.18
+	 */
+	public static final String ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES = LaunchingPlugin.getUniqueIdentifier()
+			+ ".ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES"; //$NON-NLS-1$
+	/**
 	 * Launch configuration attribute key. The value is a boolean specifying whether output folders corresponding to test sources should not be added
 	 * to the runtime classpath and test dependencies should not be added to the default classpath.
 	 *
diff --git a/org.eclipse.jdt.launching/pom.xml b/org.eclipse.jdt.launching/pom.xml
index 9f224d8..93abf6c 100644
--- a/org.eclipse.jdt.launching/pom.xml
+++ b/org.eclipse.jdt.launching/pom.xml
@@ -18,11 +18,8 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.launching</artifactId>
-  <version>3.17.200-SNAPSHOT</version>
+  <version>3.18.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
-  <properties>
-    <maven.compiler.release>8</maven.compiler.release>
-  </properties>
   
   <build>
         <plugins>
