diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaConnectTab.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaConnectTab.java
index 374512a..5ac1c39 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaConnectTab.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaConnectTab.java
@@ -241,7 +241,7 @@
 						editor.getPreferenceStore().setValue(key, value);
 					}
 					else if (arg instanceof Connector.BooleanArgument) {
-						editor.getPreferenceStore().setValue(key, Boolean.valueOf(value).booleanValue());
+						editor.getPreferenceStore().setValue(key, Boolean.parseBoolean(value));
 					}
 					else if (arg instanceof Connector.IntegerArgument) {
 						editor.getPreferenceStore().setValue(key, Integer.parseInt(value));
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointHitCountAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointHitCountAction.java
index dfe9af6..7990e71 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointHitCountAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointHitCountAction.java
@@ -134,7 +134,7 @@
 			@Override
 			public String isValid(String value) {
 				try {
-					hitCount= Integer.valueOf(value.trim()).intValue();
+					hitCount= Integer.parseInt(value.trim());
 				} catch (NumberFormatException nfe) {
 					hitCount= -1;
 				}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
index aa3d273..b6e3e30 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
@@ -311,7 +311,7 @@
 			typeName = s.substring(0, typeName.indexOf(".java")); //$NON-NLS-1$
 			String lineNumber = s.substring(index + 1, s.length());
 			lineNumber = lineNumber.trim();
-			int line = (Integer.valueOf(lineNumber)).intValue();
+			int line = Integer.parseInt(lineNumber);
 			getTypeMatches(typeName, matches);
 			return line;
 		}
@@ -326,7 +326,7 @@
 			typeName = typeName.trim();
 			String lineNumber = s.substring(index + 1, s.length());
 			lineNumber = lineNumber.trim();
-			int line = (Integer.valueOf(lineNumber)).intValue();
+			int line = Integer.parseInt(lineNumber);
 			getTypeMatches(typeName, matches);
 			return line;
 		}
@@ -336,7 +336,7 @@
 			String typeLine = s.substring(index1 + 1, index2).trim();
 			int index = typeLine.indexOf(':');
 			String lineNumber = typeLine.substring(index + 1, typeLine.length()).trim();
-			int line = (Integer.valueOf(lineNumber)).intValue();
+			int line = Integer.parseInt(lineNumber);
 
 			Pattern pattern = Pattern.compile(STACK_TRACE_QUALIFIED_LINE_PATTERN);
 			Matcher matcher = pattern.matcher(s);
@@ -361,7 +361,7 @@
 			String method = s.substring(0, index + 1);
 			index = s.indexOf(':');
 			String lineNumber = s.substring(index + 1).trim();
-			int line = (Integer.valueOf(lineNumber)).intValue();
+			int line = Integer.parseInt(lineNumber);
 			getMethodMatches(method, matches);
 			return line;
 		}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
index 35e5d92..38aaf4b 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
@@ -3282,13 +3282,13 @@
 		token = removePrefixZerosAndUnderscores(token, false);
 		switch (getBase(token)) {
 		case 8:
-			return Integer.valueOf(token.substring(1), 8).intValue();
+			return Integer.parseInt(token.substring(1), 8);
 		case 16:
-			return Integer.valueOf(token.substring(2), 16).intValue();
+			return Integer.parseInt(token.substring(2), 16);
 		case 2:
-			return Integer.valueOf(token.substring(2), 2).intValue();
+			return Integer.parseInt(token.substring(2), 2);
 		default:
-			return Integer.valueOf(token, 10).intValue();
+			return Integer.parseInt(token, 10);
 		}
 	}
 
@@ -3304,13 +3304,13 @@
 		token = removePrefixZerosAndUnderscores(token, false);
 		switch (getBase(token)) {
 		case 8:
-			return Short.valueOf(token.substring(1), 8).shortValue();
+			return Short.parseShort(token.substring(1), 8);
 		case 16:
-			return Short.valueOf(token.substring(2), 16).shortValue();
+			return Short.parseShort(token.substring(2), 16);
 		case 2:
-			return Short.valueOf(token.substring(2), 2).shortValue();
+			return Short.parseShort(token.substring(2), 2);
 		default:
-			return Short.valueOf(token, 10).shortValue();
+			return Short.parseShort(token, 10);
 		}
 	}
 
@@ -3326,13 +3326,13 @@
 		token = removePrefixZerosAndUnderscores(token, false);
 		switch (getBase(token)) {
 		case 8:
-			return Byte.valueOf(token.substring(1), 8).byteValue();
+			return Byte.parseByte(token.substring(1), 8);
 		case 16:
-			return Byte.valueOf(token.substring(2), 16).byteValue();
+			return Byte.parseByte(token.substring(2), 16);
 		case 2:
-			return Byte.valueOf(token.substring(2), 2).byteValue();
+			return Byte.parseByte(token.substring(2), 2);
 		default:
-			return Byte.valueOf(token, 10).byteValue();
+			return Byte.parseByte(token, 10);
 		}
 	}
 
@@ -3348,13 +3348,13 @@
 		token = removePrefixZerosAndUnderscores(token, true);
 		switch (getBase(token)) {
 		case 8:
-			return Long.valueOf(token.substring(1), 8).longValue();
+			return Long.parseLong(token.substring(1), 8);
 		case 16:
-			return Long.valueOf(token.substring(2), 16).longValue();
+			return Long.parseLong(token.substring(2), 16);
 		case 2:
-			return Long.valueOf(token.substring(2), 2).longValue();
+			return Long.parseLong(token.substring(2), 2);
 		default:
-			return Long.valueOf(token, 10).longValue();
+			return Long.parseLong(token, 10);
 		}
 	}
 
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 b6d42fe..adf6053 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
@@ -70,10 +70,10 @@
 		} else {
 			num = sourceLevel;
 		}
