diff --git a/CONTRIBUTING b/CONTRIBUTING
index be017d4..137f076 100644
--- a/CONTRIBUTING
+++ b/CONTRIBUTING
@@ -1,46 +1,59 @@
-Contributing to JDT - Java development tools
-============================================
+# Contributing to Eclipse Java development tools
 
 Thanks for your interest in this project.
 
-Project description:
---------------------
+## Project description
 
-The JDT project provides the tool plug-ins that implement a Java IDE supporting the development of any Java application, including Eclipse plug-ins. It adds a Java project nature and Java perspective to the Eclipse Workbench as well as a number of views, editors, wizards, builders, and code merging and refactoring tools. The JDT project allows Eclipse to be a development environment for itself.
+The JDT project provides the tool plug-ins that implement a Java IDE supporting
+the development of any Java application, including Eclipse plug-ins. It adds a
+Java project nature and Java perspective to the Eclipse Workbench as well as a
+number of views, editors, wizards, builders, and code merging and refactoring
+tools. The JDT project allows Eclipse to be a development environment for
+itself.
 
-- https://projects.eclipse.org/projects/eclipse.jdt
+* https://projects.eclipse.org/projects/eclipse.jdt
 
-Developer resources:
---------------------
+## Developer resources
 
-Information regarding source code management, builds, coding standards, and more.
+Information regarding source code management, builds, coding standards, and
+more.
 
-- https://projects.eclipse.org/projects/eclipse.jdt/developer
+* https://projects.eclipse.org/projects/eclipse.jdt/developer
 
-Contributor License Agreement:
-------------------------------
+The project maintains the following source code repositories
 
-Before your contribution can be accepted by the project, you need to create and electronically sign the Eclipse Foundation Contributor License Agreement (ECA).
-
-- http://www.eclipse.org/legal/ECA.php
-
-Contact:
---------
-
-Contact the project developers via the project's "dev" list.
-
-- https://dev.eclipse.org/mailman/listinfo/jdt-dev
-
-Search for bugs:
-----------------
+* http://git.eclipse.org/c/jdt/eclipse.jdt.core.binaries.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.core.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.debug.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.ui.git
 
 This project uses Bugzilla to track ongoing development and issues.
 
-- https://bugs.eclipse.org/bugs/buglist.cgi?product=JDT
+* Search for issues: https://eclipse.org/bugs/buglist.cgi?product=JDT
+* Create a new report: https://eclipse.org/bugs/enter_bug.cgi?product=JDT
 
-Create a new bug:
------------------
+Be sure to search for existing bugs before you create another one. Remember that
+contributions are always welcome!
 
-Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome!
+## Eclipse Contributor Agreement
 
-- https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JDT
+Before your contribution can be accepted by the project team contributors must
+electronically sign the Eclipse Contributor Agreement (ECA).
+
+* http://www.eclipse.org/legal/ECA.php
+
+Commits that are provided by non-committers must have a Signed-off-by field in
+the footer indicating that the author is aware of the terms by which the
+contribution has been provided to the project. The non-committer must
+additionally have an Eclipse Foundation account and must have a signed Eclipse
+Contributor Agreement (ECA) on file.
+
+For more information, please see the Eclipse Committer Handbook:
+https://www.eclipse.org/projects/handbook/#resources-commit
+
+## Contact
+
+Contact the project developers via the project's "dev" list.
+
+* https://dev.eclipse.org/mailman/listinfo/jdt-dev
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e23ece2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following 
+Secondary Licenses when the conditions for such availability set forth 
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..62de25b
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,35 @@
+# Notices for Eclipse Java development tools
+
+This content is produced and maintained by the Eclipse Java development tools
+project.
+
+* Project home: https://projects.eclipse.org/projects/eclipse.jdt
+
+## Trademarks
+
+Eclipse Java development tools, Java development tools, Eclipse JDT, and JDT are
+trademarks of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+SPDX-License-Identifier: EPL-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* http://git.eclipse.org/c/jdt/eclipse.jdt.core.binaries.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.core.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.debug.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.git
+* http://git.eclipse.org/c/jdt/eclipse.jdt.ui.git
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.jdi.tests/.classpath b/org.eclipse.jdt.debug.jdi.tests/.classpath
index 3d80369..9c36d5d 100644
--- a/org.eclipse.jdt.debug.jdi.tests/.classpath
+++ b/org.eclipse.jdt.debug.jdi.tests/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="tests"/>
+	<classpathentry kind="src" path="tests">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</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.junit.JUNIT_CONTAINER/3"/>
diff --git a/org.eclipse.jdt.debug.tests/.classpath b/org.eclipse.jdt.debug.tests/.classpath
index 6a34d89..375f1db 100644
--- a/org.eclipse.jdt.debug.tests/.classpath
+++ b/org.eclipse.jdt.debug.tests/.classpath
@@ -1,9 +1,21 @@
-<?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.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="test plugin"/>
-	<classpathentry kind="src" path="tests"/>
-	<classpathentry kind="src" path="console tests"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?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.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="test plugin">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="tests">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="console tests">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StratumTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StratumTests.java
index 7ca917b..1da7378 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StratumTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StratumTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
 
 import java.util.Arrays;
 
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.debug.core.IJavaDebugTarget;
 import org.eclipse.jdt.debug.core.IJavaReferenceType;
 import org.eclipse.jdt.debug.core.IJavaStackFrame;
