diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EEDefinitionTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EEDefinitionTests.java
index 45d69bd..9af53b2 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EEDefinitionTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EEDefinitionTests.java
@@ -88,16 +88,20 @@
 		String[] expected = new String[]{"end.jar", "classes.txt", "others.txt", "add.jar", "ext1.jar", "ext2.jar", "opt-ext.jar"};
 		assertEquals("Wrong number of libraries", expected.length, libs.length);
 		for (int i = 0; i < expected.length; i++) {
-			if (i == 4) {
+			switch (i) {
+			case 4:
 				// ext1 and ext2 can be in either order due to file system ordering
 				assertTrue("Wrong library", expected[i].equals(libs[i].getSystemLibraryPath().lastSegment()) ||
-						expected[i].equals(libs[i+1].getSystemLibraryPath().lastSegment()));
-			} else if (i == 5) {
+					expected[i].equals(libs[i+1].getSystemLibraryPath().lastSegment()));
+				break;
+			case 5:
 				// ext1 and ext2 can be in either order due to file system ordering
 				assertTrue("Wrong library", expected[i].equals(libs[i].getSystemLibraryPath().lastSegment()) ||
-						expected[i].equals(libs[i-1].getSystemLibraryPath().lastSegment()));
-			} else {
+					expected[i].equals(libs[i-1].getSystemLibraryPath().lastSegment()));
+				break;
+			default:
 				assertEquals("Wrong library", expected[i], libs[i].getSystemLibraryPath().lastSegment());
+				break;
 			}
 			if ("classes.txt".equals(expected[i])) {
 				assertEquals("source.txt", libs[i].getSystemLibrarySourcePath().lastSegment());
@@ -116,18 +120,23 @@
 		String[] expected = new String[]{"end.txt", "source.txt", "source.txt", "sourceaddsource.jar", "extra1-src.txt", "extra2-src.txt", ""};
 		assertEquals("Wrong number of libraries", expected.length, libs.length);
 		for (int i = 0; i < expected.length; i++) {
-			if (i == 4) {
+			switch (i) {
+			case 4:
 				// ext1 and ext2 can be in either order due to file system ordering
 				assertTrue("Wrong attachment", expected[i].equals(libs[i].getSystemLibrarySourcePath().lastSegment()) ||
-						expected[i].equals(libs[i+1].getSystemLibrarySourcePath().lastSegment()));
-			} else if (i == 5) {
+					expected[i].equals(libs[i+1].getSystemLibrarySourcePath().lastSegment()));
+				break;
+			case 5:
 				// ext1 and ext2 can be in either order due to file system ordering
 				assertTrue("Wrong attachment", expected[i].equals(libs[i].getSystemLibrarySourcePath().lastSegment()) ||
-						expected[i].equals(libs[i-1].getSystemLibrarySourcePath().lastSegment()));
-			} else if (i == 6){
+					expected[i].equals(libs[i-1].getSystemLibrarySourcePath().lastSegment()));
+				break;
+			case 6:
 				assertEquals("Wrong attachment", Path.EMPTY, libs[i].getSystemLibrarySourcePath());
-			} else {
+				break;
+			default:
 				assertEquals("Wrong attachment", expected[i], libs[i].getSystemLibrarySourcePath().lastSegment());
+				break;
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java
index b05d0d2..2e2e672 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java
@@ -41,13 +41,12 @@
 	 */
 	public static Change createChangeFromList(List<Change> changes, String changeLabel) {
 		int nbChanges= changes.size();
-		if (nbChanges == 0) {
+		switch (nbChanges) {
+		case 0:
 			return null;
-		}
-		else if (nbChanges == 1) {
+		case 1:
 			return changes.get(0);
-		}
-		else {
+		default:
 			return new CompositeChange(changeLabel, changes.toArray(new Change[changes.size()]));
 		}
 	}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ExpressionInputDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ExpressionInputDialog.java
index f846a4a..17bbae8 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ExpressionInputDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ExpressionInputDialog.java
@@ -259,24 +259,34 @@
                     char[] chars = currentValue.toCharArray();
                     for (int i = 0; i < chars.length; i++) {
                         char c = chars[i];
-                        if (c == '\b') {
-                            buffer.append("\\b"); //$NON-NLS-1$
-                        } else if (c == '\t') {
-                            buffer.append("\\t"); //$NON-NLS-1$
-                        } else if (c == '\n') {
-                            buffer.append("\\n"); //$NON-NLS-1$
-                        } else if (c == '\f') {
-                            buffer.append("\\f"); //$NON-NLS-1$
-                        } else if (c == '\r') {
-                            buffer.append("\\r"); //$NON-NLS-1$
-                        } else if (c == '"') {
-                            buffer.append("\\\""); //$NON-NLS-1$
-                        } else if (c == '\'') {
-                            buffer.append("\\\'"); //$NON-NLS-1$
-                        } else if (c == '\\') {
-                            buffer.append("\\\\"); //$NON-NLS-1$
-                        } else {
-                            buffer.append(c);
+                        switch (c) {
+                        	case '\b':
+                        		buffer.append("\\b"); //$NON-NLS-1$
+                        		break;
+                        	case '\t':
+                        		buffer.append("\\t"); //$NON-NLS-1$
+                        		break;
+                        	case '\n':
+                        		buffer.append("\\n"); //$NON-NLS-1$
+                        		break;
+                        	case '\f':
+                        		buffer.append("\\f"); //$NON-NLS-1$
+                        		break;
+                        	case '\r':
+                        		buffer.append("\\r"); //$NON-NLS-1$
+                        		break;
+                        	case '"':
+                        		buffer.append("\\\""); //$NON-NLS-1$
+                        		break;
+                        	case '\'':
+                        		buffer.append("\\\'"); //$NON-NLS-1$
+                        		break;
+                        	case '\\':
+                        		buffer.append("\\\\"); //$NON-NLS-1$
+                        		break;
+                        	default:
+                        		buffer.append(c);
+                        		break;
                         }
                     }
                     buffer.append('"'); // Surround value in quotes
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
index 0dd221c..99f35a5 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
@@ -355,15 +355,20 @@
 					JREMessages.JREsPreferencePage_8 };
 			MessageDialog dialog = new MessageDialog(getShell(), title, null, message, MessageDialog.QUESTION, buttonLabels, 0);
 			int res = dialog.open();
-			if (res == 0) { // apply
+			switch (res) {
+			case 0:
+				// apply
 				return performOk() && super.okToLeave();
-			} else if (res == 1) { // discard
+			case 1:
+				// discard
 				fJREBlock.fillWithWorkspaceJREs();
 				fJREBlock.restoreColumnSettings(JDIDebugUIPlugin.getDefault().getDialogSettings(), IJavaDebugHelpContextIds.JRE_PREFERENCE_PAGE);
 				initDefaultVM();
 				fJREBlock.initializeTimeStamp();
-			} else {
+				break;
+			default:
 				// apply later
+				break;
 			}
 		}
 		return super.okToLeave();
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/LibraryLabelProvider.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/LibraryLabelProvider.java
index 3ae7fce..cbd1143 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/LibraryLabelProvider.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/LibraryLabelProvider.java
@@ -91,7 +91,8 @@
 		} else if (element instanceof SubElement) {
 			SubElement subElement= (SubElement) element;
 			StringBuilder text= new StringBuilder();
-			if (subElement.getType() == SubElement.SOURCE_PATH) {
+			switch (subElement.getType()) {
+			case SubElement.SOURCE_PATH:
 				text.append(JREMessages.VMLibraryBlock_0);
 				IPath systemLibrarySourcePath= subElement.getParent().getSystemLibrarySourcePath();
 				if (systemLibrarySourcePath != null && !Path.EMPTY.equals(systemLibrarySourcePath)) {
@@ -99,7 +100,8 @@
 				} else {
 					text.append(JREMessages.VMLibraryBlock_1);
 				}
-			} else if(subElement.getType() == SubElement.JAVADOC_URL){
+				break;
+			case SubElement.JAVADOC_URL:
 				text.append(JREMessages.LibraryLabelProvider_0);
 				URL javadocLocation= subElement.getParent().getJavadocLocation();
 				if (javadocLocation != null) {
@@ -107,7 +109,8 @@
 				} else {
 					text.append(JREMessages.VMLibraryBlock_1);
 				}
-			} else if (subElement.getType() == SubElement.EXTERNAL_ANNOTATIONS_PATH) {
+				break;
+			case SubElement.EXTERNAL_ANNOTATIONS_PATH:
 				text.append(JREMessages.VMExternalAnnsBlock_1);
 				IPath externalAnnotationsPath = subElement.getParent().getExternalAnnotationsPath();
 				if (externalAnnotationsPath != null && !Path.EMPTY.equals(externalAnnotationsPath)) {
@@ -115,6 +118,9 @@
 				} else {
 					text.append(JREMessages.VMExternalAnnsBlock_2);
 				}
+				break;
+			default:
+				break;
 			}
 			return text.toString();
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMLibraryBlock.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMLibraryBlock.java
index 4c9b867..d3ed19e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMLibraryBlock.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMLibraryBlock.java
@@ -342,33 +342,40 @@
 		}
 		if(standin != null) {
 			LibraryLocation library = standin.toLibraryLocation();
-			if (type == SubElement.JAVADOC_URL) {
+			switch (type) {
+			case SubElement.JAVADOC_URL:
 				URL[] urls = BuildPathDialogAccess.configureJavadocLocation(fLibraryViewer.getControl().getShell(), library.getSystemLibraryPath().toOSString(), library.getJavadocLocation());
 				if (urls != null) {
 					fLibraryContentProvider.setJavadoc(urls[0], selection);
 				}
-			}
-			else if(type == SubElement.SOURCE_PATH){
-				IRuntimeClasspathEntry entry = JavaRuntime.newArchiveRuntimeClasspathEntry(library.getSystemLibraryPath());
-				entry.setSourceAttachmentPath(library.getSystemLibrarySourcePath());
-				entry.setSourceAttachmentRootPath(library.getPackageRootPath());
-				IClasspathEntry classpathEntry = BuildPathDialogAccess.configureSourceAttachment(fLibraryViewer.getControl().getShell(), entry.getClasspathEntry());
-				if (classpathEntry != null) {
-					fLibraryContentProvider.setSourcePath(classpathEntry.getSourceAttachmentPath(), classpathEntry.getSourceAttachmentRootPath(), selection);
+				break;
+			case SubElement.SOURCE_PATH:
+				{
+					IRuntimeClasspathEntry entry = JavaRuntime.newArchiveRuntimeClasspathEntry(library.getSystemLibraryPath());
+					entry.setSourceAttachmentPath(library.getSystemLibrarySourcePath());
+					entry.setSourceAttachmentRootPath(library.getPackageRootPath());
+					IClasspathEntry classpathEntry = BuildPathDialogAccess.configureSourceAttachment(fLibraryViewer.getControl().getShell(), entry.getClasspathEntry());
+					if (classpathEntry != null) {
+						fLibraryContentProvider.setSourcePath(classpathEntry.getSourceAttachmentPath(), classpathEntry.getSourceAttachmentRootPath(), selection);
+					}
+					break;
 				}
-			}
-			else if(type == SubElement.EXTERNAL_ANNOTATIONS_PATH) {
-				IRuntimeClasspathEntry entry = JavaRuntime.newArchiveRuntimeClasspathEntry(library.getSystemLibraryPath());
-				entry.setExternalAnnotationsPath(library.getExternalAnnotationsPath());
-				IClasspathAttribute[] extraAttributes = entry.getClasspathEntry().getExtraAttributes();
-				String annotationPathString = findClasspathAttribute(extraAttributes, IClasspathAttribute.EXTERNAL_ANNOTATION_PATH);
-				IPath annotationPath = null == annotationPathString ? null : new Path(annotationPathString);
-
-				IPath newPath = BuildPathDialogAccess.configureExternalAnnotationsAttachment(fLibraryViewer.getControl().getShell(), annotationPath);
-				if (null == newPath) {
-					return;
+			case SubElement.EXTERNAL_ANNOTATIONS_PATH:
+				{
+					IRuntimeClasspathEntry entry = JavaRuntime.newArchiveRuntimeClasspathEntry(library.getSystemLibraryPath());
+					entry.setExternalAnnotationsPath(library.getExternalAnnotationsPath());
+					IClasspathAttribute[] extraAttributes = entry.getClasspathEntry().getExtraAttributes();
+					String annotationPathString = findClasspathAttribute(extraAttributes, IClasspathAttribute.EXTERNAL_ANNOTATION_PATH);
+					IPath annotationPath = null == annotationPathString ? null : new Path(annotationPathString);
+					IPath newPath = BuildPathDialogAccess.configureExternalAnnotationsAttachment(fLibraryViewer.getControl().getShell(), annotationPath);
+					if (null == newPath) {
+						return;
+					}
+					fLibraryContentProvider.setAnnotationsPath(newPath.segmentCount() == 0 ? null : newPath, selection);
+					break;
 				}
-				fLibraryContentProvider.setAnnotationsPath(newPath.segmentCount() == 0 ? null : newPath, selection);
+			default:
+				break;
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/SourceDebugExtensionParser.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/SourceDebugExtensionParser.java
index e3e9785..ed2fbeb 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/SourceDebugExtensionParser.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/SourceDebugExtensionParser.java
@@ -413,34 +413,34 @@
 	 */
 	private void parseFileInfo(Lexer lexer) throws AbsentInformationException {
 		int lexemType = lexer.lexemType();
-		if (lexemType == Lexer.NUMBER) {
-			int fileId = integerValue(lexer.lexem());
-			if (isAsteriskLexem(lexer.nextLexem())) {
-				throw new AbsentInformationException(
-						JDIMessages.SourceDebugExtensionParser_16);
-			}
-			fCurrentStratum.addFileInfo(fileId, getNonAsteriskString(lexer));
-		} else if (lexemType == Lexer.PLUS) {
-			if (lexer.nextLexem() != Lexer.NUMBER) {
-				throw new AbsentInformationException(
-						JDIMessages.SourceDebugExtensionParser_17);
-			}
-			int fileId = integerValue(lexer.lexem());
-			if (isAsteriskLexem(lexer.nextLexem())) {
-				throw new AbsentInformationException(
-						JDIMessages.SourceDebugExtensionParser_16);
-			}
-			String fileName = getNonAsteriskString(lexer);
-			if (isAsteriskLexem(lexer.lexemType())) {
-				throw new AbsentInformationException(
-						JDIMessages.SourceDebugExtensionParser_19);
-			}
-			fCurrentStratum.addFileInfo(fileId, fileName,
-					getNonAsteriskString(lexer));
-		} else {
-			throw new AbsentInformationException(NLS.bind(
-					JDIMessages.SourceDebugExtensionParser_12,
-					new String[] { new String(lexer.lexem()) }));
+		switch (lexemType) {
+			case Lexer.NUMBER:
+				int fileId = integerValue(lexer.lexem());
+				if (isAsteriskLexem(lexer.nextLexem())) {
+					throw new AbsentInformationException(
+							JDIMessages.SourceDebugExtensionParser_16);
+				}
+				fCurrentStratum.addFileInfo(fileId, getNonAsteriskString(lexer));
+				break;
+			case Lexer.PLUS:
+				if (lexer.nextLexem() != Lexer.NUMBER) {
+					throw new AbsentInformationException(
+							JDIMessages.SourceDebugExtensionParser_17);
+				}
+				fileId = integerValue(lexer.lexem());
+				if (isAsteriskLexem(lexer.nextLexem())) {
+					throw new AbsentInformationException(
+							JDIMessages.SourceDebugExtensionParser_16);
+				}
+				String fileName = getNonAsteriskString(lexer);
+				if (isAsteriskLexem(lexer.lexemType())) {
+					throw new AbsentInformationException(
+							JDIMessages.SourceDebugExtensionParser_19);
+				}
+				fCurrentStratum.addFileInfo(fileId, fileName, getNonAsteriskString(lexer));
+				break;
+			default:
+				throw new AbsentInformationException(NLS.bind(JDIMessages.SourceDebugExtensionParser_12, new String[] { new String(lexer.lexem()) }));
 		}
 	}
 
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 f7b5255..4c51147 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
@@ -60,7 +60,6 @@
 import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
 import org.eclipse.jdt.internal.debug.core.logicalstructures.JDILambdaVariable;
 import org.eclipse.jdt.internal.debug.core.logicalstructures.JDIReturnValueVariable;
-import org.eclipse.jdt.internal.debug.core.model.MethodResult.ResultType;
 
 import com.sun.jdi.AbsentInformationException;
 import com.sun.jdi.ClassNotLoadedException;
@@ -530,30 +529,42 @@
 	private void addStepReturnValue(List<IJavaVariable> variables) {
 		if (fIsTop) {
 			MethodResult methodResult = fThread.getMethodResult();
-			if (methodResult != null) {
-				if (methodResult.fResultType == ResultType.returned) {
-					if (fDepth + 1 != methodResult.fTargetFrameCount) {
-						// can happen e.g., because of checkPackageAccess/System.getSecurityManager()
-						return;
+			if (methodResult != null && methodResult.fResultType != null) {
+				switch (methodResult.fResultType) {
+					case returned:{
+						if (fDepth + 1 != methodResult.fTargetFrameCount) {
+							// can happen e.g., because of checkPackageAccess/System.getSecurityManager()
+							return;
+						}
+						String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ReturnValue, methodResult.fMethod.name());
+						variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
+						break;
 					}
-					String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ReturnValue, methodResult.fMethod.name());
-					variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
-				} else if (methodResult.fResultType == ResultType.returning) {
-					String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ReturningValue, methodResult.fMethod.name());
-					variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
-				} else if (methodResult.fResultType == ResultType.threw) {
-					if (fDepth + 1 > methodResult.fTargetFrameCount) {
-						// don't know if this really can happen, but other jvm suprises were not expected either
-						return;
+					case returning:{
+						String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ReturningValue, methodResult.fMethod.name());
+						variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
+						break;
 					}
-					String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ExceptionThrown, methodResult.fMethod.name());
-					variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
-				} else if (methodResult.fResultType == ResultType.throwing) {
-					String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ThrowingException, methodResult.fMethod.name());
-					variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
-				} else if (methodResult.fResultType == ResultType.step_timeout) {
-					String msg = JDIDebugModelMessages.JDIStackFrame_NotObservedBecauseOfTimeout;
-					variables.add(0, new JDIReturnValueVariable(JDIDebugModelMessages.JDIStackFrame_NoMethodReturnValue, new JDIPlaceholderValue(getJavaDebugTarget(), msg), false));
+					case threw:{
+						if (fDepth + 1 > methodResult.fTargetFrameCount) {
+							// don't know if this really can happen, but other jvm suprises were not expected either
+							return;
+						}
+						String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ExceptionThrown, methodResult.fMethod.name());
+						variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
+						break;
+					}
+					case throwing:{
+						String name = MessageFormat.format(JDIDebugModelMessages.JDIStackFrame_ThrowingException, methodResult.fMethod.name());
+						variables.add(0, new JDIReturnValueVariable(name, JDIValue.createValue(getJavaDebugTarget(), methodResult.fValue), true));
+						break;
+					}
+					case step_timeout:
+						String msg = JDIDebugModelMessages.JDIStackFrame_NotObservedBecauseOfTimeout;
+						variables.add(0, new JDIReturnValueVariable(JDIDebugModelMessages.JDIStackFrame_NoMethodReturnValue, new JDIPlaceholderValue(getJavaDebugTarget(), msg), false));
+						break;
+					default:
+						break;
 				}
 			} else if (JDIThread.showStepResultIsEnabled(getDebugTarget())) {
 				variables.add(0, new JDIReturnValueVariable(JDIDebugModelMessages.JDIStackFrame_NoMethodReturnValue, new JDIPlaceholderValue(getJavaDebugTarget(), ""), false)); //$NON-NLS-1$
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 e511152..82e7b1b 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
@@ -473,22 +473,27 @@
 		for (IRuntimeClasspathEntry entry : entries) {
 			String location = entry.getLocation();
 			if (location != null) {
-				if (entry.getClasspathProperty() == IRuntimeClasspathEntry.USER_CLASSES) {
+				switch (entry.getClasspathProperty()) {
+				case IRuntimeClasspathEntry.USER_CLASSES:
 					if (!classpathSet.contains(location)) {
 						classpathEntries.add(location);
 						classpathSet.add(location);
 					}
-				} else if (entry.getClasspathProperty() == IRuntimeClasspathEntry.CLASS_PATH) {
+					break;
+				case IRuntimeClasspathEntry.CLASS_PATH:
 					if (!classpathSet.contains(location)) {
 						classpathEntries.add(location);
 						classpathSet.add(location);
 					}
-
-				} else if (entry.getClasspathProperty() == IRuntimeClasspathEntry.MODULE_PATH) {
+					break;
+				case IRuntimeClasspathEntry.MODULE_PATH:
 					if (!modulepathSet.contains(location)) {
 						modulepathEntries.add(location);
 						modulepathSet.add(location);
 					}
+					break;
+				default:
+					break;
 				}
 
 			}
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
index fdfbba1..99e3d18 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
@@ -1561,14 +1561,19 @@
 		int property = -1;
 		switch (container.getKind()) {
 			case IClasspathContainer.K_APPLICATION:
-				if (entry.getClasspathProperty() == IRuntimeClasspathEntry.MODULE_PATH) {
-					property = IRuntimeClasspathEntry.MODULE_PATH;
-				} else if (entry.getClasspathProperty() == IRuntimeClasspathEntry.CLASS_PATH) {
-					property = IRuntimeClasspathEntry.CLASS_PATH;
-				} else {
-					property = IRuntimeClasspathEntry.USER_CLASSES;
+				switch (entry.getClasspathProperty()) {
+					case IRuntimeClasspathEntry.MODULE_PATH:
+						property = IRuntimeClasspathEntry.MODULE_PATH;
+						break;
+					case IRuntimeClasspathEntry.CLASS_PATH:
+						property = IRuntimeClasspathEntry.CLASS_PATH;
+						break;
+					default:
+						property = IRuntimeClasspathEntry.USER_CLASSES;
+						break;
 				}
 				break;
+
 			case IClasspathContainer.K_DEFAULT_SYSTEM:
 				property = IRuntimeClasspathEntry.STANDARD_CLASSES;
 				break;