-		fSourceMajorLevel = Integer.valueOf(num).intValue();
+		fSourceMajorLevel = Integer.parseInt(num);
 		if (index != -1) {
 			num = sourceLevel.substring(index + 1);
-			fSourceMinorLevel = Integer.valueOf(num).intValue();
+			fSourceMinorLevel = Integer.parseInt(num);
 		} else {
 			fSourceMinorLevel = 0;
 		}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
index 4b89662..a4e101b 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
@@ -204,10 +204,10 @@
 		} else {
 			num = sourceLevel;
 		}
-		fSourceMajorLevel = Integer.valueOf(num).intValue();
+		fSourceMajorLevel = Integer.parseInt(num);
 		if (index != -1) {
 			num = sourceLevel.substring(index + 1);
-			fSourceMinorLevel = Integer.valueOf(num).intValue();
+			fSourceMinorLevel = Integer.parseInt(num);
 		} else {
 			fSourceMinorLevel = 0;
 		}
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java
index 0ca6cc3..02dcd0b 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/VirtualMachineManagerImpl.java
@@ -120,8 +120,7 @@
 			PropertyResourceBundle prefs = new PropertyResourceBundle(stream);
 
 			try {
-				fVerbose = Boolean
-						.valueOf(prefs.getString("User.verbose")).booleanValue(); //$NON-NLS-1$
+				fVerbose = Boolean.parseBoolean(prefs.getString("User.verbose")); //$NON-NLS-1$
 			} catch (MissingResourceException e) {
 			}
 
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
index 41f8c2f..12655f7 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
@@ -224,8 +224,7 @@
 					JDIDebugPlugin.getUniqueIdentifier(), JDIDebugPlugin.ERROR,
 					LogicalStructuresMessages.JavaLogicalStructures_0, null));
 		}
-		fSubtypes = Boolean.valueOf(
-				configurationElement.getAttribute("subtypes")).booleanValue(); //$NON-NLS-1$
+		fSubtypes = Boolean.parseBoolean(configurationElement.getAttribute("subtypes")); //$NON-NLS-1$
 		fValue = configurationElement.getAttribute("value"); //$NON-NLS-1$
 		fDescription = configurationElement.getAttribute("description"); //$NON-NLS-1$
 		if (fDescription == null) {
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIModificationVariable.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIModificationVariable.java
index fe500fc..87230b1 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIModificationVariable.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIModificationVariable.java
@@ -70,13 +70,12 @@
 				String flse = Boolean.FALSE.toString();
 				String tre = Boolean.TRUE.toString();
 				if (expression.equals(tre) || expression.equals(flse)) {
-					boolean booleanValue = Boolean.valueOf(expression)
-							.booleanValue();
+					boolean booleanValue = Boolean.parseBoolean(expression);
 					vmValue = vm.mirrorOf(booleanValue);
 				}
 				break;
 			case 'B':
-				byte byteValue = Byte.valueOf(expression).byteValue();
+				byte byteValue = Byte.parseByte(expression);
 				vmValue = vm.mirrorOf(byteValue);
 				break;
 			case 'C':
@@ -120,23 +119,23 @@
 				}
 				break;
 			case 'S':
-				short shortValue = Short.valueOf(expression).shortValue();
+				short shortValue = Short.parseShort(expression);
 				vmValue = vm.mirrorOf(shortValue);
 				break;
 			case 'I':
-				int intValue = Integer.valueOf(expression).intValue();
+				int intValue = Integer.parseInt(expression);
 				vmValue = vm.mirrorOf(intValue);
 				break;
 			case 'J':
-				long longValue = Long.valueOf(expression).longValue();
+				long longValue = Long.parseLong(expression);
 				vmValue = vm.mirrorOf(longValue);
 				break;
 			case 'F':
-				float floatValue = Float.valueOf(expression).floatValue();
+				float floatValue = Float.parseFloat(expression);
 				vmValue = vm.mirrorOf(floatValue);
 				break;
 			case 'D':
-				double doubleValue = Double.valueOf(expression).doubleValue();
+				double doubleValue = Double.parseDouble(expression);
 				vmValue = vm.mirrorOf(doubleValue);
 				break;
 			case 'L':
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/CompositeId.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/CompositeId.java
index e5f30f4..f56d1b1 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/CompositeId.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/CompositeId.java
@@ -29,7 +29,7 @@
 		ArrayList<String> parts= new ArrayList<>();
 		int commaIndex= idString.indexOf(',');
 		while (commaIndex > 0) {
-			int length= Integer.valueOf(idString.substring(0, commaIndex)).intValue();
+			int length= Integer.parseInt(idString.substring(0, commaIndex));
 			String part= idString.substring(commaIndex+1, commaIndex+1+length);
 			parts.add(part);
 			idString= idString.substring(commaIndex+1+length);
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java
index c5d9d43..d2b45ab 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java
@@ -91,7 +91,7 @@
 		setJavaProject(project);
 		name = memento.getAttribute("exportedEntriesOnly"); //$NON-NLS-1$
 		if (name != null) {
-			fExportedEntriesOnly = Boolean.valueOf(name).booleanValue();
+			fExportedEntriesOnly = Boolean.parseBoolean(name);
 		}
 	}
 	/* (non-Javadoc)