@@ -47,9 +48,17 @@
 			IJavaReferenceType type = ((IJavaStackFrame)thread.getTopStackFrame()).getReferenceType();
 			String[] strata = type.getAvailableStrata();
 			Arrays.sort(strata);
-			assertEquals("Wrong number of available strata", 2, strata.length);
-			assertEquals("Wrong strata", "Java", strata[0]);
-			assertEquals("Wrong strata", JDIHelpers.STRATA_ID, strata[1]);
+			String version = ((IJavaDebugTarget)thread.getDebugTarget()).getVersion();
+			// TODO ideally need to check "if NN or newer"
+			if (!JavaCore.isSupportedJavaVersion(version)) {
+				// as of 2018-11-15 java 12 was not supported by the sourcelookup agent
+				assertEquals("Wrong number of available strata", 1, strata.length);
+				assertEquals("Wrong strata", "Java", strata[0]);
+			} else {
+				assertEquals("Wrong number of available strata", 2, strata.length);
+				assertEquals("Wrong strata", "Java", strata[0]);
+				assertEquals("Wrong strata", JDIHelpers.STRATA_ID, strata[1]);
+			}
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
diff --git a/org.eclipse.jdt.debug.ui/icons/full/obj16/java_stacktrace@2x.png b/org.eclipse.jdt.debug.ui/icons/full/obj16/java_stacktrace@2x.png
new file mode 100644
index 0000000..9aaded5
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/icons/full/obj16/java_stacktrace@2x.png
Binary files differ
diff --git a/org.eclipse.jdt.debug.ui/icons/full/obj16/javastacktrace_console.png b/org.eclipse.jdt.debug.ui/icons/full/obj16/javastacktrace_console.png
new file mode 100644
index 0000000..521785c
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/icons/full/obj16/javastacktrace_console.png
Binary files differ
diff --git a/org.eclipse.jdt.debug.ui/plugin.xml b/org.eclipse.jdt.debug.ui/plugin.xml
index a2dfef5..a680465 100644
--- a/org.eclipse.jdt.debug.ui/plugin.xml
+++ b/org.eclipse.jdt.debug.ui/plugin.xml
@@ -3360,6 +3360,7 @@
    <extension
          point="org.eclipse.ui.console.consoleFactories">
       <consoleFactory
+      	    icon="$nl$/icons/full/obj16/javastacktrace_console.png"
             label="%javaStackTraceConsole.label"
             class="org.eclipse.jdt.debug.ui.console.JavaStackTraceConsoleFactory">
       </consoleFactory>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaJRETab.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaJRETab.java
index d875135..29359ff 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaJRETab.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaJRETab.java
@@ -15,7 +15,6 @@
 package org.eclipse.jdt.debug.ui.launchConfigurations;
 
 
-import java.util.List;
 import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
@@ -333,9 +332,7 @@
 				if(vmver != null) {
 					int val = JavaCore.compareJavaVersions(compliance, vmver);
 					if(val > 0) {
-						List<String> allVersions = JavaCore.getAllVersions();
-						String latest = allVersions.get(allVersions.size() - 1);
-						if (JavaCore.compareJavaVersions(vmver, latest) <= 0) {
+						if (JavaCore.isSupportedJavaVersion(vmver)) {
 							String setting = null;
 							if (environmentId == null) {
 								setting = LauncherMessages.JavaJRETab_2;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugImages.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugImages.java
index 621329b..3be8d8f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugImages.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -109,6 +109,8 @@
 
 	public static final String IMG_OVR_TRIGGER_SUPPRESSED = "IMG_OVR_TRIGGER_SUPPRESSED"; //$NON-NLS-1$
 
+	public static final String IMG_JAVA_STACKTRACE_CONSOLE = "IMG_JAVA_STACKTRACE_CONSOLE"; //$NON-NLS-1$
+
 	/*
 	 * Set of predefined Image Descriptors.
 	 */
@@ -226,6 +228,8 @@
 
 		declareRegistryImage(IMG_OVR_TRIGGER_SUPPRESSED, T_OVR + "trigger_suppressed_ovr.png"); //$NON-NLS-1$
 
+		declareRegistryImage(IMG_JAVA_STACKTRACE_CONSOLE, T_OBJ + "javastacktrace_console.png"); //$NON-NLS-1$
+
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java
index a3c8f31..9677d39 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/console/JavaStackTraceConsole.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -30,6 +30,7 @@
 import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.debug.ui.JavaDebugImages;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.rules.FastPartitioner;
@@ -89,7 +90,7 @@
      * Constructor
      */
     public JavaStackTraceConsole() {
-        super(ConsoleMessages.JavaStackTraceConsoleFactory_0, CONSOLE_TYPE, null, true);
+		super(ConsoleMessages.JavaStackTraceConsoleFactory_0, CONSOLE_TYPE, JavaDebugImages.getImageDescriptor(JavaDebugImages.IMG_JAVA_STACKTRACE_CONSOLE), true);
         Font font = JFaceResources.getFont(IDebugUIConstants.PREF_CONSOLE_FONT);
         setFont(font);
         partitioner.connect(getDocument());
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java
index 5c1a76f..d9d1460 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java
@@ -69,7 +69,9 @@
 				instruction.execute();
 				instruction.setInterpreter(null);
 			}
-		} catch (VMDisconnectedException e) {
+		} catch (CoreException e) {
+			throw e;
+		} catch (Exception e) {
 			throw new CoreException(new Status(IStatus.ERROR,
 					JDIDebugModel.getPluginIdentifier(), e.getMessage(), e));
 		} finally {
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/JDIMessages.properties b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/JDIMessages.properties
index 7d9ba1d..394e6ed 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/JDIMessages.properties
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/JDIMessages.properties
@@ -34,7 +34,7 @@
 LocalVariableImpl_Code_indexes_are_assumed_to_be_always_positive_4=Code indexes are assumed to be always positive
 LocationImpl_Can__t_compare_location_to_given_object_1=Cannot compare location to given object
 LocationImpl_Code_indexes_are_assumed_to_be_always_positive_2=Code indexes are assumed to be always positive
-LocationImpl_sourcename___0___line___1__3=sourcename: {0}, line: {1}
+LocationImpl_sourcename___0___line___1__3=sourcename: {0}, line: {1}, method: {2}
 MethodImpl_Got_empty_line_number_table_for_this_method_1=Got empty line number table for this method
 MethodImpl_No_line_number_information_available_2=No line number information available
 MethodImpl_Got_empty_line_number_table_for_this_method_3=Got empty line number table for this method
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 029493b..5885ae4 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
@@ -94,29 +94,33 @@
 	 */
 	@Override
 	public int compareTo(Locatable locatable) {
-		if (locatable == null || !locatable.getClass().equals(this.getClass()))
+		if (locatable == null || !locatable.getClass().equals(this.getClass())) {
 			throw new ClassCastException(
 					JDIMessages.LocationImpl_Can__t_compare_location_to_given_object_1);
+		}
 
 		// See if methods are the same, if not return comparison between
 		// methods.
 		LocationImpl location2 = (LocationImpl) locatable;
-		if (!method().equals(location2.method()))
+		if (!method().equals(location2.method())) {
 			return method().compareTo(location2.method());
+		}
 
 		// Return comparison between code-indexes.
 		// Code indexes must be treated as unsigned. This matters if you have to
 		// compare them.
-		if (codeIndex() < 0 || location2.codeIndex() < 0)
+		if (codeIndex() < 0 || location2.codeIndex() < 0) {
 			throw new InternalError(
 					JDIMessages.LocationImpl_Code_indexes_are_assumed_to_be_always_positive_2);
+		}
 
-		if (codeIndex() < location2.codeIndex())
+		if (codeIndex() < location2.codeIndex()) {
 			return -1;
-		else if (codeIndex() > location2.codeIndex())
+		} else if (codeIndex() > location2.codeIndex()) {
 			return 1;
-		else
+		} else {
 			return 0;
+		}
 	}
 
 	/**
@@ -152,7 +156,7 @@
 		try {
 			return NLS.bind(JDIMessages.LocationImpl_sourcename___0___line___1__3,
 							new String[] { sourceName(),
-									Integer.toString(lineNumber()) });
+							Integer.toString(lineNumber()), method().toString() });
 		} catch (Exception e) {
 			return fDescription;
 		}
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 0b75fce..71ab3ca 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
@@ -53,6 +53,7 @@
 import com.sun.jdi.ClassNotPreparedException;
 import com.sun.jdi.InterfaceType;
 import com.sun.jdi.Location;
+import com.sun.jdi.Method;
 import com.sun.jdi.NativeMethodException;
 import com.sun.jdi.ObjectReference;
 import com.sun.jdi.ReferenceType;
@@ -301,6 +302,10 @@
 			// available
 			return null;
 		}
+		locations = filterLocations(locations);
+		if (locations.isEmpty()) {
+			return null;
+		}
 		EventRequest[] requests = new EventRequest[locations.size()];
 		int i = 0;
 		for(Location location : locations) {
@@ -311,8 +316,30 @@
 	}
 
 	/**
-	 * Creates, installs, and returns a line breakpoint request at the given
-	 * location for this breakpoint.
+	 * Filter out locations which shouldn't be used for breakpoint creation (like lambda methods)
+	 *
+	 * @return non null list with filtered locations
+	 */
+	protected List<Location> filterLocations(List<Location> locations) {
+		if (locations.size() <= 1) {
+			return locations;
+		}
+		List<Location> result = new ArrayList<>();
+		for (Location location : locations) {
+			Method method = location.method();
+			if (!method.isSynthetic()) {
+				result.add(location);
+			}
+		}
+		// this is just a best guess: all locations are synthetic, so we peek the first one
+		if (result.isEmpty()) {
+			result.add(locations.get(0));
+		}
+		return result;
+	}
+
+	/**
+	 * Creates, installs, and returns a line breakpoint request at the given location for this breakpoint.
 	 */
 	protected BreakpointRequest createLineBreakpointRequest(Location location,
 			JDIDebugTarget target) throws CoreException {
diff --git a/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF b/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF
index 12b80cf..e842fc7 100644
--- a/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Version: 3.9.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Require-Bundle: org.objectweb.asm;bundle-version="[6.1.1,7.0.0)"
+Require-Bundle: org.objectweb.asm;bundle-version="[7.0.0,7.1.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: org.eclipse.jdt.launching.javaagent
diff --git a/org.eclipse.jdt.launching.javaagent/README.md b/org.eclipse.jdt.launching.javaagent/README.md
new file mode 100644
index 0000000..1e7963d
--- /dev/null
+++ b/org.eclipse.jdt.launching.javaagent/README.md
@@ -0,0 +1,14 @@
+## Updating ASM library version
+
+1. Change `org.ow2.asm:asm` version in `pom.xml` file. This defines version of ASM used by the javaagent at runtime and during Maven build on command line.
+2. Change `org.objectweb.asm` bundle-version in `META-INF/MANIFEST.MF`. This defines version of ASM used to compile the javaagent in PDE. **This has no effect on command line Maven build or runtime!**.
+	* Make sure the new version of ASM is part of PDE target platform. You may need to copy ASM jar to the target platform manually as PDE does not download project dependencies automatically.
+3. If adding support for new Java classfile version
+   - Update `ClassfileTransformer#ASM_API` to indicate ASM API version used by the javaagent. This defines what bytecode instructions ASM is able to interpret and process. Classfiles that use unsupported instructions will fail instrumentation and the javaagent will print `Could not instrument class ...` error message to stderr.
+   - Update `ClassfileTransformer#MAX_CLASS_MAJOR` to match maximum java classfile version. The javaagent silently skips instrumentation of classfiles with newer version.
+   - Update `StratumTests#testAvailableStrata` to indicate Java version(s) that are not supported by the javaagent. Typically this is N+1 compared to `ClassfileTransformer#MAX_CLASS_MAJOR`.
+4. Build the javaagent jar file by running `mvn clean package` command from `org.eclipse.jdt.launching.javaagent/` directory. This creates  `org.eclipse.jdt.launching.javaagent/target/javaagent-shaded.jar` jar file, which includes the javaagent and ASM classes. 
+   * Note that ASM classes are _relocated_ to `org.eclipse.jdt.launching.internal.org.objectweb.asm` package to avoid possible conflicts with applicates being debugged.
+5. Copy `javaagent-shaded.jar` to `org.eclipse.jdt.launching/lib` folder. This is the javaagent jar used at runtime.
+6. Run the tests, ideally using all supported java versions.
+7. Commit all changed files to git and submit the changes to Gerrit for review.
diff --git a/org.eclipse.jdt.launching.javaagent/pom.xml b/org.eclipse.jdt.launching.javaagent/pom.xml
index 74756ff..9bf6d4a 100644
--- a/org.eclipse.jdt.launching.javaagent/pom.xml
+++ b/org.eclipse.jdt.launching.javaagent/pom.xml
@@ -20,7 +20,7 @@
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm</artifactId>
-      <version>6.2.1</version>
+      <version>7.0</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java b/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java
index 6476bba..58657d1 100644
--- a/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java
+++ b/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java
@@ -24,10 +24,10 @@
 	private static final String STRATA_ID = "jdt"; //$NON-NLS-1$
 
 	/** max supported java class format major version, must match {@link #ASM_API} below **/
-	public static final int MAX_CLASS_MAJOR = Opcodes.V10;
+	public static final int MAX_CLASS_MAJOR = Opcodes.V11;
 
 	/** supported ASM API version, must match {@link #MAX_CLASS_MAJOR} above */
-	private static final int ASM_API = Opcodes.ASM6;
+	private static final int ASM_API = Opcodes.ASM7;
 
 	public byte[] transform(byte[] classfileBuffer, final String location) {
 
diff --git a/org.eclipse.jdt.launching/META-INF/MANIFEST.MF b/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
index 362a4c8..81987a5 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.11.100.qualifier
+Bundle-Version: 3.12.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.launching.LaunchingPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
index 7dcbcd0..5e02129 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
@@ -274,6 +274,10 @@
 			envp = classpathShortener.getEnvp();
 		}
 
+		String[] newCmdLine = validateCommandLine(launch.getLaunchConfiguration(), cmdLine);
+		if (newCmdLine != null) {
+			cmdLine = newCmdLine;
+		}
 		subMonitor.worked(1);
 
 		CommandDetails cmd = new CommandDetails();
@@ -322,10 +326,6 @@
 
 				connector.startListening(map);
 
-				String[] newCmdLine = validateCommandLine(launch.getLaunchConfiguration(), cmdLine);
-				if(newCmdLine != null) {
-					cmdLine = newCmdLine;
-				}
 				p = exec(cmdLine, cmdDetails.getWorkingDir(), cmdDetails.getEnvp());
 				if (p == null) {
 					return;
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 e15d50a..ee8f9e7 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
@@ -470,6 +470,10 @@
 			cmdLine = classpathShortener.getCmdLine();
 			envp = classpathShortener.getEnvp();
 		}
+		String[] newCmdLine = validateCommandLine(launch.getLaunchConfiguration(), cmdLine);
+		if (newCmdLine != null) {
+			cmdLine = newCmdLine;
+		}
 		CommandDetails cmd = new CommandDetails();
 		cmd.setCommandLine(cmdLine);
 		cmd.setEnvp(envp);
@@ -496,10 +500,6 @@
 		subMonitor.beginTask(LaunchingMessages.StandardVMRunner_Launching_VM____1, 2);
 		subMonitor.subTask(LaunchingMessages.StandardVMRunner_Starting_virtual_machine____3);
 		Process p= null;
-		String[] newCmdLine = validateCommandLine(launch.getLaunchConfiguration(), cmdLine);
-		if(newCmdLine != null) {
-			cmdLine = newCmdLine;
-		}
 		p = exec(cmdLine, cmdDetails.getWorkingDir(), cmdDetails.getEnvp());
 		if (p == null) {
 			return;
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
index b795b03..afe5b6e 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
@@ -24,8 +24,10 @@
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.io.UncheckedIOException;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
@@ -856,15 +858,15 @@
 		if (Files.notExists(Paths.get(javaHome.getAbsolutePath(), RELEASE_FILE))) {
 			return version;
 		}
-		try (Stream<String> lines = Files.lines(Paths.get(javaHome.getAbsolutePath(), RELEASE_FILE)).filter(s -> s.contains(JAVA_VERSION))) {
+		try (Stream<String> lines = Files.lines(Paths.get(javaHome.getAbsolutePath(), RELEASE_FILE), Charset.defaultCharset()).filter(s -> s.contains(JAVA_VERSION))) {
 			Optional<String> hasVersion = lines.findFirst();
 			if (hasVersion.isPresent()) {
 				String line = hasVersion.get();
 				version = line.substring(14, line.length() - 1); // length of JAVA_VERSION + 2 in JAVA_VERSION="9"
 			}
 		}
-		catch (IOException e) {
-			e.printStackTrace();
+		catch (UncheckedIOException | IOException e) {
+			LaunchingPlugin.log(e);
 		}
 
 		return version;
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/JDIHelpers.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/JDIHelpers.java
index 8757347..ba4cfed 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/JDIHelpers.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/sourcelookup/advanced/JDIHelpers.java
@@ -127,7 +127,7 @@
 			IStackFrame[] frames = ((IStackFrame) element).getThread().getStackFrames();
 			for (int i = 0; i < frames.length - 1; i++) {
 				if (frames[i] == element) {
-					return Arrays.copyOfRange(frames, i + 1, frames.length - 1);
+					return Arrays.copyOfRange(frames, i + 1, frames.length);
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
index a57cb2d..4408d5e 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
@@ -1204,4 +1204,14 @@
 		}
 		return sb.toString();
 	}
+
+	/**
+	 * Supports modular class for launching.
+	 *
+	 * @since 3.12
+	 */
+	protected boolean supportsModule() {
+		return true;
+	}
+
 }
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java
index 491b99b..7754afd 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java
@@ -98,25 +98,27 @@
 		runConfig.setVMArguments(execArgs.getVMArgumentsArray());
 		runConfig.setWorkingDirectory(workingDirName);
 		runConfig.setVMSpecificAttributesMap(vmAttributesMap);
-		// current module name, if so
-		try {
-			IJavaProject proj = JavaRuntime.getJavaProject(configuration);
-			if (proj != null) {
-				IModuleDescription module = proj == null ? null : proj.getModuleDescription();
-				String modName = module == null ? null : module.getElementName();
-				if (modName != null) {
-					runConfig.setModuleDescription(modName);
+		if (supportsModule()) {
+			// current module name, if so
+			try {
+				IJavaProject proj = JavaRuntime.getJavaProject(configuration);
+				if (proj != null) {
+					IModuleDescription module = proj == null ? null : proj.getModuleDescription();
+					String modName = module == null ? null : module.getElementName();
+					if (modName != null) {
+						runConfig.setModuleDescription(modName);
+					}
 				}
+			} catch (CoreException e) {
+				// Not a java Project so no need to set module description
 			}
-		} catch (CoreException e) {
-			// Not a java Project so no need to set module description
 		}
 
 		// Launch Configuration should be launched by Java 9 or above for modulepath setting
 		if (!JavaRuntime.isModularConfiguration(configuration)) {
 			// Bootpath
 			runConfig.setBootClassPath(getBootpath(configuration));
-		} else {
+		} else if (supportsModule()) {
 			// module path
 			runConfig.setModulepath(paths[1]);
 			if (!configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_MODULE_CLI_OPTIONS, true)) {
diff --git a/org.eclipse.jdt.launching/lib/javaagent-shaded.jar b/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
index 1fe2aec..5d06bed 100644
--- a/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
+++ b/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
Binary files differ
diff --git a/org.eclipse.jdt.launching/pom.xml b/org.eclipse.jdt.launching/pom.xml
index 1a169be..108571e 100644
--- a/org.eclipse.jdt.launching/pom.xml
+++ b/org.eclipse.jdt.launching/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.launching</artifactId>
-  <version>3.11.100-SNAPSHOT</version>
+  <version>3.12.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   
   <build>
